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