Only show save/cancel if there are changes

This commit is contained in:
Hillel Coren 2021-01-12 08:32:33 +02:00
parent 72b24f34b2
commit e82b948aac
3 changed files with 31 additions and 25 deletions

View File

@ -619,11 +619,9 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
case TaskStatusEditScreen.route:
return hasTaskStatusChanges(
taskStatusUIState.editing, taskStatusState.map);
case ExpenseCategoryEditScreen.route:
return hasExpenseCategoryChanges(
expenseCategoryUIState.editing, expenseCategoryState.map);
case RecurringInvoiceEditScreen.route:
return hasRecurringInvoiceChanges(
recurringInvoiceUIState.editing, recurringInvoiceState.map);
@ -638,7 +636,7 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
return hasDesignChanges(designUIState.editing, designState.map);
}
if (uiState.currentRoute.startsWith('/settings')) {
if (uiState.isInSettings) {
return settingsUIState.isChanged;
}

View File

@ -197,7 +197,7 @@ abstract class UIState implements Built<UIState, UIStateBuilder> {
bool get isViewing => !isEditing && !isEmailing;
bool get isInSettings => currentRoute.contains('settings');
bool get isInSettings => currentRoute.startsWith('/settings');
bool get isPreviewing => previewStack.isNotEmpty;
}

View File

@ -38,6 +38,13 @@ class EditScaffold extends StatelessWidget {
final store = StoreProvider.of<AppState>(context);
final state = store.state;
bool showButtons = true;
if (state.uiState.isInSettings &&
!state.uiState.isEditing &&
!state.settingsUIState.isChanged) {
showButtons = false;
}
return WillPopScope(
onWillPop: () async {
return true;
@ -50,18 +57,19 @@ class EditScaffold extends StatelessWidget {
automaticallyImplyLeading: isMobile(context),
title: Text(title),
actions: <Widget>[
SaveCancelButtons(
saveLabel: saveLabel,
isSaving: state.isSaving,
onSavePressed: (context) {
// Clear focus now to prevent un-focus after save from
// marking the form as changed and to hide the keyboard
FocusScope.of(context).unfocus(
disposition: UnfocusDisposition.previouslyFocusedChild);
if (showButtons)
SaveCancelButtons(
saveLabel: saveLabel,
isSaving: state.isSaving,
onSavePressed: (context) {
// Clear focus now to prevent un-focus after save from
// marking the form as changed and to hide the keyboard
FocusScope.of(context).unfocus(
disposition: UnfocusDisposition.previouslyFocusedChild);
onSavePressed(context);
onSavePressed(context);
/* The debouncer has been disabled b/c if you click
/* The debouncer has been disabled b/c if you click
save too quickly the changes are lost
if (Debouncer.isDebouncing) {
Timer(Duration(milliseconds: kDebounceDelay), () {
@ -71,17 +79,17 @@ class EditScaffold extends StatelessWidget {
onSavePressed(context);
}
*/
},
onCancelPressed: isMobile(context)
? null
: (context) {
if (onCancelPressed != null) {
onCancelPressed(context);
} else {
store.dispatch(ResetSettings());
}
},
),
},
onCancelPressed: isMobile(context)
? null
: (context) {
if (onCancelPressed != null) {
onCancelPressed(context);
} else {
store.dispatch(ResetSettings());
}
},
),
],
bottom: appBarBottom,
),