Skip to content

Commit da46216

Browse files
authored
Merge pull request #320 from mdmohsin7/add-clear-response-functionality
feat: ability to clear current response
2 parents 24c0896 + 087b4e6 commit da46216

File tree

4 files changed

+72
-0
lines changed

4 files changed

+72
-0
lines changed

lib/providers/collection_providers.dart

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,29 @@ class CollectionStateNotifier
9696
state = map;
9797
}
9898

99+
void clearResponse(String id) {
100+
var map = {...state!};
101+
map[id] = RequestModel(
102+
id: id,
103+
method: state![id]!.method,
104+
url: state![id]!.url,
105+
name: state![id]!.name,
106+
description: state![id]!.description,
107+
requestTabIndex: state![id]!.requestTabIndex,
108+
requestHeaders: state![id]!.requestHeaders,
109+
requestParams: state![id]!.requestParams,
110+
isHeaderEnabledList: state![id]!.isHeaderEnabledList,
111+
isParamEnabledList: state![id]!.isParamEnabledList,
112+
requestBodyContentType: state![id]!.requestBodyContentType,
113+
requestBody: state![id]!.requestBody,
114+
requestFormDataList: state![id]!.requestFormDataList,
115+
responseStatus: null,
116+
message: null,
117+
responseModel: null,
118+
);
119+
state = map;
120+
}
121+
99122
void duplicate(String id) {
100123
final newId = getNewUuid();
101124

lib/widgets/buttons.dart

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import 'package:apidash/providers/providers.dart';
12
import 'package:flutter/material.dart';
23
import 'package:flutter/services.dart';
4+
import 'package:flutter_riverpod/flutter_riverpod.dart';
35
import 'package:url_launcher/url_launcher.dart';
46
import 'package:apidash/utils/utils.dart';
57
import 'package:apidash/consts.dart';
@@ -235,3 +237,34 @@ class SaveButton extends StatelessWidget {
235237
);
236238
}
237239
}
240+
241+
class ClearResponseButton extends ConsumerWidget {
242+
const ClearResponseButton({super.key});
243+
244+
@override
245+
Widget build(BuildContext context, WidgetRef ref) {
246+
var sm = ScaffoldMessenger.of(context);
247+
return Tooltip(
248+
message: 'Clear response',
249+
child: TextButton(
250+
style: TextButton.styleFrom(minimumSize: const Size(40, 40)),
251+
onPressed: () {
252+
final selectedId = ref.watch(selectedIdStateProvider);
253+
ref
254+
.read(collectionStateNotifierProvider.notifier)
255+
.clearResponse(selectedId!);
256+
sm.hideCurrentSnackBar();
257+
sm.showSnackBar(
258+
const SnackBar(
259+
content: Text('Response cleared'),
260+
),
261+
);
262+
},
263+
child: const Icon(
264+
Icons.delete,
265+
size: 20,
266+
),
267+
),
268+
);
269+
}
270+
}

lib/widgets/response_widgets.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ class ResponsePaneHeader extends StatelessWidget {
116116
color: Theme.of(context).colorScheme.secondary,
117117
),
118118
),
119+
kHSpacer10,
120+
const ClearResponseButton()
119121
],
120122
),
121123
),

test/widgets/buttons_test.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,4 +186,18 @@ void main() {
186186
expect(find.byIcon(Icons.save), findsOneWidget);
187187
expect(find.text("Save"), findsOneWidget);
188188
});
189+
190+
testWidgets('Testing for ClearResponseButton', (tester) async {
191+
await tester.pumpWidget(
192+
MaterialApp(
193+
title: 'ClearResponseButton',
194+
theme: kThemeDataLight,
195+
home: const Scaffold(
196+
body: ClearResponseButton(),
197+
),
198+
),
199+
);
200+
201+
expect(find.byIcon(Icons.delete), findsOneWidget);
202+
});
189203
}

0 commit comments

Comments
 (0)