Получить ThemeData из статической области

Я сохраняю свои текстовые стили отдельно text_styles.dartфайл. Когда я хочу использовать цвета темы так же, как Theme.of (context).primaryColor, я не могу получить доступ к объекту ThemeData изtext_styles.dart Я решил свою проблему с помощью такого решения, но это не очень хорошее решение.

TextStyle kWelcomePageHeaderTextStyle(BuildContext context) => TextStyle(
      fontFamily: "Courgette",
      fontSize: 30.0,
      color: Theme.of(context).primaryColor,
    );

Итак, мне нужно получить ThemeData из статической области для использования моих текстовых стилей, подобных этому.

const kWelcomePageHeaderTextStyle = TextStyle(
      fontFamily: "Courgette",
      fontSize: 30.0,
      color: [THEME_DATA_OBJECT_NEEDED].primaryColor,
    );

Могу ли я получить объект ThemeData из text_styles.dart или есть лучшее решение?

1 ответ

Решение

В вашем приложении нет единой глобально доступной темы. Так что вы не можете этого понять.

В вашем приложении уже есть две готовые темы (темный режим / светлый режим), и у вас может быть гораздо больше. Вы даже можете иметь другую тему для определенного поддерева в своих методах сборки, используяThemeвиджет. Подробнее об этом можно прочитать в документации.

Получение темы из context является предпочтительным методом.

Я нашел лучшее решение с помощью внедрения зависимостей. Я зарегистрировал зависимость BuildContext в MaterialApp.

void main() {
  final GetIt sl = GetIt.instance;
  runApp(MaterialApp(
     theme: myLightTheme,
     darkTheme: myDarkTheme,
     builder: (BuildContext context, Widget widget) {
          if (!sl.isRegistered<BuildContext>()) {
              sl.registerSingleton<BuildContext>(context);
          }
          return HomePage();
     },
));

Затем я могу разместить тему в статической области

const kWelcomePageHeaderTextStyle = TextStyle(
      fontFamily: "Courgette",
      fontSize: 30.0,
      color: Theme.of(sl.get<BuildContext>()).primaryColor,
    );
Другие вопросы по тегам