Flutter:以编程方式导致使用DarkTheme

时间:2019-10-18 16:47:48

标签: flutter android-dark-theme

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

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

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

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

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

我也可以尝试更新MediaQueryData以覆盖platformBrightness,但这只能在MaterialApp内部完成,这似乎很尴尬。

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

1 个答案:

答案 0 :(得分:1)

您可以签出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);

您可以阅读有关此内容的更多信息或创建自己的内容,请检查此介质Post

已编辑

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

MediaQuery.of(context).platformBrightness;

并相应地设置主题。