Flutter: primaryColorLight! = Null ': неверно - PullRequest
0 голосов
/ 12 июля 2020

Мне нужна собственная цветовая тема для моего приложения. Итак, я определил Цвет материала в MyTheme.dart следующим образом.

 static const int _bluePrimaryValue = 0xFF2D9CDB;
  static const MaterialColor blue = MaterialColor(
    _bluePrimaryValue,
    <int, Color>{
      200: Color(0xFF6EBBE6),
      300: Color(0xFF59B1E2),
      400: Color(0xFF43A6DF),
      500: Color(_bluePrimaryValue),
      600: Color(0xFF238FCC),
      700: Color(0xFF1F7FB6),
      800: Color(0xFF1B70A0),
      900: Color(0xFF0D47A1),
    },
  );

В моем приложении Material я заменил

  child: MaterialApp(
..
                theme:
                    ThemeData(primarySwatch: Colors.blue, fontFamily: 'Montserrat'),
  ..)

на

 child: MaterialApp(
    ..
                    theme:
                        ThemeData(primarySwatch: MyTheme.blue, fontFamily: 'Montserrat'),
      ..)

primarySwatch принимает параметр MaterialColor, а Colors.blue и MyTheme.blue относятся к одному типу. Но при передаче Colors.blue ошибки нет, но при передаче MyTheme.blue возникает следующая ошибка.

Неудачное утверждение: строка 525 поз. 15: 'primaryColorLight! = Null': неверно.

Это решается, если указать параметр primaryColorLight в атрибуте темы MaterialApp. Но почему эта ошибка не возникает при использовании Colors.blue?

1 Ответ

0 голосов
/ 12 июля 2020

Это потому, что класс ThemeData устанавливает primaryColorLight из предоставленного вами primarySwatch.

primaryColorLight ??= isDark ? Colors.grey[500] : primarySwatch[100];

Colors.blue, который является стандартным Цвета, предоставляемые Flutter, предоставляют варианты в диапазоне от 50 до 900. Ниже приводится определение Colors.blue

static const MaterialColor blue = MaterialColor(
    _bluePrimaryValue,
    <int, Color>{
      50: Color(0xFFE3F2FD),
      100: Color(0xFFBBDEFB),
      200: Color(0xFF90CAF9),
      300: Color(0xFF64B5F6),
      400: Color(0xFF42A5F5),
      500: Color(_bluePrimaryValue),
      600: Color(0xFF1E88E5),
      700: Color(0xFF1976D2),
      800: Color(0xFF1565C0),
      900: Color(0xFF0D47A1),
    },
  );
  static const int _bluePrimaryValue = 0xFF2196F3;

Но MyTheme.blue не имеет цвета, соответствующего оттенку 100.

...