From 087b4e6c5b514ad62011a79e9063b5ec974489fb Mon Sep 17 00:00:00 2001 From: Mohammed Mohsin <59914433+mdmohsin7@users.noreply.github.com> Date: Sun, 17 Mar 2024 15:56:59 +0530 Subject: [PATCH] feat: ability to clear response --- lib/providers/collection_providers.dart | 23 +++++++++++++++++ lib/widgets/buttons.dart | 33 +++++++++++++++++++++++++ lib/widgets/response_widgets.dart | 2 ++ test/widgets/buttons_test.dart | 14 +++++++++++ 4 files changed, 72 insertions(+) diff --git a/lib/providers/collection_providers.dart b/lib/providers/collection_providers.dart index 4ecc51ab..b22f99fa 100644 --- a/lib/providers/collection_providers.dart +++ b/lib/providers/collection_providers.dart @@ -96,6 +96,29 @@ class CollectionStateNotifier state = map; } + void clearResponse(String id) { + var map = {...state!}; + map[id] = RequestModel( + id: id, + method: state![id]!.method, + url: state![id]!.url, + name: state![id]!.name, + description: state![id]!.description, + requestTabIndex: state![id]!.requestTabIndex, + requestHeaders: state![id]!.requestHeaders, + requestParams: state![id]!.requestParams, + isHeaderEnabledList: state![id]!.isHeaderEnabledList, + isParamEnabledList: state![id]!.isParamEnabledList, + requestBodyContentType: state![id]!.requestBodyContentType, + requestBody: state![id]!.requestBody, + requestFormDataList: state![id]!.requestFormDataList, + responseStatus: null, + message: null, + responseModel: null, + ); + state = map; + } + void duplicate(String id) { final newId = getNewUuid(); diff --git a/lib/widgets/buttons.dart b/lib/widgets/buttons.dart index f9baf0c4..c4fa0371 100644 --- a/lib/widgets/buttons.dart +++ b/lib/widgets/buttons.dart @@ -1,5 +1,7 @@ +import 'package:apidash/providers/providers.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:apidash/utils/utils.dart'; import 'package:apidash/consts.dart'; @@ -235,3 +237,34 @@ class SaveButton extends StatelessWidget { ); } } + +class ClearResponseButton extends ConsumerWidget { + const ClearResponseButton({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + var sm = ScaffoldMessenger.of(context); + return Tooltip( + message: 'Clear response', + child: TextButton( + style: TextButton.styleFrom(minimumSize: const Size(40, 40)), + onPressed: () { + final selectedId = ref.watch(selectedIdStateProvider); + ref + .read(collectionStateNotifierProvider.notifier) + .clearResponse(selectedId!); + sm.hideCurrentSnackBar(); + sm.showSnackBar( + const SnackBar( + content: Text('Response cleared'), + ), + ); + }, + child: const Icon( + Icons.delete, + size: 20, + ), + ), + ); + } +} diff --git a/lib/widgets/response_widgets.dart b/lib/widgets/response_widgets.dart index 539a2a34..5298176f 100644 --- a/lib/widgets/response_widgets.dart +++ b/lib/widgets/response_widgets.dart @@ -116,6 +116,8 @@ class ResponsePaneHeader extends StatelessWidget { color: Theme.of(context).colorScheme.secondary, ), ), + kHSpacer10, + const ClearResponseButton() ], ), ), diff --git a/test/widgets/buttons_test.dart b/test/widgets/buttons_test.dart index 2b961e07..71492c91 100644 --- a/test/widgets/buttons_test.dart +++ b/test/widgets/buttons_test.dart @@ -186,4 +186,18 @@ void main() { expect(find.byIcon(Icons.save), findsOneWidget); expect(find.text("Save"), findsOneWidget); }); + + testWidgets('Testing for ClearResponseButton', (tester) async { + await tester.pumpWidget( + MaterialApp( + title: 'ClearResponseButton', + theme: kThemeDataLight, + home: const Scaffold( + body: ClearResponseButton(), + ), + ), + ); + + expect(find.byIcon(Icons.delete), findsOneWidget); + }); }