forked from baron/baron-sso
149 lines
5.0 KiB
Dart
149 lines
5.0 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
ThemeData buildLightTheme() {
|
|
final scheme =
|
|
ColorScheme.fromSeed(
|
|
seedColor: const Color(0xFF1A1F2C),
|
|
brightness: Brightness.light,
|
|
).copyWith(
|
|
surface: Colors.white,
|
|
surfaceContainerLowest: const Color(0xFFF7F8FA),
|
|
surfaceContainerLow: const Color(0xFFF3F4F6),
|
|
surfaceContainerHighest: const Color(0xFFE5E7EB),
|
|
outline: const Color(0xFFD1D5DB),
|
|
outlineVariant: const Color(0xFFE5E7EB),
|
|
primary: const Color(0xFF1A1F2C),
|
|
onPrimary: Colors.white,
|
|
onSurface: const Color(0xFF111827),
|
|
onSurfaceVariant: const Color(0xFF6B7280),
|
|
);
|
|
return _buildTheme(scheme);
|
|
}
|
|
|
|
ThemeData buildDarkTheme() {
|
|
final scheme =
|
|
ColorScheme.fromSeed(
|
|
seedColor: const Color(0xFF7DD3FC),
|
|
brightness: Brightness.dark,
|
|
).copyWith(
|
|
surface: const Color(0xFF0F172A),
|
|
surfaceContainerLowest: const Color(0xFF020617),
|
|
surfaceContainerLow: const Color(0xFF111827),
|
|
surfaceContainerHighest: const Color(0xFF1F2937),
|
|
outline: const Color(0xFF334155),
|
|
outlineVariant: const Color(0xFF1E293B),
|
|
primary: const Color(0xFFBAE6FD),
|
|
onPrimary: const Color(0xFF082F49),
|
|
onSurface: const Color(0xFFF8FAFC),
|
|
onSurfaceVariant: const Color(0xFF94A3B8),
|
|
);
|
|
return _buildTheme(scheme);
|
|
}
|
|
|
|
ThemeData _buildTheme(ColorScheme colorScheme) {
|
|
final isDark = colorScheme.brightness == Brightness.dark;
|
|
final base = ThemeData(
|
|
useMaterial3: true,
|
|
colorScheme: colorScheme,
|
|
fontFamily: 'NotoSansKR',
|
|
);
|
|
|
|
return base.copyWith(
|
|
scaffoldBackgroundColor: colorScheme.surfaceContainerLowest,
|
|
pageTransitionsTheme: const PageTransitionsTheme(
|
|
builders: {
|
|
TargetPlatform.android: NoTransitionsBuilder(),
|
|
TargetPlatform.iOS: NoTransitionsBuilder(),
|
|
TargetPlatform.linux: NoTransitionsBuilder(),
|
|
TargetPlatform.macOS: NoTransitionsBuilder(),
|
|
TargetPlatform.windows: NoTransitionsBuilder(),
|
|
TargetPlatform.fuchsia: NoTransitionsBuilder(),
|
|
},
|
|
),
|
|
appBarTheme: AppBarTheme(
|
|
elevation: 0,
|
|
centerTitle: false,
|
|
backgroundColor: colorScheme.surface,
|
|
foregroundColor: colorScheme.onSurface,
|
|
surfaceTintColor: Colors.transparent,
|
|
),
|
|
cardTheme: CardThemeData(
|
|
color: colorScheme.surface,
|
|
elevation: 0,
|
|
surfaceTintColor: Colors.transparent,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(16),
|
|
side: BorderSide(color: colorScheme.outlineVariant),
|
|
),
|
|
),
|
|
dividerTheme: DividerThemeData(
|
|
color: colorScheme.outlineVariant,
|
|
thickness: 1,
|
|
),
|
|
drawerTheme: DrawerThemeData(
|
|
backgroundColor: colorScheme.surface,
|
|
surfaceTintColor: Colors.transparent,
|
|
),
|
|
dialogTheme: DialogThemeData(
|
|
backgroundColor: colorScheme.surface,
|
|
surfaceTintColor: Colors.transparent,
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)),
|
|
),
|
|
inputDecorationTheme: InputDecorationTheme(
|
|
filled: true,
|
|
fillColor: isDark ? colorScheme.surfaceContainerLow : colorScheme.surface,
|
|
border: OutlineInputBorder(
|
|
borderRadius: BorderRadius.circular(14),
|
|
borderSide: BorderSide(color: colorScheme.outline),
|
|
),
|
|
enabledBorder: OutlineInputBorder(
|
|
borderRadius: BorderRadius.circular(14),
|
|
borderSide: BorderSide(color: colorScheme.outline),
|
|
),
|
|
focusedBorder: OutlineInputBorder(
|
|
borderRadius: BorderRadius.circular(14),
|
|
borderSide: BorderSide(color: colorScheme.primary, width: 1.4),
|
|
),
|
|
labelStyle: TextStyle(color: colorScheme.onSurfaceVariant),
|
|
hintStyle: TextStyle(color: colorScheme.onSurfaceVariant),
|
|
prefixIconColor: colorScheme.onSurfaceVariant,
|
|
),
|
|
filledButtonTheme: FilledButtonThemeData(
|
|
style: FilledButton.styleFrom(
|
|
minimumSize: const Size.fromHeight(50),
|
|
backgroundColor: colorScheme.primary,
|
|
foregroundColor: colorScheme.onPrimary,
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)),
|
|
),
|
|
),
|
|
outlinedButtonTheme: OutlinedButtonThemeData(
|
|
style: OutlinedButton.styleFrom(
|
|
foregroundColor: colorScheme.onSurface,
|
|
side: BorderSide(color: colorScheme.outline),
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)),
|
|
),
|
|
),
|
|
tabBarTheme: TabBarThemeData(
|
|
dividerColor: colorScheme.outlineVariant,
|
|
labelColor: colorScheme.onSurface,
|
|
unselectedLabelColor: colorScheme.onSurfaceVariant,
|
|
indicatorColor: colorScheme.primary,
|
|
),
|
|
);
|
|
}
|
|
|
|
class NoTransitionsBuilder extends PageTransitionsBuilder {
|
|
const NoTransitionsBuilder();
|
|
|
|
@override
|
|
Widget buildTransitions<T>(
|
|
PageRoute<T> route,
|
|
BuildContext context,
|
|
Animation<double> animation,
|
|
Animation<double> secondaryAnimation,
|
|
Widget child,
|
|
) {
|
|
return child;
|
|
}
|
|
}
|