我正在设置一个系统,当用户将系统主题更改为暗模式时,它会更改主题,并通过Flutter,它工作得很好!但是,当用户更改系统主题时,系统导航和状态栏不会更改其颜色。我在主页上的build方法中运行了代码,但这似乎并不能做到这一点。下面是主页构建方法中的代码:
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',
);
发布于 2020-05-22 16:41:57
覆盖initState
方法并使用onPlatformBrightnessChanged
@override
void initState() {
super.initState();
var window = WidgetsBinding.instance!.window;
// This callback is called every time the brightness changes.
window.onPlatformBrightnessChanged = () {
var brightness = window.platformBrightness;
};
}
要处理默认行为,请在上面的回调中添加以下行。感谢@DJafari
WidgetsBinding.instance?.handlePlatformBrightnessChanged();
发布于 2021-10-31 06:39:33
@CopsOnRoad answer运行良好,但它禁用了对小部件中平台亮度变化的自动反应,要解决此问题,请使用以下命令:
@override
void initState() {
super.initState();
var window = WidgetsBinding.instance!.window;
window.onPlatformBrightnessChanged = () {
WidgetsBinding.instance?.handlePlatformBrightnessChanged();
// This callback is called every time the brightness changes.
var brightness = window.platformBrightness;
};
}
另一种处理方法:
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
@override
void initState() {
WidgetsBinding.instance?.addObserver(this);
super.initState();
}
@override
void dispose() {
WidgetsBinding.instance?.removeObserver(this);
super.dispose();
}
@override
void didChangePlatformBrightness() {
var brightness = Theme.of(context).brightness;
super.didChangePlatformBrightness();
}
}
发布于 2019-12-06 01:46:53
使用(来自WidgetsBinding)监听更改
void didChangePlatformBrightness()
https://api.flutter.dev/flutter/widgets/WidgetsBindingObserver/didChangePlatformBrightness.html
https://stackoverflow.com/questions/58260648
复制相似问题