Skip to content

Commit 2863bdd

Browse files
committed
fix formatting and imports
1 parent 962bf0f commit 2863bdd

File tree

9 files changed

+128
-62
lines changed

9 files changed

+128
-62
lines changed

lib/dashbot/features/documentation.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ class DocumentationFeature {
1616
}
1717

1818
final method = requestModel.httpRequestModel?.method
19-
.toString()
20-
.split('.')
21-
.last
22-
.toUpperCase() ??
19+
.toString()
20+
.split('.')
21+
.last
22+
.toUpperCase() ??
2323
"GET";
2424
final endpoint = requestModel.httpRequestModel?.url ?? "Unknown Endpoint";
2525
final headers = requestModel.httpRequestModel?.enabledHeadersMap ?? {};
2626
final parameters = requestModel.httpRequestModel?.enabledParamsMap ?? {};
2727
final body = requestModel.httpRequestModel?.body;
2828
final rawResponse = responseModel.body;
2929
final responseBody =
30-
rawResponse is String ? rawResponse : jsonEncode(rawResponse);
30+
rawResponse is String ? rawResponse : jsonEncode(rawResponse);
3131
final statusCode = responseModel.statusCode ?? 0;
3232

3333
final prompt = """

lib/dashbot/features/features.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export 'debug.dart';
2+
export 'documentation.dart';
3+
export 'explain.dart';
4+
export 'general_query.dart';
5+
export 'test_generator.dart';

lib/dashbot/features/general_query.dart

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,17 @@ class GeneralQueryFeature {
66

77
GeneralQueryFeature(this._client);
88

9-
Future<String> generateResponse(String prompt, {RequestModel? requestModel, dynamic responseModel}) async {
9+
Future<String> generateResponse(String prompt,
10+
{RequestModel? requestModel, dynamic responseModel}) async {
1011
String enhancedPrompt = prompt;
1112

1213
if (requestModel != null && responseModel != null) {
13-
final method = requestModel.httpRequestModel?.method.toString().split('.').last.toUpperCase() ?? "GET";
14+
final method = requestModel.httpRequestModel?.method
15+
.toString()
16+
.split('.')
17+
.last
18+
.toUpperCase() ??
19+
"GET";
1420
final endpoint = requestModel.httpRequestModel?.url ?? "Unknown Endpoint";
1521
final statusCode = responseModel.statusCode ?? 0;
1622

@@ -37,7 +43,10 @@ Respond in a helpful, direct manner that specifically answers what was asked.
3743
}
3844

3945
final response = await _client.generateCompletion(
40-
request: GenerateCompletionRequest(model: 'llama3.2:3b', prompt: enhancedPrompt),
46+
request: GenerateCompletionRequest(
47+
model: 'llama3.2:3b',
48+
prompt: enhancedPrompt,
49+
),
4150
);
4251
return response.response.toString();
4352
}

lib/dashbot/features/test_generator.dart

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ class TestGeneratorFeature {
1616
}
1717

1818
final method = requestModel.httpRequestModel?.method
19-
.toString()
20-
.split('.')
21-
.last
22-
.toUpperCase() ??
19+
.toString()
20+
.split('.')
21+
.last
22+
.toUpperCase() ??
2323
"GET";
2424
final endpoint = requestModel.httpRequestModel?.url ?? "Unknown Endpoint";
2525
final rawResponse = responseModel.body;
2626
final responseBody =
27-
rawResponse is String ? rawResponse : jsonEncode(rawResponse);
27+
rawResponse is String ? rawResponse : jsonEncode(rawResponse);
2828
final statusCode = responseModel.statusCode ?? 0;
2929

3030
Uri uri = Uri.parse(endpoint);
@@ -75,9 +75,11 @@ Focus on creating realistic test values based on the API context (e.g., for a co
7575

7676
parameters.forEach((key, value) {
7777
if (RegExp(r'^[A-Z]{3}$').hasMatch(value)) {
78-
analysis[key] = "Appears to be a 3-letter country code (ISO 3166-1 alpha-3)";
78+
analysis[key] =
79+
"Appears to be a 3-letter country code (ISO 3166-1 alpha-3)";
7980
} else if (RegExp(r'^[A-Z]{2}$').hasMatch(value)) {
80-
analysis[key] = "Appears to be a 2-letter country code (ISO 3166-1 alpha-2)";
81+
analysis[key] =
82+
"Appears to be a 2-letter country code (ISO 3166-1 alpha-2)";
8183
} else if (RegExp(r'^\d+$').hasMatch(value)) {
8284
analysis[key] = "Numeric value";
8385
} else if (RegExp(r'^[a-zA-Z]+$').hasMatch(value)) {
Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
import 'package:apidash/dashbot/features/debug.dart';
2-
import 'package:apidash/dashbot/features/documentation.dart';
31
import 'package:ollama_dart/ollama_dart.dart';
4-
import 'package:apidash/dashbot/features/explain.dart';
5-
import 'package:apidash/dashbot/features/test_generator.dart';
62
import 'package:apidash/models/request_model.dart';
7-
import 'package:apidash/dashbot/features/general_query.dart';
3+
import '../features/features.dart';
84

95
class DashBotService {
106
final OllamaClient _client;
@@ -16,7 +12,8 @@ class DashBotService {
1612

1713
DashBotService()
1814
: _client = OllamaClient(baseUrl: 'http://127.0.0.1:11434/api'),
19-
_generalQueryFeature = GeneralQueryFeature(OllamaClient(baseUrl: 'http://127.0.0.1:11434/api')) {
15+
_generalQueryFeature = GeneralQueryFeature(
16+
OllamaClient(baseUrl: 'http://127.0.0.1:11434/api')) {
2017
_explainFeature = ExplainFeature(this);
2118
_debugFeature = DebugFeature(this);
2219
_documentationFeature = DocumentationFeature(this);
@@ -28,21 +25,36 @@ class DashBotService {
2825
}
2926

3027
Future<String> handleRequest(
31-
String input, RequestModel? requestModel, dynamic responseModel) async {
28+
String input,
29+
RequestModel? requestModel,
30+
dynamic responseModel,
31+
) async {
3232
if (input == "Explain API") {
3333
return _explainFeature.explainLatestApi(
34-
requestModel: requestModel, responseModel: responseModel);
34+
requestModel: requestModel,
35+
responseModel: responseModel,
36+
);
3537
} else if (input == "Debug API") {
3638
return _debugFeature.debugApi(
37-
requestModel: requestModel, responseModel: responseModel);
39+
requestModel: requestModel,
40+
responseModel: responseModel,
41+
);
3842
} else if (input == "Document API") {
3943
return _documentationFeature.generateApiDocumentation(
40-
requestModel: requestModel, responseModel: responseModel);
44+
requestModel: requestModel,
45+
responseModel: responseModel,
46+
);
4147
} else if (input == "Test API") {
4248
return _testGeneratorFeature.generateApiTests(
43-
requestModel: requestModel, responseModel: responseModel);
49+
requestModel: requestModel,
50+
responseModel: responseModel,
51+
);
4452
}
4553

46-
return _generalQueryFeature.generateResponse(input, requestModel: requestModel, responseModel: responseModel);
54+
return _generalQueryFeature.generateResponse(
55+
input,
56+
requestModel: requestModel,
57+
responseModel: responseModel,
58+
);
4759
}
4860
}

lib/dashbot/widgets/chat_bubble.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ class ChatBubble extends StatelessWidget {
77
final String message;
88
final bool isUser;
99

10-
const ChatBubble({super.key, required this.message, this.isUser = false});
10+
const ChatBubble({
11+
super.key,
12+
required this.message,
13+
this.isUser = false,
14+
});
1115

1216
@override
1317
Widget build(BuildContext context) {

lib/dashbot/widgets/content_renderer.dart

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,18 @@ import 'package:flutter_highlighter/flutter_highlighter.dart';
55
import 'package:flutter_highlighter/themes/monokai-sublime.dart';
66
import 'package:flutter_markdown/flutter_markdown.dart';
77

8-
Widget renderContent(BuildContext context, String text) {
8+
Widget renderContent(
9+
BuildContext context,
10+
String text,
11+
) {
912
if (text.isEmpty) {
1013
return const Text("No content to display.");
1114
}
1215

13-
final codeBlockPattern = RegExp(r'```(\w+)?\n([\s\S]*?)```', multiLine: true);
16+
final codeBlockPattern = RegExp(
17+
r'```(\w+)?\n([\s\S]*?)```',
18+
multiLine: true,
19+
);
1420
final matches = codeBlockPattern.allMatches(text);
1521

1622
if (matches.isEmpty) {
@@ -22,8 +28,10 @@ Widget renderContent(BuildContext context, String text) {
2228

2329
for (var match in matches) {
2430
if (match.start > lastEnd) {
25-
children
26-
.add(_renderMarkdown(context, text.substring(lastEnd, match.start)));
31+
children.add(_renderMarkdown(
32+
context,
33+
text.substring(lastEnd, match.start),
34+
));
2735
}
2836

2937
final language = match.group(1) ?? 'text';
@@ -43,7 +51,10 @@ Widget renderContent(BuildContext context, String text) {
4351
);
4452
}
4553

46-
Widget _renderMarkdown(BuildContext context, String markdown) {
54+
Widget _renderMarkdown(
55+
BuildContext context,
56+
String markdown,
57+
) {
4758
return MarkdownBody(
4859
data: markdown,
4960
selectable: true,
@@ -53,7 +64,11 @@ Widget _renderMarkdown(BuildContext context, String markdown) {
5364
);
5465
}
5566

56-
Widget _renderCodeBlock(BuildContext context, String language, String code) {
67+
Widget _renderCodeBlock(
68+
BuildContext context,
69+
String language,
70+
String code,
71+
) {
5772
if (language == 'json') {
5873
try {
5974
final prettyJson =
@@ -63,7 +78,10 @@ Widget _renderCodeBlock(BuildContext context, String language, String code) {
6378
color: Theme.of(context).colorScheme.surfaceContainerLow,
6479
child: SelectableText(
6580
prettyJson,
66-
style: const TextStyle(fontFamily: 'monospace', fontSize: 12),
81+
style: const TextStyle(
82+
fontFamily: 'monospace',
83+
fontSize: 12,
84+
),
6785
),
6886
);
6987
} catch (e) {
@@ -78,7 +96,10 @@ Widget _renderCodeBlock(BuildContext context, String language, String code) {
7896
code,
7997
language: language,
8098
theme: monokaiSublimeTheme,
81-
textStyle: const TextStyle(fontFamily: 'monospace', fontSize: 12),
99+
textStyle: const TextStyle(
100+
fontFamily: 'monospace',
101+
fontSize: 12,
102+
),
82103
),
83104
);
84105
} catch (e) {
@@ -87,14 +108,20 @@ Widget _renderCodeBlock(BuildContext context, String language, String code) {
87108
}
88109
}
89110

90-
Widget _renderFallbackCode(BuildContext context, String code) {
111+
Widget _renderFallbackCode(
112+
BuildContext context,
113+
String code,
114+
) {
91115
return Container(
92116
padding: const EdgeInsets.all(8),
93117
color: Theme.of(context).colorScheme.surfaceContainerLow,
94118
child: SelectableText(
95119
code,
96120
style: const TextStyle(
97-
fontFamily: 'monospace', fontSize: 12, color: Colors.red),
121+
fontFamily: 'monospace',
122+
fontSize: 12,
123+
color: Colors.red,
124+
),
98125
),
99126
);
100127
}

lib/dashbot/widgets/dashbot_widget.dart

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ class _DashBotWidgetState extends ConsumerState<DashBotWidget> {
5353
final testCases = response.replaceFirst("TEST_CASES_HIDDEN\n", "");
5454
ref.read(chatMessagesProvider.notifier).addMessage({
5555
'role': 'bot',
56-
'message': "Test cases generated successfully. Click the button below to run them.",
56+
'message':
57+
"Test cases generated successfully. Click the button below to run them.",
5758
'testCases': testCases,
5859
'showTestButton': true,
5960
});
@@ -113,18 +114,18 @@ class _DashBotWidgetState extends ConsumerState<DashBotWidget> {
113114
child: isMinimized
114115
? _buildMinimizedView(context)
115116
: Column(
116-
crossAxisAlignment: CrossAxisAlignment.start,
117-
children: [
118-
_buildHeader(context),
119-
const SizedBox(height: 12),
120-
_buildQuickActions(showDebugButton),
121-
const SizedBox(height: 12),
122-
Expanded(child: _buildChatArea(messages)),
123-
if (_isLoading) _buildLoadingIndicator(),
124-
const SizedBox(height: 10),
125-
_buildInputArea(context),
126-
],
127-
),
117+
crossAxisAlignment: CrossAxisAlignment.start,
118+
children: [
119+
_buildHeader(context),
120+
const SizedBox(height: 12),
121+
_buildQuickActions(showDebugButton),
122+
const SizedBox(height: 12),
123+
Expanded(child: _buildChatArea(messages)),
124+
if (_isLoading) _buildLoadingIndicator(),
125+
const SizedBox(height: 10),
126+
_buildInputArea(context),
127+
],
128+
),
128129
);
129130
}
130131

@@ -150,7 +151,8 @@ class _DashBotWidgetState extends ConsumerState<DashBotWidget> {
150151
),
151152
tooltip: isMinimized ? 'Maximize' : 'Minimize',
152153
onPressed: () {
153-
ref.read(dashBotMinimizedProvider.notifier).state = !isMinimized;
154+
ref.read(dashBotMinimizedProvider.notifier).state =
155+
!isMinimized;
154156
},
155157
),
156158
IconButton(
@@ -214,7 +216,8 @@ class _DashBotWidgetState extends ConsumerState<DashBotWidget> {
214216
icon: const Icon(Icons.bug_report_outlined, size: 16),
215217
label: const Text("Debug"),
216218
style: ElevatedButton.styleFrom(
217-
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
219+
padding:
220+
const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
218221
visualDensity: VisualDensity.compact,
219222
),
220223
),

lib/dashbot/widgets/test_runner_widget.dart

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import 'content_renderer.dart';
88
class TestRunnerWidget extends ConsumerStatefulWidget {
99
final String testCases;
1010

11-
const TestRunnerWidget({Key? key, required this.testCases}) : super(key: key);
11+
const TestRunnerWidget({
12+
Key? key,
13+
required this.testCases,
14+
}) : super(key: key);
1215

1316
@override
1417
ConsumerState<TestRunnerWidget> createState() => _TestRunnerWidgetState();
@@ -78,7 +81,8 @@ class _TestRunnerWidgetState extends ConsumerState<TestRunnerWidget> {
7881
String method = "GET";
7982
if (command.contains("-X POST") || command.contains("--request POST")) {
8083
method = "POST";
81-
} else if (command.contains("-X PUT") || command.contains("--request PUT")) {
84+
} else if (command.contains("-X PUT") ||
85+
command.contains("--request PUT")) {
8286
method = "PUT";
8387
}
8488

@@ -139,9 +143,9 @@ class _TestRunnerWidgetState extends ConsumerState<TestRunnerWidget> {
139143
title: const Text('API Test Runner'),
140144
content: const Text(
141145
'Run generated API tests:\n\n'
142-
'• "Run All" executes all tests\n'
143-
'• "Run" executes a single test\n'
144-
'• "Copy" copies the curl command',
146+
'• "Run All" executes all tests\n'
147+
'• "Run" executes a single test\n'
148+
'• "Copy" copies the curl command',
145149
),
146150
actions: [
147151
TextButton(
@@ -189,9 +193,8 @@ class _TestRunnerWidgetState extends ConsumerState<TestRunnerWidget> {
189193
test['description'] ?? "Test case ${index + 1}",
190194
style: TextStyle(
191195
fontWeight: FontWeight.bold,
192-
color: hasResult
193-
? (isSuccess ? Colors.green : Colors.red)
194-
: null,
196+
color:
197+
hasResult ? (isSuccess ? Colors.green : Colors.red) : null,
195198
),
196199
),
197200
subtitle: Text('Test ${index + 1} of ${_parsedTests.length}'),
@@ -241,7 +244,8 @@ class _TestRunnerWidgetState extends ConsumerState<TestRunnerWidget> {
241244
padding: const EdgeInsets.all(8),
242245
margin: const EdgeInsets.only(top: 4, bottom: 16),
243246
decoration: BoxDecoration(
244-
color: Theme.of(context).colorScheme.surfaceContainerLow,
247+
color:
248+
Theme.of(context).colorScheme.surfaceContainerLow,
245249
borderRadius: BorderRadius.circular(4),
246250
),
247251
width: double.infinity,

0 commit comments

Comments
 (0)