Skip to content

Commit 67fca59

Browse files
authored
Merge branch 'main' into main
2 parents 577ebad + 9025435 commit 67fca59

File tree

6 files changed

+90
-4
lines changed

6 files changed

+90
-4
lines changed

lib/consts.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,4 +474,10 @@ const kMsgNoContent = "No content";
474474
const kMsgUnknowContentType = "Unknown Response Content-Type";
475475
// Workspace Selector
476476
const kMsgSelectWorkspace = "Create your workspace";
477+
// History Page
478+
const kTitleClearHistory = 'Clear History';
479+
const kMsgClearHistory =
480+
'Clearing History is permanent. Do you want to continue?';
481+
const kMsgClearHistorySuccess = 'History cleared successfully';
482+
const kMsgClearHistoryError = 'Error clearing history';
477483
const kMsgShareError = "Unable to share";

lib/providers/history_providers.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,11 @@ class HistoryMetaStateNotifier
8989
await hiveHandler.setHistoryRequest(id, model.toJson());
9090
await loadHistoryRequest(id);
9191
}
92+
93+
Future<void> clearAllHistory() async {
94+
await hiveHandler.clearAllHistory();
95+
ref.read(selectedHistoryIdStateProvider.notifier).state = null;
96+
ref.read(selectedHistoryRequestModelProvider.notifier).state = null;
97+
loadHistoryMetas();
98+
}
9299
}

lib/screens/history/history_widgets/his_sidebar_header.dart

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import 'package:apidash/services/services.dart';
2-
import 'package:apidash_design_system/apidash_design_system.dart';
31
import 'package:flutter/material.dart';
42
import 'package:hooks_riverpod/hooks_riverpod.dart';
3+
import 'package:apidash_design_system/apidash_design_system.dart';
54
import 'package:apidash/providers/providers.dart';
65
import 'package:apidash/widgets/widgets.dart';
7-
import 'package:apidash/consts.dart';
6+
import '../../../consts.dart';
87

98
class HistorySidebarHeader extends ConsumerWidget {
109
const HistorySidebarHeader({super.key});
1110

1211
@override
1312
Widget build(BuildContext context, WidgetRef ref) {
1413
final mobileScaffoldKey = ref.read(mobileScaffoldKeyStateProvider);
14+
final sm = ScaffoldMessenger.of(context);
1515
return Padding(
1616
padding: kPe4,
1717
child: Row(
@@ -29,7 +29,30 @@ class HistorySidebarHeader extends ConsumerWidget {
2929
color: Theme.of(context).brightness == Brightness.dark
3030
? kColorDarkDanger
3131
: kColorLightDanger,
32-
onPressed: () => hiveHandler.clearAllHistory(),
32+
onPressed: () {
33+
showOkCancelDialog(
34+
context,
35+
dialogTitle: kTitleClearHistory,
36+
content: kMsgClearHistory,
37+
onClickOk: () async {
38+
sm.hideCurrentSnackBar();
39+
try {
40+
await ref
41+
.read(historyMetaStateNotifier.notifier)
42+
.clearAllHistory();
43+
sm.showSnackBar(getSnackBar(
44+
kMsgClearHistorySuccess,
45+
));
46+
} catch (e) {
47+
debugPrint("Clear History Stack: $e");
48+
sm.showSnackBar(getSnackBar(
49+
kMsgClearHistoryError,
50+
color: kColorRed,
51+
));
52+
}
53+
},
54+
);
55+
},
3356
),
3457
ADIconButton(
3558
icon: Icons.manage_history_rounded,

lib/widgets/dialog_ok_cancel.dart

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import 'package:apidash/consts.dart';
2+
import 'package:apidash_design_system/apidash_design_system.dart';
3+
import 'package:flutter/material.dart';
4+
5+
showOkCancelDialog(
6+
BuildContext context, {
7+
String? dialogTitle,
8+
String? content,
9+
String? buttonLabelOk,
10+
VoidCallback? onClickOk,
11+
String? buttonLabelCancel,
12+
VoidCallback? onClickCancel,
13+
}) {
14+
showDialog(
15+
context: context,
16+
builder: (context) {
17+
return AlertDialog(
18+
title: Text(dialogTitle ?? ""),
19+
titleTextStyle: Theme.of(context).textTheme.titleLarge,
20+
content: Container(
21+
padding: kPt20,
22+
width: 300,
23+
child: Text(content ?? ""),
24+
),
25+
actions: <Widget>[
26+
TextButton(
27+
onPressed: () {
28+
onClickCancel?.call();
29+
if (context.mounted) {
30+
Navigator.pop(context);
31+
}
32+
},
33+
child: Text(buttonLabelCancel ?? kLabelCancel),
34+
),
35+
TextButton(
36+
onPressed: () {
37+
onClickOk?.call();
38+
if (context.mounted) {
39+
Navigator.pop(context);
40+
}
41+
},
42+
child: Text(buttonLabelOk ?? kLabelOk),
43+
),
44+
],
45+
);
46+
});
47+
}

lib/widgets/widgets.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export 'codegen_previewer.dart';
1616
export 'dialog_about.dart';
1717
export 'dialog_history_retention.dart';
1818
export 'dialog_import.dart';
19+
export 'dialog_ok_cancel.dart';
1920
export 'dialog_rename.dart';
2021
export 'dialog_text.dart';
2122
export 'drag_and_drop_area.dart';

packages/apidash_design_system/lib/widgets/snackbar.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import 'package:flutter/material.dart';
33
SnackBar getSnackBar(
44
String text, {
55
bool small = true,
6+
Color? color,
67
}) {
78
return SnackBar(
89
width: small ? 300 : 500,
10+
backgroundColor: color,
911
behavior: SnackBarBehavior.floating,
1012
content: Text(
1113
text,

0 commit comments

Comments
 (0)