Flutter 从静态区域获取主题数据

Flutter 从静态区域获取主题数据,flutter,flutter-theme,Flutter,Flutter Theme,我正在将我的文本样式保存在单独的Text\u Styles.dart文件中。当我想像theme.of(context).primaryColor那样使用主题颜色时,我无法从text\u styles.dart中访问主题数据对象。我用这种解决方案解决了我的问题,但这不是一个好的解决方案。 TextStyle kWelcomePageHeaderTextStyle(BuildContext context) => TextStyle( fontFamily: "Courg

我正在将我的文本样式保存在单独的
Text\u Styles.dart
文件中。当我想像theme.of(context).primaryColor那样使用主题颜色时,我无法从
text\u styles.dart
中访问主题数据对象。我用这种解决方案解决了我的问题,但这不是一个好的解决方案。

TextStyle kWelcomePageHeaderTextStyle(BuildContext context) => TextStyle(
      fontFamily: "Courgette",
      fontSize: 30.0,
      color: Theme.of(context).primaryColor,
    );
所以,我需要从静态区域获取主题数据,以便使用我的文本样式

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

我可以从text\u styles.dart获取主题数据对象吗?或者有更好的解决方案吗?

您的应用程序没有一个全局可用的主题。所以你不能得到它

你的应用已经有两个现成的主题(黑暗模式/光明模式),你可以有更多。您甚至可以使用
主题
小部件为构建方法中的特定子树设置不同的主题。你可以在网站上阅读更多关于它的信息


上下文中获取主题是首选方法。

您的应用程序没有一个全局可用的主题。所以你不能得到它

你的应用已经有两个现成的主题(黑暗模式/光明模式),你可以有更多。您甚至可以使用
主题
小部件为构建方法中的特定子树设置不同的主题。你可以在网站上阅读更多关于它的信息


上下文中获取主题是首选方法。

我发现依赖项注入有更好的解决方案。我在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();
     },
));
void main(){
最终GetIt sl=GetIt.instance;
runApp(材料应用程序)(
主题:myLightTheme,
暗色:我的暗色,
生成器:(BuildContext上下文,小部件){
如果(!sl.isRegistered()){
sl.registerSingleton(上下文);
}
返回主页();
},
));
然后我可以得到静态区域的主题

const kWelcomePageHeaderTextStyle = TextStyle(
      fontFamily: "Courgette",
      fontSize: 30.0,
      color: Theme.of(sl.get<BuildContext>()).primaryColor,
    );
const kWelcomePageHeaderTextStyle=TextStyle(
fontFamily:“小胡瓜”,
字体大小:30.0,
颜色:Theme.of(sl.get()).primaryColor,
);

我找到了依赖项注入更好的解决方案。我在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();
     },
));
void main(){
最终GetIt sl=GetIt.instance;
runApp(材料应用程序)(
主题:myLightTheme,
暗色:我的暗色,
生成器:(BuildContext上下文,小部件){
如果(!sl.isRegistered()){
sl.registerSingleton(上下文);
}
返回主页();
},
));
然后我可以得到静态区域的主题

const kWelcomePageHeaderTextStyle = TextStyle(
      fontFamily: "Courgette",
      fontSize: 30.0,
      color: Theme.of(sl.get<BuildContext>()).primaryColor,
    );
const kWelcomePageHeaderTextStyle=TextStyle(
fontFamily:“小胡瓜”,
字体大小:30.0,
颜色:Theme.of(sl.get()).primaryColor,
);