font changing progress

This commit is contained in:
Kima
2024-02-18 20:27:55 +01:00
parent cbbf9b42b2
commit 0f4080c166
4 changed files with 94 additions and 32 deletions

View File

@@ -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,
),
);
}