import 'dart:convert'; import 'package:bloc/bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:shared_preferences/shared_preferences.dart'; part 'settings.freezed.dart'; part 'settings.g.dart'; enum ColorSchemeSettings { light, dark, system } @freezed abstract class Settings with _$Settings { const factory Settings({ @Default(ColorSchemeSettings.system) ColorSchemeSettings colorScheme, }) = _Settings; factory Settings.fromJson(Map json) => _$SettingsFromJson(json); } @freezed abstract class SettingsWrapper with _$SettingsWrapper { const factory SettingsWrapper({@Default(Settings()) Settings settings}) = _SettingsWrapper; } class SettingsCubit extends Cubit { final SharedPreferencesAsync _prefs = SharedPreferencesAsync(); SettingsCubit() : super(SettingsWrapper()); Future loadSettings() async { final value = await _prefs.getString("settings"); if (value == null) { await _prefs.setString("settings", jsonEncode(Settings().toJson())); return; } emit(state.copyWith(settings: Settings.fromJson(jsonDecode(value)))); } Future setSettings(Settings settings) async { emit(state.copyWith(settings: settings)); await _prefs.setString("settings", jsonEncode(settings.toJson())); } }