From 057954f6ce3c6c68ab4682059ce2d8dfb12309dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Caras?= Date: Mon, 25 Dec 2023 20:29:51 +0100 Subject: [PATCH] feat: allow disabling Material You --- lib/l10n/app_cs.arb | 4 ++- lib/l10n/app_en.arb | 4 ++- lib/main.dart | 51 ++++++++++++++++++++------------ lib/views/settings/settings.dart | 29 +++++++++++++++++- 4 files changed, 66 insertions(+), 22 deletions(-) diff --git a/lib/l10n/app_cs.arb b/lib/l10n/app_cs.arb index 566df2c..fc53ec4 100644 --- a/lib/l10n/app_cs.arb +++ b/lib/l10n/app_cs.arb @@ -72,6 +72,8 @@ "graphTypeDesc":"Zvolte, zda-li použít sloupcový, nebo spojnicový graf, a kde", "lineChart":"Spojnicový", "barChart":"Sloupcový", - "selectType":"Zvolte typ" + "selectType":"Zvolte typ", + "enableYou":"Povolit Material You (Může vyžadovat restart aplikace)", + "enableYouDesc":"Aplikace použije barevné schéma z vaší tapety" } \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index e0ab041..875aeaa 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -152,5 +152,7 @@ "graphTypeDesc":"Choose whether to show line or bar chart and where", "lineChart":"Line chart", "barChart":"Bar chart", - "selectType":"Select type" + "selectType":"Select type", + "enableYou":"Enable Material You (May require an app restart)", + "enableYouDesc":"The app will use a color scheme from your wallpaper" } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 5ccc47b..a093132 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,8 +8,13 @@ import 'package:logger/logger.dart'; import 'package:prasule/util/color_schemes.g.dart'; import 'package:prasule/views/home.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:shared_preferences/shared_preferences.dart'; -void main() { +var _materialYou = false; +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + var s = await SharedPreferences.getInstance(); + _materialYou = s.getBool("useMaterialYou") ?? true; runApp(const MyApp()); } @@ -17,29 +22,37 @@ final logger = Logger(); class MyApp extends StatelessWidget { const MyApp({super.key}); - + static bool appliedYou = false; // This widget is the root of your application. @override Widget build(BuildContext context) { return (Platform.isAndroid) ? DynamicColorBuilder( - builder: (light, dark) => MaterialApp( - debugShowCheckedModeBanner: false, - localizationsDelegates: const [ - AppLocalizations.delegate, - ...GlobalMaterialLocalizations.delegates, - ...GlobalCupertinoLocalizations.delegates - ], - supportedLocales: AppLocalizations.supportedLocales, - title: 'Prašule', - theme: ThemeData( - colorScheme: light ?? lightColorScheme, - useMaterial3: true, - ), - darkTheme: ThemeData( - useMaterial3: true, colorScheme: dark ?? darkColorScheme), - home: const HomeView(), - ), + builder: (light, dark) { + appliedYou = light != null; + return MaterialApp( + debugShowCheckedModeBanner: false, + localizationsDelegates: const [ + AppLocalizations.delegate, + ...GlobalMaterialLocalizations.delegates, + ...GlobalCupertinoLocalizations.delegates + ], + supportedLocales: AppLocalizations.supportedLocales, + title: 'Prašule', + theme: ThemeData( + colorScheme: (_materialYou) + ? light ?? lightColorScheme + : lightColorScheme, + useMaterial3: true, + ), + darkTheme: ThemeData( + useMaterial3: true, + colorScheme: (_materialYou) + ? dark ?? darkColorScheme + : darkColorScheme), + home: const HomeView(), + ); + }, ) : Theme( data: ThemeData( diff --git a/lib/views/settings/settings.dart b/lib/views/settings/settings.dart index 6bd5e63..3ab16b7 100644 --- a/lib/views/settings/settings.dart +++ b/lib/views/settings/settings.dart @@ -1,9 +1,13 @@ +import 'dart:io'; + import 'package:flutter/material.dart'; +import 'package:prasule/main.dart'; import 'package:prasule/pw/platformroute.dart'; import 'package:prasule/views/settings/graph_type.dart'; import 'package:prasule/views/settings/tessdata_list.dart'; import 'package:settings_ui/settings_ui.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:shared_preferences/shared_preferences.dart'; class SettingsView extends StatefulWidget { const SettingsView({super.key}); @@ -13,6 +17,17 @@ class SettingsView extends StatefulWidget { } class _SettingsViewState extends State { + var _useMaterialYou = true; + final _supportsYou = MyApp.appliedYou; + @override + void initState() { + super.initState(); + SharedPreferences.getInstance().then((s) { + _useMaterialYou = s.getBool("useMaterialYou") ?? true; + setState(() {}); + }); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -48,7 +63,19 @@ class _SettingsViewState extends State { (p0) => const GraphTypeSettingsView(), ), ), - ) + ), + if (Platform.isAndroid && _supportsYou) + SettingsTile.switchTile( + initialValue: _useMaterialYou, + onToggle: (v) async { + var s = await SharedPreferences.getInstance(); + s.setBool("useMaterialYou", v); + _useMaterialYou = v; + setState(() {}); + }, + title: Text(AppLocalizations.of(context).enableYou), + description: Text(AppLocalizations.of(context).enableYouDesc), + ) ], ) ],