mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-22 04:49:21 +00:00
Add dark theme
This commit is contained in:
parent
9e151639c2
commit
6a34df6814
@ -9,9 +9,12 @@ import 'package:shared_preferences/shared_preferences.dart';
|
||||
///
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
enum PreferencesKeyList { LOGIN_TOKENS }
|
||||
enum PreferencesKeyList { LOGIN_TOKENS, ENABLE_DARK_THEME }
|
||||
|
||||
const _PreferenceKeysName = {PreferencesKeyList.LOGIN_TOKENS: "login_tokens"};
|
||||
const _PreferenceKeysName = {
|
||||
PreferencesKeyList.LOGIN_TOKENS: "login_tokens",
|
||||
PreferencesKeyList.ENABLE_DARK_THEME: "dark_theme",
|
||||
};
|
||||
|
||||
class PreferencesHelper {
|
||||
static PreferencesHelper _instance;
|
||||
@ -51,11 +54,20 @@ class PreferencesHelper {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> setString(PreferencesKeyList key, String value) async {
|
||||
await _sharedPreferences.setString(_PreferenceKeysName[key], value);
|
||||
Future<bool> setString(PreferencesKeyList key, String value) async {
|
||||
return await _sharedPreferences.setString(_PreferenceKeysName[key], value);
|
||||
}
|
||||
|
||||
String getString(PreferencesKeyList key) {
|
||||
return _sharedPreferences.getString(_PreferenceKeysName[key]);
|
||||
}
|
||||
|
||||
Future<bool> setBool(PreferencesKeyList key, bool value) async {
|
||||
return await _sharedPreferences.setBool(_PreferenceKeysName[key], value);
|
||||
}
|
||||
|
||||
bool getBool(PreferencesKeyList key, {bool alternative = false}) {
|
||||
final v = _sharedPreferences.getBool(_PreferenceKeysName[key]);
|
||||
return v == null ? alternative : v;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:comunic/helpers/account_helper.dart';
|
||||
import 'package:comunic/helpers/database/database_helper.dart';
|
||||
import 'package:comunic/helpers/preferences_helper.dart';
|
||||
import 'package:comunic/ui/routes/home_route.dart';
|
||||
import 'package:comunic/ui/routes/login_route.dart';
|
||||
import 'package:comunic/utils/ui_utils.dart';
|
||||
@ -9,19 +10,29 @@ import 'package:flutter/material.dart';
|
||||
///
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
void subMain() {
|
||||
void subMain() async {
|
||||
// Connect to database
|
||||
DatabaseHelper.open();
|
||||
await DatabaseHelper.open();
|
||||
|
||||
runApp(ComunicApplication());
|
||||
runApp(ComunicApplication(
|
||||
darkMode: (await PreferencesHelper.getInstance())
|
||||
.getBool(PreferencesKeyList.ENABLE_DARK_THEME),
|
||||
));
|
||||
}
|
||||
|
||||
class ComunicApplication extends StatelessWidget {
|
||||
final bool darkMode;
|
||||
|
||||
const ComunicApplication({Key key, @required this.darkMode})
|
||||
: assert(darkMode != null),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
debugShowCheckedModeBanner: false,
|
||||
home: ComunicApplicationHome(),
|
||||
theme: darkMode ? ThemeData.dark() : null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import 'package:comunic/helpers/preferences_helper.dart';
|
||||
import 'package:comunic/utils/intl_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
@ -23,9 +24,81 @@ class _AppSettingsBody extends StatefulWidget {
|
||||
}
|
||||
|
||||
class __AppSettingsBodyState extends State<_AppSettingsBody> {
|
||||
PreferencesHelper _preferencesHelper;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_load();
|
||||
}
|
||||
|
||||
void _load() async {
|
||||
final prefs = await PreferencesHelper.getInstance();
|
||||
setState(() {
|
||||
_preferencesHelper = prefs;
|
||||
});
|
||||
}
|
||||
|
||||
void _needRefresh() {
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView(children: <Widget>[],);
|
||||
if (_preferencesHelper == null)
|
||||
return Center(child: CircularProgressIndicator());
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: ListView(
|
||||
children: <Widget>[
|
||||
// Dark theme
|
||||
_CheckBoxPreference(
|
||||
preferenceKey: PreferencesKeyList.ENABLE_DARK_THEME,
|
||||
preferencesHelper: _preferencesHelper,
|
||||
onUpdate: _needRefresh,
|
||||
title: tr("Enable dark theme"),
|
||||
description:
|
||||
tr("You will need to restart the application to apply changes"),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _CheckBoxPreference extends StatelessWidget {
|
||||
final PreferencesKeyList preferenceKey;
|
||||
final PreferencesHelper preferencesHelper;
|
||||
final VoidCallback onUpdate;
|
||||
final String title;
|
||||
final String description;
|
||||
|
||||
const _CheckBoxPreference({
|
||||
Key key,
|
||||
@required this.preferenceKey,
|
||||
@required this.preferencesHelper,
|
||||
@required this.onUpdate,
|
||||
@required this.title,
|
||||
@required this.description,
|
||||
}) : assert(preferencesHelper != null),
|
||||
assert(preferencesHelper != null),
|
||||
assert(onUpdate != null),
|
||||
assert(title != null),
|
||||
assert(description != null),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SwitchListTile(
|
||||
value: preferencesHelper.getBool(preferenceKey),
|
||||
onChanged: (b) async {
|
||||
await preferencesHelper.setBool(preferenceKey, b);
|
||||
onUpdate();
|
||||
return true;
|
||||
},
|
||||
title: Text(title),
|
||||
subtitle: Text(description),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user