From 0f4080c1665199c062b9d7bc2fdad1c2247e2100 Mon Sep 17 00:00:00 2001 From: Kima Date: Sun, 18 Feb 2024 20:27:55 +0100 Subject: [PATCH] font changing progress --- filcnaplo/lib/database/init.dart | 1 + filcnaplo/lib/models/settings.dart | 13 +++- filcnaplo/lib/theme/theme.dart | 111 +++++++++++++++++++++-------- filcnaplo/pubspec.yaml | 1 + 4 files changed, 94 insertions(+), 32 deletions(-) diff --git a/filcnaplo/lib/database/init.dart b/filcnaplo/lib/database/init.dart index 6379e7e..2bd8611 100644 --- a/filcnaplo/lib/database/init.dart +++ b/filcnaplo/lib/database/init.dart @@ -43,6 +43,7 @@ const settingsDB = DatabaseStruct("settings", { "notify_s_pin": String, "extras_s_pin": String, // more "show_breaks": int, + "font_family": String, }); // DON'T FORGET TO UPDATE DEFAULT VALUES IN `initDB` MIGRATION OR ELSE PARENTS WILL COMPLAIN ABOUT THEIR CHILDREN MISSING // YOU'VE BEEN WARNED!!! diff --git a/filcnaplo/lib/models/settings.dart b/filcnaplo/lib/models/settings.dart index 0b5d94d..c02eb18 100644 --- a/filcnaplo/lib/models/settings.dart +++ b/filcnaplo/lib/models/settings.dart @@ -90,6 +90,7 @@ class SettingsProvider extends ChangeNotifier { String _pinSetExtras; // more bool _showBreaks; + String _fontFamily; SettingsProvider({ DatabaseProvider? database, @@ -146,6 +147,7 @@ class SettingsProvider extends ChangeNotifier { required String pinSetPersonalize, required String pinSetNotify, required String pinSetExtras, + required String fontFamily, }) : _database = database, _language = language, _startPage = startPage, @@ -199,7 +201,8 @@ class SettingsProvider extends ChangeNotifier { _pinSetGeneral = pinSetGeneral, _pinSetPersonalize = pinSetPersonalize, _pinSetNotify = pinSetNotify, - _pinSetExtras = pinSetExtras; + _pinSetExtras = pinSetExtras, + _fontFamily = fontFamily; factory SettingsProvider.fromMap(Map map, {required DatabaseProvider database}) { @@ -273,6 +276,7 @@ class SettingsProvider extends ChangeNotifier { pinSetPersonalize: map['personalize_s_pin'], pinSetNotify: map['notify_s_pin'], pinSetExtras: map['extras_s_pin'], + fontFamily: map['font_family'], ); } @@ -334,6 +338,7 @@ class SettingsProvider extends ChangeNotifier { "personalize_s_pin": _pinSetPersonalize, "notify_s_pin": _pinSetNotify, "extras_s_pin": _pinSetExtras, + "font_family": _fontFamily, }; } @@ -399,6 +404,7 @@ class SettingsProvider extends ChangeNotifier { pinSetPersonalize: '', pinSetNotify: '', pinSetExtras: '', + fontFamily: '', ); } @@ -455,6 +461,7 @@ class SettingsProvider extends ChangeNotifier { String get currentThemeDisplayName => _currentThemeDisplayName; String get currentThemeCreator => _currentThemeCreator; bool get showBreaks => _showBreaks; + String get fontFamily => _fontFamily; Future update({ bool store = true, @@ -507,6 +514,7 @@ class SettingsProvider extends ChangeNotifier { String? currentThemeDisplayName, String? currentThemeCreator, bool? showBreaks, + String? fontFamily, }) async { if (language != null && language != _language) _language = language; if (startPage != null && startPage != _startPage) _startPage = startPage; @@ -651,6 +659,9 @@ class SettingsProvider extends ChangeNotifier { if (showBreaks != null && showBreaks != _showBreaks) { _showBreaks = showBreaks; } + if (fontFamily != null && fontFamily != _fontFamily) { + _fontFamily = fontFamily; + } // store or not if (store) await _database?.store.storeSettings(this); notifyListeners(); diff --git a/filcnaplo/lib/theme/theme.dart b/filcnaplo/lib/theme/theme.dart index e6e7a0f..58da845 100644 --- a/filcnaplo/lib/theme/theme.dart +++ b/filcnaplo/lib/theme/theme.dart @@ -5,28 +5,46 @@ import 'package:filcnaplo/theme/observer.dart'; import 'package:flutter/material.dart'; import 'package:material_color_utilities/material_color_utilities.dart'; import 'package:provider/provider.dart'; +import 'package:google_fonts/google_fonts.dart'; class AppTheme { // Dev note: All of these could be constant variables, but this is better for // development (you don't have to hot-restart) - static const String _fontFamily = "Montserrat"; + static const String _defaultFontFamily = "Montserrat"; - static Color? _paletteAccentLight(CorePalette? palette) => palette != null ? Color(palette.primary.get(70)) : null; - static Color? _paletteHighlightLight(CorePalette? palette) => palette != null ? Color(palette.neutral.get(100)) : null; - static Color? _paletteBackgroundLight(CorePalette? palette) => palette != null ? Color(palette.neutral.get(95)) : null; + static Color? _paletteAccentLight(CorePalette? palette) => + palette != null ? Color(palette.primary.get(70)) : null; + static Color? _paletteHighlightLight(CorePalette? palette) => + palette != null ? Color(palette.neutral.get(100)) : null; + static Color? _paletteBackgroundLight(CorePalette? palette) => + palette != null ? Color(palette.neutral.get(95)) : null; - static Color? _paletteAccentDark(CorePalette? palette) => palette != null ? Color(palette.primary.get(80)) : null; - static Color? _paletteBackgroundDark(CorePalette? palette) => palette != null ? Color(palette.neutralVariant.get(10)) : null; - static Color? _paletteHighlightDark(CorePalette? palette) => palette != null ? Color(palette.neutralVariant.get(20)) : null; + static Color? _paletteAccentDark(CorePalette? palette) => + palette != null ? Color(palette.primary.get(80)) : null; + static Color? _paletteBackgroundDark(CorePalette? palette) => + palette != null ? Color(palette.neutralVariant.get(10)) : null; + static Color? _paletteHighlightDark(CorePalette? palette) => + palette != null ? Color(palette.neutralVariant.get(20)) : null; + + static Map googleFontsMap = { + "Merienda": GoogleFonts.meriendaTextTheme(), + "M PLUS Code Latin": GoogleFonts.mPlusCodeLatinTextTheme(), + "Figtree": GoogleFonts.figtreeTextTheme(), + "Fira Code": GoogleFonts.firaCodeTextTheme(), + "Vollkorn": GoogleFonts.vollkornTextTheme(), + }; // Light Theme static ThemeData lightTheme(BuildContext context, {CorePalette? palette}) { var lightColors = AppColors.fromBrightness(Brightness.light); final settings = Provider.of(context, listen: false); AccentColor accentColor = settings.accentColor; - final customAccentColor = accentColor == AccentColor.custom ? settings.customAccentColor : null; - Color accent = customAccentColor ?? accentColorMap[accentColor] ?? const Color(0x00000000); + final customAccentColor = + accentColor == AccentColor.custom ? settings.customAccentColor : null; + Color accent = customAccentColor ?? + accentColorMap[accentColor] ?? + const Color(0x00000000); if (accentColor == AccentColor.adaptive) { if (palette != null) accent = _paletteAccentLight(palette)!; @@ -34,23 +52,32 @@ class AppTheme { palette = null; } - Color backgroundColor = - (accentColor == AccentColor.custom ? settings.customBackgroundColor : _paletteBackgroundLight(palette)) ?? lightColors.background; - Color highlightColor = - (accentColor == AccentColor.custom ? settings.customHighlightColor : _paletteHighlightLight(palette)) ?? lightColors.highlight; + Color backgroundColor = (accentColor == AccentColor.custom + ? settings.customBackgroundColor + : _paletteBackgroundLight(palette)) ?? + lightColors.background; + Color highlightColor = (accentColor == AccentColor.custom + ? settings.customHighlightColor + : _paletteHighlightLight(palette)) ?? + lightColors.highlight; return ThemeData( brightness: Brightness.light, useMaterial3: true, - fontFamily: _fontFamily, + fontFamily: _defaultFontFamily, + textTheme: googleFontsMap[settings.fontFamily], scaffoldBackgroundColor: backgroundColor, primaryColor: lightColors.filc, dividerColor: const Color(0x00000000), colorScheme: ColorScheme( primary: accent, - onPrimary: (accent.computeLuminance() > 0.5 ? Colors.black : Colors.white).withOpacity(.9), + onPrimary: + (accent.computeLuminance() > 0.5 ? Colors.black : Colors.white) + .withOpacity(.9), secondary: accent, - onSecondary: (accent.computeLuminance() > 0.5 ? Colors.black : Colors.white).withOpacity(.9), + onSecondary: + (accent.computeLuminance() > 0.5 ? Colors.black : Colors.white) + .withOpacity(.9), background: highlightColor, onBackground: Colors.black.withOpacity(.9), brightness: Brightness.light, @@ -64,8 +91,10 @@ class AppTheme { indicatorColor: accent, iconTheme: IconThemeData(color: lightColors.text.withOpacity(.75)), navigationBarTheme: NavigationBarThemeData( - indicatorColor: accent.withOpacity(accentColor == AccentColor.adaptive ? 0.4 : 0.8), - iconTheme: MaterialStateProperty.all(IconThemeData(color: lightColors.text)), + indicatorColor: + accent.withOpacity(accentColor == AccentColor.adaptive ? 0.4 : 0.8), + iconTheme: + MaterialStateProperty.all(IconThemeData(color: lightColors.text)), backgroundColor: highlightColor, labelTextStyle: MaterialStateProperty.all(TextStyle( fontSize: 13.0, @@ -82,7 +111,10 @@ class AppTheme { expansionTileTheme: ExpansionTileThemeData(iconColor: accent), cardColor: highlightColor, bottomNavigationBarTheme: BottomNavigationBarThemeData( - backgroundColor: Provider.of(context, listen: false).updateNavbarColor ? backgroundColor : null, + backgroundColor: Provider.of(context, listen: false) + .updateNavbarColor + ? backgroundColor + : null, ), ); } @@ -92,8 +124,11 @@ class AppTheme { var darkColors = AppColors.fromBrightness(Brightness.dark); final settings = Provider.of(context, listen: false); AccentColor accentColor = settings.accentColor; - final customAccentColor = accentColor == AccentColor.custom ? settings.customAccentColor : null; - Color accent = customAccentColor ?? accentColorMap[accentColor] ?? const Color(0x00000000); + final customAccentColor = + accentColor == AccentColor.custom ? settings.customAccentColor : null; + Color accent = customAccentColor ?? + accentColorMap[accentColor] ?? + const Color(0x00000000); if (accentColor == AccentColor.adaptive) { if (palette != null) accent = _paletteAccentDark(palette)!; @@ -101,23 +136,32 @@ class AppTheme { palette = null; } - Color backgroundColor = - (accentColor == AccentColor.custom ? settings.customBackgroundColor : _paletteBackgroundDark(palette)) ?? darkColors.background; - Color highlightColor = - (accentColor == AccentColor.custom ? settings.customHighlightColor : _paletteHighlightDark(palette)) ?? darkColors.highlight; + Color backgroundColor = (accentColor == AccentColor.custom + ? settings.customBackgroundColor + : _paletteBackgroundDark(palette)) ?? + darkColors.background; + Color highlightColor = (accentColor == AccentColor.custom + ? settings.customHighlightColor + : _paletteHighlightDark(palette)) ?? + darkColors.highlight; return ThemeData( brightness: Brightness.dark, useMaterial3: true, - fontFamily: _fontFamily, + fontFamily: _defaultFontFamily, + textTheme: googleFontsMap[settings.fontFamily], scaffoldBackgroundColor: backgroundColor, primaryColor: darkColors.filc, dividerColor: const Color(0x00000000), colorScheme: ColorScheme( primary: accent, - onPrimary: (accent.computeLuminance() > 0.5 ? Colors.black : Colors.white).withOpacity(.9), + onPrimary: + (accent.computeLuminance() > 0.5 ? Colors.black : Colors.white) + .withOpacity(.9), secondary: accent, - onSecondary: (accent.computeLuminance() > 0.5 ? Colors.black : Colors.white).withOpacity(.9), + onSecondary: + (accent.computeLuminance() > 0.5 ? Colors.black : Colors.white) + .withOpacity(.9), background: highlightColor, onBackground: Colors.white.withOpacity(.9), brightness: Brightness.dark, @@ -131,8 +175,10 @@ class AppTheme { indicatorColor: accent, iconTheme: IconThemeData(color: darkColors.text.withOpacity(.75)), navigationBarTheme: NavigationBarThemeData( - indicatorColor: accent.withOpacity(accentColor == AccentColor.adaptive ? 0.4 : 0.8), - iconTheme: MaterialStateProperty.all(IconThemeData(color: darkColors.text)), + indicatorColor: + accent.withOpacity(accentColor == AccentColor.adaptive ? 0.4 : 0.8), + iconTheme: + MaterialStateProperty.all(IconThemeData(color: darkColors.text)), backgroundColor: highlightColor, labelTextStyle: MaterialStateProperty.all(TextStyle( fontSize: 13.0, @@ -153,7 +199,10 @@ class AppTheme { elevation: 1, ), bottomNavigationBarTheme: BottomNavigationBarThemeData( - backgroundColor: Provider.of(context, listen: false).updateNavbarColor ? backgroundColor : null, + backgroundColor: Provider.of(context, listen: false) + .updateNavbarColor + ? backgroundColor + : null, ), ); } diff --git a/filcnaplo/pubspec.yaml b/filcnaplo/pubspec.yaml index 67613b4..03585f1 100644 --- a/filcnaplo/pubspec.yaml +++ b/filcnaplo/pubspec.yaml @@ -76,6 +76,7 @@ dependencies: google_sign_in: ^6.2.1 extension_google_sign_in_as_googleapis_auth: ^2.0.12 maps_launcher: ^2.2.0 + google_fonts: ^4.0.4 dev_dependencies: flutter_lints: ^3.0.1