mirror of
https://github.com/foss42/apidash.git
synced 2025-05-31 06:08:09 +08:00
Merge pull request #365 from yashas-hm/fix-prompt-wo-changes
Fix prompt only when changes made
This commit is contained in:
@ -57,7 +57,7 @@ class _AppState extends ConsumerState<App> with WindowListener {
|
||||
bool isPreventClose = await windowManager.isPreventClose();
|
||||
if (isPreventClose) {
|
||||
if (ref.watch(
|
||||
settingsProvider.select((value) => value.promptBeforeClosing))) {
|
||||
settingsProvider.select((value) => value.promptBeforeClosing)) && ref.watch(hasUnsavedChangesProvider)) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (_) => AlertDialog(
|
||||
|
@ -1,11 +1,12 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'settings_providers.dart';
|
||||
import 'ui_providers.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
import '../consts.dart';
|
||||
import '../models/models.dart';
|
||||
import '../services/services.dart' show hiveHandler, HiveHandler, request;
|
||||
import '../utils/utils.dart' show getNewUuid, collectionToHAR;
|
||||
import '../consts.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'settings_providers.dart';
|
||||
import 'ui_providers.dart';
|
||||
|
||||
final selectedIdStateProvider = StateProvider<String?>((ref) => null);
|
||||
|
||||
@ -65,6 +66,7 @@ class CollectionStateNotifier
|
||||
.read(requestSequenceProvider.notifier)
|
||||
.update((state) => [id, ...state]);
|
||||
ref.read(selectedIdStateProvider.notifier).state = newRequestModel.id;
|
||||
ref.read(hasUnsavedChangesProvider.notifier).state = true;
|
||||
}
|
||||
|
||||
void reorder(int oldIdx, int newIdx) {
|
||||
@ -72,6 +74,7 @@ class CollectionStateNotifier
|
||||
final itemId = itemIds.removeAt(oldIdx);
|
||||
itemIds.insert(newIdx, itemId);
|
||||
ref.read(requestSequenceProvider.notifier).state = [...itemIds];
|
||||
ref.read(hasUnsavedChangesProvider.notifier).state = true;
|
||||
}
|
||||
|
||||
void remove(String id) {
|
||||
@ -94,6 +97,7 @@ class CollectionStateNotifier
|
||||
var map = {...state!};
|
||||
map.remove(id);
|
||||
state = map;
|
||||
ref.read(hasUnsavedChangesProvider.notifier).state = true;
|
||||
}
|
||||
|
||||
void clearResponse(String? id) {
|
||||
@ -107,6 +111,7 @@ class CollectionStateNotifier
|
||||
var map = {...state!};
|
||||
map[id] = newModel;
|
||||
state = map;
|
||||
ref.read(hasUnsavedChangesProvider.notifier).state = true;
|
||||
}
|
||||
|
||||
void duplicate(String id) {
|
||||
@ -126,6 +131,7 @@ class CollectionStateNotifier
|
||||
|
||||
ref.read(requestSequenceProvider.notifier).state = [...itemIds];
|
||||
ref.read(selectedIdStateProvider.notifier).state = newId;
|
||||
ref.read(hasUnsavedChangesProvider.notifier).state = true;
|
||||
}
|
||||
|
||||
void update(
|
||||
@ -167,6 +173,7 @@ class CollectionStateNotifier
|
||||
var map = {...state!};
|
||||
map[id] = newModel;
|
||||
state = map;
|
||||
ref.read(hasUnsavedChangesProvider.notifier).state = true;
|
||||
}
|
||||
|
||||
Future<void> sendRequest(String id) async {
|
||||
@ -216,6 +223,7 @@ class CollectionStateNotifier
|
||||
map = {...state!};
|
||||
map[id] = newRequestModel;
|
||||
state = map;
|
||||
ref.read(hasUnsavedChangesProvider.notifier).state = true;
|
||||
}
|
||||
|
||||
Future<void> clearData() async {
|
||||
@ -225,6 +233,7 @@ class CollectionStateNotifier
|
||||
ref.read(clearDataStateProvider.notifier).state = false;
|
||||
ref.read(requestSequenceProvider.notifier).state = [];
|
||||
state = {};
|
||||
ref.read(hasUnsavedChangesProvider.notifier).state = true;
|
||||
}
|
||||
|
||||
bool loadData() {
|
||||
@ -265,6 +274,7 @@ class CollectionStateNotifier
|
||||
}
|
||||
await hiveHandler.removeUnused();
|
||||
ref.read(saveDataStateProvider.notifier).state = false;
|
||||
ref.read(hasUnsavedChangesProvider.notifier).state = false;
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> exportDataToHAR() async {
|
||||
|
@ -6,6 +6,8 @@ final selectedIdEditStateProvider = StateProvider<String?>((ref) => null);
|
||||
final codePaneVisibleStateProvider = StateProvider<bool>((ref) => false);
|
||||
final saveDataStateProvider = StateProvider<bool>((ref) => false);
|
||||
final clearDataStateProvider = StateProvider<bool>((ref) => false);
|
||||
final hasUnsavedChangesProvider = StateProvider<bool>((ref) => false);
|
||||
|
||||
// final nameTextFieldControllerProvider =
|
||||
// StateProvider.autoDispose<TextEditingController>((ref) {
|
||||
// TextEditingController controller = TextEditingController(text: "");
|
||||
|
@ -15,6 +15,7 @@ class CollectionPane extends ConsumerWidget {
|
||||
final overlayWidget = OverlayWidgetTemplate(context: context);
|
||||
final collection = ref.watch(collectionStateNotifierProvider);
|
||||
final savingData = ref.watch(saveDataStateProvider);
|
||||
final hasUnsavedChanges = ref.watch(hasUnsavedChangesProvider);
|
||||
if (collection == null) {
|
||||
return const Center(
|
||||
child: CircularProgressIndicator(),
|
||||
@ -31,7 +32,7 @@ class CollectionPane extends ConsumerWidget {
|
||||
alignment: WrapAlignment.spaceBetween,
|
||||
children: [
|
||||
TextButton.icon(
|
||||
onPressed: savingData
|
||||
onPressed: (savingData || !hasUnsavedChanges)
|
||||
? null
|
||||
: () async {
|
||||
overlayWidget.show(
|
||||
|
Reference in New Issue
Block a user