lemmur-app-android/lib/stores/config_store.dart

48 lines
1.2 KiB
Dart
Raw Normal View History

2021-02-24 21:54:15 +01:00
import 'dart:convert';
2020-08-30 22:43:16 +02:00
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
2021-02-24 21:54:15 +01:00
import 'package:json_annotation/json_annotation.dart';
2020-08-30 22:43:16 +02:00
import 'package:shared_preferences/shared_preferences.dart';
2021-02-24 21:54:15 +01:00
part 'config_store.g.dart';
2020-10-26 00:39:57 +01:00
/// Store managing user-level configuration such as theme or language
2021-02-24 21:54:15 +01:00
@JsonSerializable()
class ConfigStore extends ChangeNotifier {
2021-02-24 21:54:15 +01:00
static const prefsKey = 'v1:ConfigStore';
static final _prefs = SharedPreferences.getInstance();
ThemeMode _theme;
2021-02-24 21:54:15 +01:00
@JsonKey(defaultValue: ThemeMode.system)
ThemeMode get theme => _theme;
set theme(ThemeMode theme) {
_theme = theme;
notifyListeners();
save();
2020-08-30 22:43:16 +02:00
}
bool _amoledDarkMode;
2021-02-24 21:54:15 +01:00
@JsonKey(defaultValue: false)
bool get amoledDarkMode => _amoledDarkMode;
set amoledDarkMode(bool amoledDarkMode) {
_amoledDarkMode = amoledDarkMode;
notifyListeners();
save();
2020-08-30 22:43:16 +02:00
}
2021-02-24 21:54:15 +01:00
static Future<ConfigStore> load() async {
final prefs = await _prefs;
return _$ConfigStoreFromJson(
jsonDecode(prefs.getString(prefsKey) ?? '{}') as Map<String, dynamic>,
);
2020-08-30 22:43:16 +02:00
}
Future<void> save() async {
2021-02-24 21:54:15 +01:00
final prefs = await _prefs;
2020-08-30 22:43:16 +02:00
2021-02-24 21:54:15 +01:00
await prefs.setString(prefsKey, jsonEncode(_$ConfigStoreToJson(this)));
2020-08-30 22:43:16 +02:00
}
}