2

在 Flutter 中,您可以设置要使用的深色主题,如果某些上下文(例如 Android Q 上设置了深色模式)将使用该主题。是否有推荐的方法允许以编程方式覆盖它?例如,响应用户偏好?

我想这可以在应用程序的最顶层完成:

MaterialApp(
    theme: ThemeData.light(),
    darkTheme: ThemeData.dark(),
    themeMode: fromSomeState,
)

但是,我还希望能够在应用程序的各个点以编程方式打开应用程序是否处于暗模式(例如,用于图像选择):

MediaQuery.of(context).platformBrightness == Brightness.dark;

我也可以尝试更新MediaQueryDatato override platformBrightness,但这只能在里面完成MaterialApp,这看起来很尴尬。

做这种事情有更好的模式吗?

4

1 回答 1

2

您可以查看dynamic_theme

如何使用

只需添加Dynamic Theme为您的父母MaterialApp

DynamicTheme(
  defaultBrightness: Brightness.light,
  data: (brightness) => new ThemeData(
    primarySwatch: Colors.indigo,
    brightness: brightness,
  ),
  themedWidgetBuilder: (context, theme) {
    return new MaterialApp(
        .......
    );
  }
)

获取currentBrightness使用

    DynamicTheme.of(context).brightness;

并使用

    DynamicTheme.of(context).setBrightness(Theme.of(context).brightness == Brightness.dark? Brightness.light: Brightness.dark);

您可以阅读有关它的更多信息或创建自己的,查看此媒体帖子

已编辑

您可以使用检查当前的操作系统主题

MediaQuery.of(context).platformBrightness;

并相应地设置主题。

于 2019-10-18T17:06:33.383 回答