@@ -276,6 +276,8 @@ class SRGBConverter extends JsonConverter<SRGBColor, int> {
276276 int toJson (SRGBColor object) => object.value;
277277}
278278
279+ enum SaveMethod { manual, autosave, delayedAutosave }
280+
279281@freezed
280282sealed class ButterflySettings with _$ButterflySettings , LeapSettings {
281283 const ButterflySettings ._();
@@ -326,6 +328,8 @@ sealed class ButterflySettings with _$ButterflySettings, LeapSettings {
326328 @Default (true ) bool autosave,
327329 @Default (true ) bool showSaveButton,
328330 @Default (1 ) int toolbarRows,
331+ @Default (true ) bool delayedAutosave,
332+ @Default (3 ) int autosaveDelaySeconds,
329333 @Default (false ) bool hideCursorWhileDrawing,
330334 @Default (UtilitiesState ()) UtilitiesState utilities,
331335 @Default (StartupBehavior .openHomeScreen) StartupBehavior onStartup,
@@ -424,6 +428,8 @@ sealed class ButterflySettings with _$ButterflySettings, LeapSettings {
424428 highContrast: prefs.getBool ('high_contrast' ) ?? false ,
425429 gridView: prefs.getBool ('grid_view' ) ?? false ,
426430 autosave: prefs.getBool ('autosave' ) ?? true ,
431+ delayedAutosave: prefs.getBool ('delayed_autosave' ) ?? false ,
432+ autosaveDelaySeconds: prefs.getInt ('autosave_delay_seconds' ) ?? 5 ,
427433 toolbarSize: prefs.containsKey ('toolbar_size' )
428434 ? ToolbarSize .values.byName (prefs.getString ('toolbar_size' )! )
429435 : ToolbarSize .normal,
@@ -536,6 +542,8 @@ sealed class ButterflySettings with _$ButterflySettings, LeapSettings {
536542 await prefs.setBool ('high_contrast' , highContrast);
537543 await prefs.setBool ('grid_view' , gridView);
538544 await prefs.setBool ('autosave' , autosave);
545+ await prefs.setBool ('delayed_autosave' , delayedAutosave);
546+ await prefs.setInt ('autosave_delay_seconds' , autosaveDelaySeconds);
539547 await prefs.setString ('toolbar_size' , toolbarSize.name);
540548 await prefs.setInt ('toolbar_rows' , toolbarRows);
541549 await prefs.setBool ('hide_cursor_while_drawing' , hideCursorWhileDrawing);
@@ -1039,13 +1047,23 @@ class SettingsCubit extends Cubit<ButterflySettings>
10391047
10401048 Future <void > toggleGridView () => changeGridView (! state.gridView);
10411049
1042- Future <void > changeAutosave (bool ? value) {
1050+ Future <void > changeAutosave (bool ? value, { bool delayed = false } ) {
10431051 emit (
1044- state.copyWith (autosave: value ?? true , showSaveButton: value == null ),
1052+ state.copyWith (
1053+ autosave: value ?? true ,
1054+ showSaveButton: value == null ,
1055+ delayedAutosave: delayed,
1056+ ),
10451057 );
10461058 return save ();
10471059 }
10481060
1061+ Future <void > changeAutosaveDelaySeconds (int seconds) {
1062+ final normalized = seconds.clamp (1 , 3600 );
1063+ emit (state.copyWith (autosaveDelaySeconds: normalized));
1064+ return save ();
1065+ }
1066+
10491067 Future <void > changeToolbarRows (int value) {
10501068 emit (state.copyWith (toolbarRows: value));
10511069 return save ();
0 commit comments