diff --git a/lib/screens/common_widgets/sidebar_save_button.dart b/lib/screens/common_widgets/sidebar_save_button.dart index 46390ac4..d92b88b0 100644 --- a/lib/screens/common_widgets/sidebar_save_button.dart +++ b/lib/screens/common_widgets/sidebar_save_button.dart @@ -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, diff --git a/lib/utils/save_utils.dart b/lib/utils/save_utils.dart index 7bd31903..9f850789 100644 --- a/lib/utils/save_utils.dart +++ b/lib/utils/save_utils.dart @@ -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 saveCollection( Map data, @@ -49,3 +51,16 @@ Future saveToDownloads( sm.hideCurrentSnackBar(); sm.showSnackBar(getSnackBar(message, small: false)); } + +Future 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(); +}