如何监听平台亮丽的变化? [英] How to listen for changes to platformBrightness in Flutter?

查看:25
本文介绍了如何监听平台亮丽的变化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在设置一个系统,当用户将系统主题更改为暗模式时,它会更改主题,并且在颤动的情况下,它工作得很好!但是,当用户更改系统主题时,系统导航和状态栏不会更改其颜色。我在主页上的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',
    );

推荐答案

覆盖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();

这篇关于如何监听平台亮丽的变化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆