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,
      ),
    );
  }
}
Другие вопросы по тегам