我正在设置一个系统,当用户将系统主题更改为暗模式时,它会更改主题,而Flutter则运行良好!但是,当用户更改系统主题时,系统导航和状态栏不会更改颜色。我在构建方法中的主页上运行了代码,但这似乎没有做到这一点。以下是主页构建方法中的代码:
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
Brightness sysBrightness = MediaQuery.of(context).platformBrightness;
if (sysBrightness == Brightness.dark)
Themes.setDarkSystemColors();
else
Themes.setLightSystemColors();
return Scaffold(
appBar: CustomAppBar(title: "Home"),
drawer: CustomDrawer(),
body: SizedBox(),
);
}
}
下面是主应用中theme:
和darkTheme:
的代码:
return MaterialApp(
initialRoute: '/',
routes: routes,
navigatorObservers: [_routeObserver],
theme: Themes.lightTheme,
darkTheme: Themes.darkTheme,
debugShowCheckedModeBanner: false,
title: 'School Life',
);
6条答案
按热度按时间f87krz0w1#
覆写
initState
方法并使用onPlatformBrightnessChanged
:要处理默认行为,请在上面的回调中添加以下代码行。
sd2nnvve2#
@CopsOnRoad答案工作完美,但它禁用了自动React平台亮度变化在你的小部件,要解决这个问题,使用这个:
另一种处理方法是:
tjrkku2a3#
侦听更改使用(来自WidgetsBinding)
https://api.flutter.dev/flutter/widgets/WidgetsBindingObserver/didChangePlatformBrightness.html
wnvonmuf4#
有一个ThemeMode枚举(我想是从Flutter 1.9版本开始),所以你可以设置
theme
为light,darkTheme
为dark,themeMode
(ThemeMode.system
(默认),ThemeMode.light
,ThemeMode.dark
)决定使用哪个主题。但是,我不确定是否有办法监听platformBrightness的变化(
ThemeMode
也在幕后使用platformBrightness)。mnemlml85#
[Feb 2022年] -对我来说很好。
使用-***最终亮度亮度= MediaQuery.platformBrightnessOf(上下文);***.
这将侦听主题更改。您可以基于此更改进行不同的呈现。
稍后在Widget中根据***isDarkMode***进行渲染
例如:
资产图像(是否为暗模式?暗背景图像:lightBg图像)
cedebl8k6#
有两个选项:
MediaQueryData.platformBrightness
:“主机平台的当前亮度模式”MediaQueryData.brightness
:“整体主题亮度。"。你可能需要这个。如果你有一个应用内设置,让用户在不同的操作系统下配置不同的亮度,
platformBrightness
就不起作用。你需要你的应用亮度。