从静态区域获取 ThemeData
Get ThemeData from static area
我将我的文本样式保存在单独的 text_styles.dart
文件中。当我想使用像 Theme.of(context).primaryColor 这样的主题颜色时,我无法从 text_styles.dart
访问 ThemeData 对象。我用这种解决方案解决了我的问题,但这不是好的解决方案。
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,
);
我可以从 text_styles.dart 获取 ThemeData 对象还是有更好的解决方案?
您的应用没有单一的、全球可用的主题。所以你不能得到它。
您的应用已经有两个开箱即用的主题(深色 mode/light 模式),您还可以拥有更多。您甚至可以使用 Theme
小部件在构建方法中为特定子树设置不同的主题。您可以在 documentation.
中阅读更多相关信息
从 context
获取主题是首选方法。
我找到了更好的依赖注入解决方案。我在 MaterialApp.
中注册了依赖项 BuildContext
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();
},
));
然后就可以在静态区获取Theme了
const kWelcomePageHeaderTextStyle = TextStyle(
fontFamily: "Courgette",
fontSize: 30.0,
color: Theme.of(sl.get<BuildContext>()).primaryColor,
);
我将我的文本样式保存在单独的 text_styles.dart
文件中。当我想使用像 Theme.of(context).primaryColor 这样的主题颜色时,我无法从 text_styles.dart
访问 ThemeData 对象。我用这种解决方案解决了我的问题,但这不是好的解决方案。
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,
);
我可以从 text_styles.dart 获取 ThemeData 对象还是有更好的解决方案?
您的应用没有单一的、全球可用的主题。所以你不能得到它。
您的应用已经有两个开箱即用的主题(深色 mode/light 模式),您还可以拥有更多。您甚至可以使用 Theme
小部件在构建方法中为特定子树设置不同的主题。您可以在 documentation.
从 context
获取主题是首选方法。
我找到了更好的依赖注入解决方案。我在 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();
},
));
然后就可以在静态区获取Theme了
const kWelcomePageHeaderTextStyle = TextStyle(
fontFamily: "Courgette",
fontSize: 30.0,
color: Theme.of(sl.get<BuildContext>()).primaryColor,
);