added amoled dark mode

This commit is contained in:
shilangyu 2020-09-08 10:23:08 +02:00
parent b214c13827
commit caff01130b
4 changed files with 32 additions and 4 deletions

View File

@ -37,7 +37,10 @@ class MyApp extends StatelessWidget {
builder: (ctx) => MaterialApp(
title: 'Flutter Demo',
themeMode: ctx.watch<ConfigStore>().theme,
darkTheme: ThemeData.dark(),
darkTheme: ThemeData.dark().copyWith(
scaffoldBackgroundColor: ctx.watch<ConfigStore>().amoledDarkMode
? Colors.black
: null),
theme: ThemeData(
visualDensity: VisualDensity.adaptivePlatformDensity,
),

View File

@ -70,6 +70,12 @@ class _AppearanceConfig extends StatelessWidget {
ctx.read<ConfigStore>().theme = selected;
},
),
SwitchListTile(
title: Text('Amoled dark mode'),
value: ctx.watch<ConfigStore>().amoledDarkMode,
onChanged: (checked) {
ctx.read<ConfigStore>().amoledDarkMode = checked;
})
],
),
),

View File

@ -12,7 +12,7 @@ abstract class _ConfigStore with Store {
_ConfigStore() {
// persitently save settings each time they are changed
_saveReactionDisposer = reaction((_) => [theme], (_) {
_saveReactionDisposer = reaction((_) => [theme, amoledDarkMode], (_) {
save();
});
}
@ -25,18 +25,21 @@ abstract class _ConfigStore with Store {
var prefs = await SharedPreferences.getInstance();
// load saved settings or create defaults
theme = _themeModeFromString(prefs.getString('theme') ?? 'system');
amoledDarkMode = prefs.getBool('amoledDarkMode') ?? false;
}
void save() async {
var prefs = await SharedPreferences.getInstance();
await prefs.setString('theme', describeEnum(theme));
await prefs.setBool('amoledDarkMode', amoledDarkMode);
}
@observable
ThemeMode theme;
// TODO: add amoledDarkMode switch
@observable
bool amoledDarkMode;
}
ThemeMode _themeModeFromString(String theme) =>

View File

@ -24,10 +24,26 @@ mixin _$ConfigStore on _ConfigStore, Store {
});
}
final _$amoledDarkModeAtom = Atom(name: '_ConfigStore.amoledDarkMode');
@override
bool get amoledDarkMode {
_$amoledDarkModeAtom.reportRead();
return super.amoledDarkMode;
}
@override
set amoledDarkMode(bool value) {
_$amoledDarkModeAtom.reportWrite(value, super.amoledDarkMode, () {
super.amoledDarkMode = value;
});
}
@override
String toString() {
return '''
theme: ${theme}
theme: ${theme},
amoledDarkMode: ${amoledDarkMode}
''';
}
}