Skip to content

Commit 9b40763

Browse files
committed
Refactor for clear response button
1 parent da46216 commit 9b40763

File tree

5 files changed

+48
-53
lines changed

5 files changed

+48
-53
lines changed

lib/models/request_model.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,13 @@ class RequestModel {
9494

9595
RequestModel duplicate({
9696
required String id,
97+
String? name,
9798
}) {
9899
return RequestModel(
99100
id: id,
100101
method: method,
101102
url: url,
102-
name: "$name (copy)",
103+
name: name ?? "${this.name} (copy)",
103104
description: description,
104105
requestHeaders: requestHeaders != null ? [...requestHeaders!] : null,
105106
requestParams: requestParams != null ? [...requestParams!] : null,

lib/providers/collection_providers.dart

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

99-
void clearResponse(String id) {
100-
var map = {...state!};
101-
map[id] = RequestModel(
99+
void clearResponse(String? id) {
100+
if (id == null || state?[id] == null) return;
101+
var currentModel = state![id]!;
102+
final newModel = currentModel.duplicate(
102103
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,
104+
name: currentModel.name,
118105
);
106+
var map = {...state!};
107+
map[id] = newModel;
119108
state = map;
120109
}
121110

@@ -157,21 +146,22 @@ class CollectionStateNotifier
157146
ResponseModel? responseModel,
158147
}) {
159148
final newModel = state![id]!.copyWith(
160-
method: method,
161-
url: url,
162-
name: name,
163-
description: description,
164-
requestTabIndex: requestTabIndex,
165-
requestHeaders: requestHeaders,
166-
requestParams: requestParams,
167-
isHeaderEnabledList: isHeaderEnabledList,
168-
isParamEnabledList: isParamEnabledList,
169-
requestBodyContentType: requestBodyContentType,
170-
requestBody: requestBody,
171-
requestFormDataList: requestFormDataList,
172-
responseStatus: responseStatus,
173-
message: message,
174-
responseModel: responseModel);
149+
method: method,
150+
url: url,
151+
name: name,
152+
description: description,
153+
requestTabIndex: requestTabIndex,
154+
requestHeaders: requestHeaders,
155+
requestParams: requestParams,
156+
isHeaderEnabledList: isHeaderEnabledList,
157+
isParamEnabledList: isParamEnabledList,
158+
requestBodyContentType: requestBodyContentType,
159+
requestBody: requestBody,
160+
requestFormDataList: requestFormDataList,
161+
responseStatus: responseStatus,
162+
message: message,
163+
responseModel: responseModel,
164+
);
175165
//print(newModel);
176166
var map = {...state!};
177167
map[id] = newModel;

lib/screens/home_page/editor_pane/details_card/response_pane.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class ResponseDetails extends ConsumerWidget {
3434

3535
@override
3636
Widget build(BuildContext context, WidgetRef ref) {
37+
var sm = ScaffoldMessenger.of(context);
3738
final responseStatus = ref.watch(
3839
selectedRequestModelProvider.select((value) => value?.responseStatus));
3940
final message = ref
@@ -46,6 +47,14 @@ class ResponseDetails extends ConsumerWidget {
4647
responseStatus: responseStatus,
4748
message: message,
4849
time: responseModel?.time,
50+
onClearResponse: () {
51+
final selectedRequest = ref.read(selectedRequestModelProvider);
52+
ref
53+
.read(collectionStateNotifierProvider.notifier)
54+
.clearResponse(selectedRequest?.id);
55+
sm.hideCurrentSnackBar();
56+
sm.showSnackBar(getSnackBar('Response cleared'));
57+
},
4958
),
5059
const Expanded(
5160
child: ResponseTabs(),

lib/widgets/buttons.dart

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
import 'package:apidash/providers/providers.dart';
21
import 'package:flutter/material.dart';
32
import 'package:flutter/services.dart';
4-
import 'package:flutter_riverpod/flutter_riverpod.dart';
53
import 'package:url_launcher/url_launcher.dart';
64
import 'package:apidash/utils/utils.dart';
75
import 'package:apidash/consts.dart';
@@ -238,28 +236,21 @@ class SaveButton extends StatelessWidget {
238236
}
239237
}
240238

241-
class ClearResponseButton extends ConsumerWidget {
242-
const ClearResponseButton({super.key});
239+
class ClearResponseButton extends StatelessWidget {
240+
const ClearResponseButton({
241+
super.key,
242+
this.onPressed,
243+
});
244+
245+
final VoidCallback? onPressed;
243246

244247
@override
245-
Widget build(BuildContext context, WidgetRef ref) {
246-
var sm = ScaffoldMessenger.of(context);
248+
Widget build(BuildContext context) {
247249
return Tooltip(
248250
message: 'Clear response',
249251
child: TextButton(
250252
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-
},
253+
onPressed: onPressed,
263254
child: const Icon(
264255
Icons.delete,
265256
size: 20,

lib/widgets/response_widgets.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,13 @@ class ResponsePaneHeader extends StatelessWidget {
5555
this.responseStatus,
5656
this.message,
5757
this.time,
58+
this.onClearResponse,
5859
});
5960

6061
final int? responseStatus;
6162
final String? message;
6263
final Duration? time;
64+
final VoidCallback? onClearResponse;
6365

6466
@override
6567
Widget build(BuildContext context) {
@@ -117,7 +119,9 @@ class ResponsePaneHeader extends StatelessWidget {
117119
),
118120
),
119121
kHSpacer10,
120-
const ClearResponseButton()
122+
ClearResponseButton(
123+
onPressed: onClearResponse,
124+
)
121125
],
122126
),
123127
),

0 commit comments

Comments
 (0)