Flutter ColorScheme Copy с неработающей яркостью
В моем файле app_theme.dart проекта Flutter у меня есть этот код:
class AppTheme {
static const primaryColor = Color.fromARGB(255, 106, 49, 185);
static ThemeData lightTheme() {
return ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(
seedColor: primaryColor,
brightness: Brightness.light,
),
);
}
static ThemeData darkTheme() {
return ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(
seedColor: primaryColor,
brightness: Brightness.dark,
),
);
}
Затем в main.dart мой виджет Material App реализует это так:
theme: AppTheme.lightTheme(),
darkTheme: AppTheme.darkTheme(),
Это работает правильно, поэтому в эмуляторе Android, когда я переключаюсь между темным и светлым режимами (в настройках), приложение автоматически меняется.
Но то, что я хотел сделать, это объявить ColorScheme отдельно (чтобы я мог переопределить определенные цвета и т. д.), а затем просто использовать copyWith для объявления яркости в ThemeData:
class AppTheme {
static const primaryColor = Color.fromARGB(255, 106, 49, 185);
static ColorScheme colorScheme = ColorScheme.fromSeed(
seedColor: primaryColor,
// Customisation goes here
);
static ThemeData lightTheme() {
return ThemeData(
useMaterial3: true,
colorScheme: colorScheme.copyWith(
brightness: Brightness.light,
),
);
}
static ThemeData darkTheme() {
return ThemeData(
useMaterial3: true,
colorScheme: colorScheme.copyWith(
brightness: Brightness.dark,
),
);
}
Но это не работает. Он просто остается в легком режиме все время, хотя ошибок не выдает.
Любые идеи, что я делаю неправильно?
1 ответ
Конструктор ColorScheme.fromSeed генерируетColorScheme
полученный из данного seedColor. Очевидно, что при копировании сгенерированного объекта цвета снова не генерируются. Что-то вроде этого будет работать:
class AppTheme {
static const primaryColor = Color.fromARGB(255, 106, 49, 185);
static ColorScheme fromBrightness({required Brightness brightness}) {
return ColorScheme.fromSeed(
brightness: brightness,
seedColor: primaryColor,
// Customisation goes here
);
}
static ThemeData lightTheme() {
return ThemeData(
useMaterial3: true,
colorScheme: AppTheme.fromBrightness(
brightness: Brightness.light,
),
);
}
static ThemeData darkTheme() {
return ThemeData(
useMaterial3: true,
colorScheme: AppTheme.fromBrightness(
brightness: Brightness.dark,
),
);
}
}