Dark mode settings save to SharedPreferences

This commit is contained in:
Yannick Mauray 2021-11-10 22:07:24 +01:00
parent b37600f7e1
commit d5855b2433
No known key found for this signature in database
GPG Key ID: 67C4AAC5E99CB909
3 changed files with 29 additions and 9 deletions

View File

@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:quickgui/src/globals.dart';
import 'package:quickgui/src/mixins/preferences_mixin.dart';
import 'package:quickgui/src/model/app_theme.dart';
import 'package:quickgui/src/pages/main_page.dart';
@ -10,16 +12,30 @@ class App extends StatefulWidget {
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
class _AppState extends State<App> with PreferencesMixin {
@override
Widget build(BuildContext context) {
return Consumer<AppTheme>(
builder: (context, appTheme, _) => MaterialApp(
theme: ThemeData(primarySwatch: Colors.pink),
darkTheme: ThemeData.dark(),
themeMode: appTheme.themeMode,
home: const MainPage(title: 'Quickgui - A Flutter frontend for Quickget and Quickemu'),
),
return FutureBuilder<bool?>(
future: getPreference<bool>(prefThemeMode),
builder: (context, AsyncSnapshot<bool?> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.data != null) {
context.read<AppTheme>().useDarkMode = snapshot.data!;
}
return Consumer<AppTheme>(
builder: (context, appTheme, _) => MaterialApp(
theme: ThemeData(primarySwatch: Colors.pink),
darkTheme: ThemeData.dark(),
themeMode: appTheme.themeMode,
home: const MainPage(title: 'Quickgui - A Flutter frontend for Quickget and Quickemu'),
),
);
} else {
return const Center(
child: CircularProgressIndicator(),
);
}
},
);
}
}

View File

@ -2,3 +2,4 @@ import 'dart:io';
var gIsSnap = Platform.environment['SNAP']?.isNotEmpty ?? false;
const String prefWorkingDirectory = 'workingDirectory';
const String prefThemeMode = 'themeMode';

View File

@ -1,10 +1,12 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:quickgui/src/globals.dart';
import 'package:quickgui/src/mixins/app_version.dart';
import 'package:quickgui/src/mixins/preferences_mixin.dart';
import 'package:quickgui/src/model/app_theme.dart';
class LeftMenu extends StatelessWidget {
class LeftMenu extends StatelessWidget with PreferencesMixin {
const LeftMenu({Key? key}) : super(key: key);
@override
@ -27,6 +29,7 @@ class LeftMenu extends StatelessWidget {
value: Theme.of(context).brightness == Brightness.dark,
onChanged: (value) {
appTheme.useDarkMode = value;
savePreference(prefThemeMode, value);
},
),
],