mirror of
https://github.com/nini22P/iris.git
synced 2026-05-08 22:47:33 +08:00
70 lines
2.0 KiB
Dart
70 lines
2.0 KiB
Dart
import 'package:dynamic_color/dynamic_color.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:google_fonts/google_fonts.dart';
|
|
|
|
ThemeData baseTheme(BuildContext context) {
|
|
return ThemeData(
|
|
popupMenuTheme: PopupMenuThemeData(
|
|
menuPadding: const EdgeInsets.all(0),
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(16),
|
|
),
|
|
shadowColor: null,
|
|
elevation: 0,
|
|
),
|
|
listTileTheme: ListTileThemeData(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(12),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
ColorScheme customColorScheme =
|
|
ColorScheme.fromSeed(seedColor: const Color(0xFFB3BCDF));
|
|
ColorScheme customDarkColorScheme = ColorScheme.fromSeed(
|
|
seedColor: const Color(0xFFB3BCDF), brightness: Brightness.dark);
|
|
|
|
class CustomTheme {
|
|
final ThemeData light;
|
|
final ThemeData dark;
|
|
|
|
CustomTheme({required this.light, required this.dark});
|
|
}
|
|
|
|
CustomTheme getTheme({
|
|
required BuildContext context,
|
|
required ColorScheme? lightDynamic,
|
|
required ColorScheme? darkDynamic,
|
|
}) {
|
|
ColorScheme colorScheme =
|
|
lightDynamic != null ? lightDynamic.harmonized() : customColorScheme;
|
|
ColorScheme darkColorScheme =
|
|
darkDynamic != null ? darkDynamic.harmonized() : customDarkColorScheme;
|
|
|
|
final base = baseTheme(context);
|
|
|
|
final lightTheme = ThemeData(
|
|
colorScheme: colorScheme,
|
|
useMaterial3: true,
|
|
textTheme: GoogleFonts.notoSansScTextTheme(),
|
|
popupMenuTheme: base.popupMenuTheme,
|
|
dropdownMenuTheme: base.dropdownMenuTheme,
|
|
listTileTheme: base.listTileTheme,
|
|
);
|
|
|
|
final darkTheme = ThemeData.dark(useMaterial3: true).copyWith(
|
|
colorScheme: darkColorScheme,
|
|
textTheme: GoogleFonts.notoSansScTextTheme(
|
|
ThemeData.dark(useMaterial3: true)
|
|
.copyWith(colorScheme: darkColorScheme)
|
|
.textTheme,
|
|
),
|
|
popupMenuTheme: base.popupMenuTheme,
|
|
dropdownMenuTheme: base.dropdownMenuTheme,
|
|
listTileTheme: base.listTileTheme,
|
|
);
|
|
|
|
return CustomTheme(light: lightTheme, dark: darkTheme);
|
|
}
|