saveChanges method

Future<void> saveChanges()

Persist all draft values to storage and make them the new saved baseline.

Implementation

Future<void> saveChanges() async {
  if (!hasUnsavedChanges.value || isSaving.value) return;
  isSaving.value = true;

  try {
    // Persist through FontSizeController
    fontSizeController.changeFontSize(draftFontSize.value);
    fontSizeController.changeFontFamily(draftFontFamily.value);
    fontSizeController.changeAccentColor(draftAccentColor.value);
    fontSizeController.changeThemeMode(draftThemeMode.value);
    fontSizeController.changePushNotifications(draftPushNotifications.value);

    fontSizeController.changeBorderRadius(draftBorderRadius.value);
    fontSizeController.changeLayoutDensity(draftLayoutDensity.value);
    fontSizeController.changeSidebarColor(draftSidebarColor.value);
    fontSizeController.changeSidebarWidth(draftSidebarWidth.value);
    fontSizeController.changeCardElevation(draftCardElevation.value);
    fontSizeController.changeAnimationsEnabled(draftAnimationsEnabled.value);
    fontSizeController.changeUiScale(draftUiScale.value);
    fontSizeController.changeGridSize(draftGridSize.value);
    fontSizeController.changeTableRowHeight(draftTableRowHeight.value);
    fontSizeController.changeInputStyle(draftInputStyle.value);
    fontSizeController.changeButtonStyle(draftButtonStyle.value);
    fontSizeController.changeNavigationStyle(draftNavigationStyle.value);
    fontSizeController.changeAppBarStyle(draftAppBarStyle.value);
    fontSizeController.changeContentWidth(draftContentWidth.value);
    fontSizeController.changeShadowsEnabled(draftShadowsEnabled.value);
    fontSizeController.changeUiStyle(draftUiStyle.value);
    fontSizeController.changeSidebarActiveColor(draftSidebarActiveColor.value);
    fontSizeController.changeSidebarHoverColor(draftSidebarHoverColor.value);
    fontSizeController.changeSidebarIconSize(draftSidebarIconSize.value);
    fontSizeController.changeSidebarTransparency(draftSidebarTransparency.value);
    fontSizeController.changeSidebarPosition(draftSidebarPosition.value);

    fontSizeController.changeCustomAccentColor(draftCustomAccentColorHex.value);
    fontSizeController.changeCustomSidebarColor(draftCustomSidebarColorHex.value);
    fontSizeController.changeCustomSidebarTextColor(draftCustomSidebarTextColorHex.value);
    fontSizeController.changeAppBarHeight(draftAppBarHeight.value);
    fontSizeController.changeAppBarShadow(draftAppBarShadow.value);
    fontSizeController.changeAppBarTitleAlignment(draftAppBarTitleAlignment.value);
    fontSizeController.changeDataGridTemplate(draftDataGridTemplate.value);
    fontSizeController.changeActionButtonShape(draftActionButtonShape.value);
    fontSizeController.changeActionButtonStyle(draftActionButtonStyle.value);
    fontSizeController.changeActionButtonColor(draftActionButtonColor.value);
    fontSizeController.changePageTransition(draftPageTransition.value);
    fontSizeController.changeFontLetterSpacing(draftFontLetterSpacing.value);
    fontSizeController.changeFontLineHeight(draftFontLineHeight.value);

    await storageUtils.setValue(AppConstants.loaderTypeKey, draftLoaderType.value.name);
    await storageUtils.setValue(AppConstants.loaderColorKey, draftLoaderColor.value.name);
    await storageUtils.setValue(AppConstants.customLoaderColorKey, draftCustomLoaderColorHex.value);
    await storageUtils.setToastStyle(draftToastStyle.value.name);

    fontSizeController.fontSize.refresh();
    fontSizeController.fontFamily.refresh();
    fontSizeController.accentColor.refresh();
    fontSizeController.themeMode.refresh();
    fontSizeController.pushNotifications.refresh();
    fontSizeController.borderRadius.refresh();
    fontSizeController.layoutDensity.refresh();
    fontSizeController.sidebarColor.refresh();
    fontSizeController.sidebarWidth.refresh();
    fontSizeController.cardElevation.refresh();
    fontSizeController.animationsEnabled.refresh();
    fontSizeController.uiScale.refresh();
    fontSizeController.gridSize.refresh();
    fontSizeController.tableRowHeight.refresh();
    fontSizeController.inputStyle.refresh();
    fontSizeController.buttonStyle.refresh();
    fontSizeController.navigationStyle.refresh();
    fontSizeController.appBarStyle.refresh();
    fontSizeController.contentWidth.refresh();
    fontSizeController.shadowsEnabled.refresh();
    fontSizeController.uiStyle.refresh();
    fontSizeController.sidebarActiveColor.refresh();
    fontSizeController.sidebarHoverColor.refresh();
    fontSizeController.sidebarIconSize.refresh();
    fontSizeController.sidebarTransparency.refresh();
    fontSizeController.sidebarPosition.refresh();

    fontSizeController.customAccentColorHex.refresh();
    fontSizeController.customSidebarColorHex.refresh();
    fontSizeController.customSidebarTextColorHex.refresh();
    fontSizeController.appBarHeight.refresh();
    fontSizeController.appBarShadow.refresh();
    fontSizeController.appBarTitleAlignment.refresh();
    fontSizeController.dataGridTemplate.refresh();
    fontSizeController.actionButtonShape.refresh();
    fontSizeController.actionButtonStyle.refresh();
    fontSizeController.actionButtonColor.refresh();
    fontSizeController.pageTransition.refresh();
    fontSizeController.fontLetterSpacing.refresh();
    fontSizeController.fontLineHeight.refresh();

    // Apply theme mode
    _applyThemeMode(draftThemeMode.value);

    // Promote drafts to saved baseline
    _savedFontSize = draftFontSize.value;
    _savedFontFamily = draftFontFamily.value;
    _savedAccentColor = draftAccentColor.value;
    _savedThemeMode = draftThemeMode.value;
    _savedPushNotifications = draftPushNotifications.value;

    _savedBorderRadius = draftBorderRadius.value;
    _savedLayoutDensity = draftLayoutDensity.value;
    _savedSidebarColor = draftSidebarColor.value;
    _savedSidebarWidth = draftSidebarWidth.value;
    _savedCardElevation = draftCardElevation.value;
    _savedAnimationsEnabled = draftAnimationsEnabled.value;
    _savedUiScale = draftUiScale.value;
    _savedGridSize = draftGridSize.value;
    _savedTableRowHeight = draftTableRowHeight.value;
    _savedInputStyle = draftInputStyle.value;
    _savedButtonStyle = draftButtonStyle.value;
    _savedNavStyle = draftNavigationStyle.value;
    _savedAppBarStyle = draftAppBarStyle.value;
    _savedContentWidth = draftContentWidth.value;
    _savedShadowsEnabled = draftShadowsEnabled.value;
    _savedUiStyle = draftUiStyle.value;
    _savedSidebarActiveColor = draftSidebarActiveColor.value;
    _savedSidebarHoverColor = draftSidebarHoverColor.value;
    _savedSidebarIconSize = draftSidebarIconSize.value;
    _savedSidebarTransparency = draftSidebarTransparency.value;
    _savedSidebarPosition = draftSidebarPosition.value;

    _savedCustomAccentColor = draftCustomAccentColorHex.value;
    _savedCustomSidebarColor = draftCustomSidebarColorHex.value;
    _savedCustomSidebarTextColor = draftCustomSidebarTextColorHex.value;
    _savedAppBarHeight = draftAppBarHeight.value;
    _savedAppBarShadow = draftAppBarShadow.value;
    _savedAppBarTitleAlignment = draftAppBarTitleAlignment.value;
    _savedDataGridTemplate = draftDataGridTemplate.value;
    _savedActionButtonShape = draftActionButtonShape.value;
    _savedActionButtonStyle = draftActionButtonStyle.value;
    _savedActionButtonColor = draftActionButtonColor.value;
    _savedPageTransition = draftPageTransition.value;
    _savedFontLetterSpacing = draftFontLetterSpacing.value;
    _savedFontLineHeight = draftFontLineHeight.value;
    _savedLoaderType = draftLoaderType.value;
    _savedLoaderColor = draftLoaderColor.value;
    _savedCustomLoaderColor = draftCustomLoaderColorHex.value;
    _savedToastStyle = draftToastStyle.value;

    hasUnsavedChanges.value = false;

    _showSaveSuccess();
  } finally {
    isSaving.value = false;
  }
}