From 957e493494746d48e725be5d605c76a3cd551474 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Wed, 25 Sep 2019 15:54:37 +0200 Subject: [PATCH] Add a basic dark theme It's not that pretty, but this adds the scaffolding. --- lib/app.dart | 35 +++++++++++++++++++++++++------- lib/screens/settings_screen.dart | 19 +++++++++++++++++ pubspec.lock | 7 +++++++ pubspec.yaml | 1 + 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/lib/app.dart b/lib/app.dart index 9ccd8fb0..3281aac3 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -12,6 +12,7 @@ import 'package:journal/settings.dart'; import 'package:journal/state_container.dart'; import 'package:journal/utils.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:dynamic_theme/dynamic_theme.dart'; import 'screens/githostsetup_screens.dart'; import 'screens/onboarding_screens.dart'; @@ -111,6 +112,32 @@ class JournalApp extends StatelessWidget { @override Widget build(BuildContext context) { + return DynamicTheme( + defaultBrightness: Brightness.light, + data: (brightness) { + if (brightness == Brightness.light) { + return ThemeData( + brightness: Brightness.light, + primaryColor: Color(0xFF66bb6a), + primaryColorLight: Color(0xFF98ee99), + primaryColorDark: Color(0xFF338a3e), + accentColor: Color(0xff6d4c41), + ); + } else { + return ThemeData( + brightness: Brightness.dark, + primaryColor: Color(0xFF66bb6a), + primaryColorLight: Color(0xFF98ee99), + primaryColorDark: Color(0xFF338a3e), + accentColor: Color(0xff6d4c41), + ); + } + }, + themedWidgetBuilder: buildApp, + ); + } + + MaterialApp buildApp(BuildContext context, ThemeData themeData) { var stateContainer = StateContainer.of(context); var initialRoute = '/'; @@ -121,13 +148,7 @@ class JournalApp extends StatelessWidget { return MaterialApp( key: ValueKey("App"), title: 'GitJournal', - theme: ThemeData( - brightness: Brightness.light, - primaryColor: Color(0xFF66bb6a), - primaryColorLight: Color(0xFF98ee99), - primaryColorDark: Color(0xFF338a3e), - accentColor: Color(0xff6d4c41), - ), + theme: themeData, navigatorObservers: [JournalApp.observer], initialRoute: initialRoute, routes: { diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 8841412a..6ab64286 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -3,6 +3,7 @@ import 'package:journal/settings.dart'; import 'package:journal/utils.dart'; import 'package:preferences/preferences.dart'; +import 'package:dynamic_theme/dynamic_theme.dart'; class SettingsScreen extends StatelessWidget { @override @@ -143,6 +144,24 @@ class SettingsListState extends State { return PreferencePage([ PreferenceTitle('Display Settings'), + DropdownPreference( + 'Theme', + 'theme', + defaultVal: "Light", + values: ["Light", "Dark"], + onChange: (newVal) { + var dynamicTheme = DynamicTheme.of(context); + switch (newVal) { + case "Dark": + dynamicTheme.setBrightness(Brightness.dark); + break; + case "Light": + case "default": + dynamicTheme.setBrightness(Brightness.light); + break; + } + }, + ), DropdownPreference( 'Font Size', 'font_size', diff --git a/pubspec.lock b/pubspec.lock index d05f282d..98374849 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -99,6 +99,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.0.5+1" + dynamic_theme: + dependency: "direct main" + description: + name: dynamic_theme + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" file: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 140edd52..efa359c8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,6 +26,7 @@ dependencies: auto_size_text: ^2.0.1 fimber: ^0.3.0 preferences: ^4.0.0 + dynamic_theme: ^1.0.0 dev_dependencies: flutter_launcher_icons: "^0.7.2"