在Flutter中,你可以设置要使用的暗色主题,这将在某些情况下使用(例如,在Android Q上设置了暗模式)。有没有一种推荐的方法可以让它以编程方式被覆盖;例如,响应用户的偏好?
我想这可以在应用程序的最顶层完成:
MaterialApp(
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
themeMode: fromSomeState,
)
然而,我也希望能够在应用程序的不同点(例如图像选择)以编程方式打开应用程序是否处于暗模式:
MediaQuery.of(context).platformBrightness == Brightness.dark;
我也可以尝试更新MediaQueryData
来覆盖platformBrightness
,但这只能在MaterialApp
中完成,这似乎很笨拙。
有没有更好的模式来做这类事情?
发布于 2019-10-19 01:06:33
您可以查看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;
并相应地设置主题。
https://stackoverflow.com/questions/58455090
复制相似问题