49 lines
1.3 KiB
Dart
49 lines
1.3 KiB
Dart
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<String, Object?> json) =>
|
|
_$SettingsFromJson(json);
|
|
}
|
|
|
|
@freezed
|
|
abstract class SettingsWrapper with _$SettingsWrapper {
|
|
const factory SettingsWrapper({@Default(Settings()) Settings settings}) =
|
|
_SettingsWrapper;
|
|
}
|
|
|
|
class SettingsCubit extends Cubit<SettingsWrapper> {
|
|
final SharedPreferencesAsync _prefs = SharedPreferencesAsync();
|
|
|
|
SettingsCubit() : super(SettingsWrapper());
|
|
|
|
Future<void> 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<void> setSettings(Settings settings) async {
|
|
emit(state.copyWith(settings: settings));
|
|
|
|
await _prefs.setString("settings", jsonEncode(settings.toJson()));
|
|
}
|
|
}
|