Flutter 颤振:以编程方式使用暗色调

Flutter 颤振:以编程方式使用暗色调,flutter,android-dark-theme,Flutter,Android Dark Theme,在flatter中,您可以设置要使用的黑暗主题,如果某些上下文(例如Android Q上设置了黑暗模式)将使用该主题。是否有一种推荐的方法允许以编程方式重写该文件;e、 g,响应用户偏好 我想这可以在应用程序的最高层完成: MaterialApp( theme: ThemeData.light(), darkTheme: ThemeData.dark(), themeMode: fromSomeState, ) 但是,我还希望能够在应用程序的各个点(例如,图像选择)以编

在flatter中,您可以设置要使用的黑暗主题,如果某些上下文(例如Android Q上设置了黑暗模式)将使用该主题。是否有一种推荐的方法允许以编程方式重写该文件;e、 g,响应用户偏好

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

MaterialApp(
    theme: ThemeData.light(),
    darkTheme: ThemeData.dark(),
    themeMode: fromSomeState,
)
但是,我还希望能够在应用程序的各个点(例如,图像选择)以编程方式打开应用程序是否处于黑暗模式:

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

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

你可以去看看

如何使用

只需添加
动态主题
作为
MaterialApp

DynamicTheme(
  defaultBrightness: Brightness.light,
  data: (brightness) => new ThemeData(
    primarySwatch: Colors.indigo,
    brightness: brightness,
  ),
  themedWidgetBuilder: (context, theme) {
    return new MaterialApp(
        .......
    );
  }
)
使用获取当前亮度的

    DynamicTheme.of(context).brightness;
并使用

    DynamicTheme.of(context).setBrightness(Theme.of(context).brightness == Brightness.dark? Brightness.light: Brightness.dark);
你可以阅读更多关于它的信息,也可以创建自己的,检查这个媒介

已编辑


您可以使用

MediaQuery.of(context).platformBrightness;

然后相应地设置主题。

看起来很方便,不过我想如果用户没有指定明确的首选项,您如何检测操作系统请求的暗模式仍然存在问题。您可以检查当前操作系统主题并相应地进行设置,请参见编辑的部分。这里不是有点鸡毛蒜皮吗?如果要使用
MediaQuery
设置
DynamicTheme.defaultBrightness
,则需要位于
MaterialApp
内部,但这是在
DynamicTheme
内部构建的。。。是的,但是如果我们让MaterialApp成为动态主题的父对象呢?
MediaQuery.of(context).platformBrightness;