我正在设置一个系统,当用户将系统主题更改为深色模式时,它会更改主题,并且使用 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:
and darkTheme:
:
return MaterialApp(
initialRoute: '/',
routes: routes,
navigatorObservers: [_routeObserver],
theme: Themes.lightTheme,
darkTheme: Themes.darkTheme,
debugShowCheckedModeBanner: false,
title: 'School Life',
);
您可以通过多种方式做到这一点:
-
Using didChangeDependencies
// This callback will be invoked every time the platform brightness changes.
@override
void didChangeDependencies() {
super.didChangeDependencies();
// Get the brightness.
var brightness = MediaQuery.of(context).platformBrightness;
}
-
Using WidgetsBindingObserver
class _MyPageState extends State<MyPage> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
// This callback is invoked every time the platform brightness changes.
@override
void didChangePlatformBrightness() {
super.didChangePlatformBrightness();
// Get the brightness.
var brightness = View.of(context).platformDispatcher.platformBrightness;
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
Widget build(BuildContext context) => Container();
}
-
设置监听器initState
@override
void initState() {
super.initState();
var dispatcher = SchedulerBinding.instance.platformDispatcher;
// This callback is called every time the brightness changes.
dispatcher.onPlatformBrightnessChanged = () {
var brightness = dispatcher.platformBrightness;
};
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)