feat: appbar
This commit is contained in:
@@ -4,72 +4,12 @@ import 'package:flutter/material.dart';
|
||||
abstract final class AppColors {
|
||||
const AppColors();
|
||||
|
||||
/// Blue color
|
||||
static const ColorScheme blueLight = ColorScheme(
|
||||
static final blueLight = ColorScheme.fromSeed(
|
||||
seedColor: Color(0xff1145a4),
|
||||
brightness: Brightness.light,
|
||||
primary: Color(0xff1145a4),
|
||||
onPrimary: Color(0xffffffff),
|
||||
primaryContainer: Color(0xffdae2ff),
|
||||
onPrimaryContainer: Color(0xff001848),
|
||||
secondary: Color(0xff4b73d3),
|
||||
onSecondary: Color(0xfffefbff),
|
||||
secondaryContainer: Color(0xffeef0ff),
|
||||
onSecondaryContainer: Color(0xff001848),
|
||||
tertiary: Color(0xff814b81),
|
||||
onTertiary: Color(0xfffffbff),
|
||||
tertiaryContainer: Color(0xffffd6fa),
|
||||
onTertiaryContainer: Color(0xff340439),
|
||||
error: Color(0xffba1a1a),
|
||||
onError: Color(0xfffffbff),
|
||||
errorContainer: Color(0xffffdad6),
|
||||
onErrorContainer: Color(0xff410002),
|
||||
surface: Color(0xFFF0EFF4),
|
||||
onSurface: Color(0xff1a1b21),
|
||||
surfaceContainer: Color(0xfffefbff),
|
||||
surfaceContainerHigh: Color(0xFFE0E1EA),
|
||||
surfaceContainerHighest: Color(0xffe0e2ef),
|
||||
onSurfaceVariant: Color(0xff444651),
|
||||
outline: Color(0xff747782),
|
||||
outlineVariant: Color(0xffc4c6d3),
|
||||
shadow: Color(0xff000000),
|
||||
scrim: Color(0xff000000),
|
||||
inverseSurface: Color(0xff2f3036),
|
||||
onInverseSurface: Color(0xfff1f0f7),
|
||||
inversePrimary: Color(0xffb2c5ff),
|
||||
surfaceTint: Color(0xff06409f),
|
||||
);
|
||||
|
||||
static const ColorScheme blueDark = ColorScheme(
|
||||
static final blueDark = ColorScheme.fromSeed(
|
||||
seedColor: Color(0xff001b3d),
|
||||
brightness: Brightness.dark,
|
||||
primary: Color(0xffa9c7ff),
|
||||
onPrimary: Color(0xff001b3d),
|
||||
primaryContainer: Color(0xff00468c),
|
||||
onPrimaryContainer: Color(0xffd6e3ff),
|
||||
secondary: Color(0xffd6e3ff),
|
||||
onSecondary: Color(0xff001b3d),
|
||||
secondaryContainer: Color(0xff003063),
|
||||
onSecondaryContainer: Color(0xffd6e3ff),
|
||||
tertiary: Color(0xffeab4f6),
|
||||
onTertiary: Color(0xff310540),
|
||||
tertiaryContainer: Color(0xff61356e),
|
||||
onTertiaryContainer: Color(0xfffad7ff),
|
||||
error: Color(0xffffb4ab),
|
||||
onError: Color(0xff410002),
|
||||
errorContainer: Color(0xff93000a),
|
||||
onErrorContainer: Color(0xffffb4ab),
|
||||
surface: Color(0xFF15181C),
|
||||
onSurface: Color(0xffe2e2e9),
|
||||
surfaceContainer: Color(0xff1a1e22),
|
||||
surfaceContainerHigh: Color(0xFF2C3138),
|
||||
surfaceContainerHighest: Color(0xff424852),
|
||||
onSurfaceVariant: Color(0xffc2c6d2),
|
||||
outline: Color(0xff8c919c),
|
||||
outlineVariant: Color(0xff424751),
|
||||
shadow: Color(0xff000000),
|
||||
scrim: Color(0xff000000),
|
||||
inverseSurface: Color(0xffe1e1e9),
|
||||
onInverseSurface: Color(0xff2e3036),
|
||||
inversePrimary: Color(0xff005db7),
|
||||
surfaceTint: Color(0xffa9c7ff),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,16 +5,24 @@ import 'package:immich_mobile/utils/extensions/material_state.extension.dart';
|
||||
import 'package:material_symbols_icons/symbols.dart';
|
||||
|
||||
enum AppTheme {
|
||||
blue._(AppColors.blueLight, AppColors.blueDark),
|
||||
// Fallback color for dynamic theme for non-supported platforms
|
||||
dynamic._(AppColors.blueLight, AppColors.blueDark);
|
||||
blue,
|
||||
dynamic;
|
||||
|
||||
final ColorScheme lightSchema;
|
||||
final ColorScheme darkSchema;
|
||||
ColorScheme getColorScheme({Brightness brightness = Brightness.light}) {
|
||||
if (brightness == Brightness.dark) {
|
||||
return switch (this) {
|
||||
blue || dynamic => AppColors.blueDark,
|
||||
};
|
||||
}
|
||||
return switch (this) {
|
||||
blue || dynamic => AppColors.blueLight,
|
||||
};
|
||||
}
|
||||
|
||||
const AppTheme._(this.lightSchema, this.darkSchema);
|
||||
|
||||
static ThemeData generateThemeData(ColorScheme color) {
|
||||
static ThemeData generateThemeDataForColorScheme(
|
||||
ColorScheme color, {
|
||||
Brightness brightness = Brightness.light,
|
||||
}) {
|
||||
return ThemeData(
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
hintStyle: const TextStyle(
|
||||
@@ -39,9 +47,16 @@ enum AppTheme {
|
||||
),
|
||||
),
|
||||
colorScheme: color,
|
||||
brightness: brightness,
|
||||
dialogBackgroundColor: color.surfaceContainer,
|
||||
primaryColor: color.primary,
|
||||
scaffoldBackgroundColor: color.surface,
|
||||
iconTheme: const IconThemeData(size: 24, weight: 500, opticalSize: 24),
|
||||
iconTheme: IconThemeData(
|
||||
size: 24,
|
||||
weight: 500,
|
||||
opticalSize: 24,
|
||||
color: color.onSurface,
|
||||
),
|
||||
textTheme: TextTheme(
|
||||
displayLarge: AppTypography.displayLarge,
|
||||
displayMedium: AppTypography.displayMedium,
|
||||
@@ -64,13 +79,13 @@ enum AppTheme {
|
||||
closeButtonIconBuilder: (_) => Icon(Symbols.close_rounded),
|
||||
),
|
||||
appBarTheme: AppBarTheme(
|
||||
backgroundColor: color.surfaceContainerLowest,
|
||||
backgroundColor: color.surface,
|
||||
iconTheme: IconThemeData(size: 22, color: color.onSurface),
|
||||
titleTextStyle:
|
||||
AppTypography.titleLarge.copyWith(color: color.onSurface),
|
||||
),
|
||||
navigationBarTheme: NavigationBarThemeData(
|
||||
backgroundColor: color.surfaceContainer,
|
||||
backgroundColor: color.surfaceContainerLow,
|
||||
indicatorColor: color.primary,
|
||||
iconTheme: WidgetStateProperty.resolveWith(
|
||||
(Set<WidgetState> states) {
|
||||
@@ -82,7 +97,7 @@ enum AppTheme {
|
||||
),
|
||||
),
|
||||
navigationRailTheme: NavigationRailThemeData(
|
||||
backgroundColor: color.surfaceContainer,
|
||||
backgroundColor: color.surfaceContainerLow,
|
||||
elevation: 3,
|
||||
unselectedIconTheme: IconThemeData(
|
||||
weight: 500,
|
||||
@@ -115,4 +130,13 @@ enum AppTheme {
|
||||
textSelectionTheme: TextSelectionThemeData(cursorColor: color.primary),
|
||||
);
|
||||
}
|
||||
|
||||
ThemeData generateThemeData({Brightness brightness = Brightness.light}) {
|
||||
final color = getColorScheme(brightness: brightness);
|
||||
|
||||
return AppTheme.generateThemeDataForColorScheme(
|
||||
color,
|
||||
brightness: brightness,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user