font changing progress
This commit is contained in:
parent
cbbf9b42b2
commit
0f4080c166
@ -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!!!
|
||||
|
@ -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<void> 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();
|
||||
|
@ -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<String, TextTheme?> 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<SettingsProvider>(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<ThemeModeObserver>(context, listen: false).updateNavbarColor ? backgroundColor : null,
|
||||
backgroundColor: Provider.of<ThemeModeObserver>(context, listen: false)
|
||||
.updateNavbarColor
|
||||
? backgroundColor
|
||||
: null,
|
||||
),
|
||||
);
|
||||
}
|
||||
@ -92,8 +124,11 @@ class AppTheme {
|
||||
var darkColors = AppColors.fromBrightness(Brightness.dark);
|
||||
final settings = Provider.of<SettingsProvider>(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<ThemeModeObserver>(context, listen: false).updateNavbarColor ? backgroundColor : null,
|
||||
backgroundColor: Provider.of<ThemeModeObserver>(context, listen: false)
|
||||
.updateNavbarColor
|
||||
? backgroundColor
|
||||
: null,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user