Merge pull request #493 from Rupamthxt/add-feature-save

Added shortcut key "ctrl + s" for saving projects on the go.
This commit is contained in:
Ankit Mahato
2025-04-06 15:51:15 +05:30
committed by GitHub
2 changed files with 24 additions and 16 deletions

View File

@ -3,34 +3,27 @@ import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/providers/providers.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/utils/utils.dart';
class SaveButton extends ConsumerWidget {
const SaveButton({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final overlayWidget = OverlayWidgetTemplate(context: context);
final savingData = ref.watch(saveDataStateProvider);
final hasUnsavedChanges = ref.watch(hasUnsavedChangesProvider);
return TextButton.icon(
onPressed: (savingData || !hasUnsavedChanges)
? null
: () async {
overlayWidget.show(
widget: const SavingOverlay(saveCompleted: false));
await ref
.read(collectionStateNotifierProvider.notifier)
.saveData();
await ref
.read(environmentsStateNotifierProvider.notifier)
.saveEnvironments();
overlayWidget.hide();
overlayWidget.show(
widget: const SavingOverlay(saveCompleted: true));
await Future.delayed(const Duration(seconds: 1));
overlayWidget.hide();
await saveAndShowDialog(context, onSave: () async {
await ref
.read(collectionStateNotifierProvider.notifier)
.saveData();
await ref
.read(environmentsStateNotifierProvider.notifier)
.saveEnvironments();
});
},
icon: const Icon(
Icons.save,

View File

@ -1,7 +1,9 @@
import 'package:apidash_design_system/apidash_design_system.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:apidash/utils/utils.dart';
import 'package:apidash/widgets/widgets.dart';
Future<void> saveCollection(
Map<String, dynamic> data,
@ -49,3 +51,16 @@ Future<void> saveToDownloads(
sm.hideCurrentSnackBar();
sm.showSnackBar(getSnackBar(message, small: false));
}
Future<void> saveAndShowDialog(
BuildContext context, {
AsyncCallback? onSave,
}) async {
final overlayWidget = OverlayWidgetTemplate(context: context);
overlayWidget.show(widget: const SavingOverlay(saveCompleted: false));
await onSave?.call();
overlayWidget.hide();
overlayWidget.show(widget: const SavingOverlay(saveCompleted: true));
await Future.delayed(const Duration(seconds: 1));
overlayWidget.hide();
}