【问题标题】:Get ThemeData from static area从静态区域获取 ThemeData
【发布时间】:2020-11-24 11:34:27
【问题描述】:

我将我的文本样式保存在单独的 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 对象还是有更好的解决方案?

【问题讨论】:

    标签: flutter flutter-theme


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      context 获取主题是首选方法。

      【讨论】:

        猜你喜欢
        • 2017-08-21
        • 1970-01-01
        • 2017-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-31
        • 2013-08-02
        相关资源
        最近更新 更多