mirror of
https://github.com/foss42/apidash.git
synced 2025-08-06 13:51:20 +08:00
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:
@ -3,34 +3,27 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:apidash/consts.dart';
|
import 'package:apidash/consts.dart';
|
||||||
import 'package:apidash/providers/providers.dart';
|
import 'package:apidash/providers/providers.dart';
|
||||||
import 'package:apidash/widgets/widgets.dart';
|
import 'package:apidash/utils/utils.dart';
|
||||||
|
|
||||||
class SaveButton extends ConsumerWidget {
|
class SaveButton extends ConsumerWidget {
|
||||||
const SaveButton({super.key});
|
const SaveButton({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final overlayWidget = OverlayWidgetTemplate(context: context);
|
|
||||||
final savingData = ref.watch(saveDataStateProvider);
|
final savingData = ref.watch(saveDataStateProvider);
|
||||||
final hasUnsavedChanges = ref.watch(hasUnsavedChangesProvider);
|
final hasUnsavedChanges = ref.watch(hasUnsavedChangesProvider);
|
||||||
return TextButton.icon(
|
return TextButton.icon(
|
||||||
onPressed: (savingData || !hasUnsavedChanges)
|
onPressed: (savingData || !hasUnsavedChanges)
|
||||||
? null
|
? null
|
||||||
: () async {
|
: () async {
|
||||||
overlayWidget.show(
|
await saveAndShowDialog(context, onSave: () async {
|
||||||
widget: const SavingOverlay(saveCompleted: false));
|
await ref
|
||||||
|
.read(collectionStateNotifierProvider.notifier)
|
||||||
await ref
|
.saveData();
|
||||||
.read(collectionStateNotifierProvider.notifier)
|
await ref
|
||||||
.saveData();
|
.read(environmentsStateNotifierProvider.notifier)
|
||||||
await ref
|
.saveEnvironments();
|
||||||
.read(environmentsStateNotifierProvider.notifier)
|
});
|
||||||
.saveEnvironments();
|
|
||||||
overlayWidget.hide();
|
|
||||||
overlayWidget.show(
|
|
||||||
widget: const SavingOverlay(saveCompleted: true));
|
|
||||||
await Future.delayed(const Duration(seconds: 1));
|
|
||||||
overlayWidget.hide();
|
|
||||||
},
|
},
|
||||||
icon: const Icon(
|
icon: const Icon(
|
||||||
Icons.save,
|
Icons.save,
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:apidash/utils/utils.dart';
|
import 'package:apidash/utils/utils.dart';
|
||||||
|
import 'package:apidash/widgets/widgets.dart';
|
||||||
|
|
||||||
Future<void> saveCollection(
|
Future<void> saveCollection(
|
||||||
Map<String, dynamic> data,
|
Map<String, dynamic> data,
|
||||||
@ -49,3 +51,16 @@ Future<void> saveToDownloads(
|
|||||||
sm.hideCurrentSnackBar();
|
sm.hideCurrentSnackBar();
|
||||||
sm.showSnackBar(getSnackBar(message, small: false));
|
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();
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user