3

我将我的文本样式保存在单独的text_styles.dart文件中。当我想像 Theme.of(context).primaryColor 一样使用主题颜色时,我无法从 .Im 到达 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,
    );

我可以从 text_styles.dart 获取 ThemeData 对象还是有更好的解决方案?

4

2 回答 2

2

我通过依赖注入找到了更好的解决方案。我在 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();
     },
));

然后我可以在静态区域获得主题

const kWelcomePageHeaderTextStyle = TextStyle(
      fontFamily: "Courgette",
      fontSize: 30.0,
      color: Theme.of(sl.get<BuildContext>()).primaryColor,
    );
于 2020-09-18T13:52:09.283 回答
0

您的应用没有单一的全球可用主题。所以你无法得到它。

您的应用程序已经有两个开箱即用的主题(深色模式/浅色模式),您还可以拥有更多。您甚至可以使用小部件在构建方法中为特定子树设置不同的主题Theme您可以在文档中阅读有关它的更多信息。

从 中获取主题context是首选方法。

于 2020-08-04T11:24:17.663 回答