From 33242c2bfb325ab0a1d2f0e8f14c1f722791f9e5 Mon Sep 17 00:00:00 2001 From: Benimautner Date: Sun, 23 Jul 2023 17:25:58 +0200 Subject: [PATCH] migrated to material3, added option for other themes for later --- lib/main.dart | 12 ++++++++---- lib/pages/home.dart | 16 ++++++++-------- lib/pages/project/project_edit.dart | 2 +- lib/pages/project/project_task_list.dart | 1 + lib/pages/settings.dart | 17 +++++++++++------ lib/service/services.dart | 21 ++++++++++++++------- lib/theme/theme.dart | 22 +++++++++++++++++++++- 7 files changed, 64 insertions(+), 27 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index ec49aef..0e66d5e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -97,11 +97,15 @@ class VikunjaApp extends StatelessWidget { return new ValueListenableBuilder(valueListenable: updateTheme, builder: (_,mode,__) { updateTheme.value = false; Future theme = manager.getThemeMode().then((value) { - if (value == ThemeMode.dark) { - return buildVikunjaDarkTheme(); - } else { - return buildVikunjaTheme(); + switch(value) { + case FlutterThemeMode.dark: + return buildVikunjaDarkTheme(); + case FlutterThemeMode.materialUi: + return buildVikunjaMaterialTheme(); + default: + return buildVikunjaTheme(); } + }); return FutureBuilder( future: theme, diff --git a/lib/pages/home.dart b/lib/pages/home.dart index 48100e4..a92e04e 100644 --- a/lib/pages/home.dart +++ b/lib/pages/home.dart @@ -38,10 +38,10 @@ class HomePageState extends State { SettingsPage() ]; - List navbarItems = [ - BottomNavigationBarItem(icon: Icon(Icons.home), label: "Home"), - BottomNavigationBarItem(icon: Icon(Icons.list), label: "Projects"), - BottomNavigationBarItem(icon: Icon(Icons.settings), label: "Settings"), + List navbarItems = [ + NavigationDestination(icon: Icon(Icons.home), label: "Home"), + NavigationDestination(icon: Icon(Icons.list), label: "Projects"), + NavigationDestination(icon: Icon(Icons.settings), label: "Settings"), ]; @override @@ -51,10 +51,10 @@ class HomePageState extends State { drawerItem = _getDrawerItemWidget(_selectedDrawerIndex); return new Scaffold( - bottomNavigationBar: BottomNavigationBar( - items: navbarItems, - currentIndex: _selectedDrawerIndex, - onTap: (index) { + bottomNavigationBar: NavigationBar( + destinations: navbarItems, + selectedIndex: _selectedDrawerIndex, + onDestinationSelected: (index) { setState(() { _selectedDrawerIndex = index; }); diff --git a/lib/pages/project/project_edit.dart b/lib/pages/project/project_edit.dart index c7a589e..fb89886 100644 --- a/lib/pages/project/project_edit.dart +++ b/lib/pages/project/project_edit.dart @@ -156,7 +156,7 @@ class _ProjectEditPageState extends State { VikunjaGlobal.of(context).projectService.update(newProject).then((_) { setState(() => _loading = false); ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text('The task was updated successfully!'), + content: Text('The project was updated successfully!'), )); }).catchError((err) { setState(() => _loading = false); diff --git a/lib/pages/project/project_task_list.dart b/lib/pages/project/project_task_list.dart index 7220e39..0972e5b 100644 --- a/lib/pages/project/project_task_list.dart +++ b/lib/pages/project/project_task_list.dart @@ -369,6 +369,7 @@ class _ListPageState extends State { )); setState(() { _loadingTasks.remove(newTask); + _loadList(); }); }); } diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index ffb55d8..88f88fd 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -6,6 +6,7 @@ import 'package:vikunja_app/models/list.dart'; import '../main.dart'; import '../models/project.dart'; +import '../service/services.dart'; class SettingsPage extends StatefulWidget { @@ -21,7 +22,7 @@ class SettingsPageState extends State { String? versionTag, newestVersionTag; late TextEditingController durationTextController; bool initialized = false; - ThemeMode? themeMode; + FlutterThemeMode? themeMode; void init() { @@ -114,23 +115,27 @@ class SettingsPageState extends State { Divider(), ListTile( title: Text("Theme"), - trailing: DropdownButton( + trailing: DropdownButton( items: [ DropdownMenuItem( child: Text("System"), - value: ThemeMode.system, + value: FlutterThemeMode.system, ), DropdownMenuItem( child: Text("Light"), - value: ThemeMode.light, + value: FlutterThemeMode.light, ), DropdownMenuItem( child: Text("Dark"), - value: ThemeMode.dark, + value: FlutterThemeMode.dark, + ), + DropdownMenuItem( + child: Text("Material You"), + value: FlutterThemeMode.materialUi, ), ], value: themeMode, - onChanged: (ThemeMode? value) { + onChanged: (FlutterThemeMode? value) { VikunjaGlobal.of(context) .settingsManager .setThemeMode(value!); diff --git a/lib/service/services.dart b/lib/service/services.dart index 26d2180..ced10fb 100644 --- a/lib/service/services.dart +++ b/lib/service/services.dart @@ -309,24 +309,31 @@ class SettingsManager { return _storage.write(key: "recent-servers", value: jsonEncode(server)); } - Future getThemeMode() async { + Future getThemeMode() async { String? theme_mode = await _storage.read(key: "theme_mode"); if(theme_mode == null) - setThemeMode(ThemeMode.system); + setThemeMode(FlutterThemeMode.system); switch(theme_mode) { case "system": - return ThemeMode.system; + return FlutterThemeMode.system; case "light": - return ThemeMode.light; + return FlutterThemeMode.light; case "dark": - return ThemeMode.dark; + return FlutterThemeMode.dark; default: - return ThemeMode.system; + return FlutterThemeMode.system; } } - Future setThemeMode(ThemeMode newMode) async { + Future setThemeMode(FlutterThemeMode newMode) async { await _storage.write(key: "theme_mode", value: newMode.toString().split('.').last); } } + +enum FlutterThemeMode { + system, + light, + dark, + materialUi +} \ No newline at end of file diff --git a/lib/theme/theme.dart b/lib/theme/theme.dart index 29d7e1a..5cdf31b 100644 --- a/lib/theme/theme.dart +++ b/lib/theme/theme.dart @@ -6,8 +6,15 @@ import 'package:vikunja_app/theme/constants.dart'; ThemeData buildVikunjaTheme() => _buildVikunjaTheme(ThemeData.light()); ThemeData buildVikunjaDarkTheme() => _buildVikunjaTheme(ThemeData.dark(), isDark: true); +ThemeData buildVikunjaMaterialTheme() { + return _buildVikunjaTheme(ThemeData.light()).copyWith( + useMaterial3: true, + ); +} + ThemeData _buildVikunjaTheme(ThemeData base, {bool isDark = false}) { return base.copyWith( + useMaterial3: true, errorColor: vRed, primaryColor: vPrimaryDark, primaryColorLight: vPrimary, @@ -31,7 +38,20 @@ ThemeData _buildVikunjaTheme(ThemeData base, {bool isDark = false}) { vWhite, // This does not work, looks like a bug in Flutter: https://github.com/flutter/flutter/issues/19623 ), ), - bottomNavigationBarTheme: base.bottomNavigationBarTheme.copyWith( + inputDecorationTheme: InputDecorationTheme( + enabledBorder: UnderlineInputBorder( + borderSide: const BorderSide(color: Colors.grey, width: 1) + ), + + ), + + dividerTheme: DividerThemeData( + color: () { + return isDark ? Colors.white10 : Colors.black12; + }(), + ), + navigationBarTheme: base.navigationBarTheme.copyWith( + indicatorColor: vPrimary, // Make bottomNavigationBar backgroundColor darker to provide more separation backgroundColor: () { final _hslColor = HSLColor.fromColor(