在Flutter中,您可以设置要使用的深色主题,如果某些上下文(例如,在Android Q上设置了深色模式)将使用该主题。有没有建议的方法可以允许以编程方式覆盖该方法;例如,响应用户偏好?
我想这可以在应用程序的最高层完成:
MaterialApp(
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
themeMode: fromSomeState,
)
但是,我还希望能够以编程方式在应用程序的各个位置(例如用于图像选择)打开应用程序是否处于暗模式:
MediaQuery.of(context).platformBrightness == Brightness.dark;
我也可以尝试更新MediaQueryData
以覆盖platformBrightness
,但这只能在MaterialApp
内部完成,这似乎很尴尬。
做这种事情有更好的模式吗?
答案 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;
并相应地设置主题。