Files
iris/lib/theme.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);
}