Получить 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,
);