首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Flutter中监听platformBrightness的变化?

如何在Flutter中监听platformBrightness的变化?
EN

Stack Overflow用户
提问于 2019-10-07 03:40:12
回答 4查看 3.3K关注 0票数 4

我正在设置一个系统,当用户将系统主题更改为暗模式时,它会更改主题,并通过Flutter,它工作得很好!但是,当用户更改系统主题时,系统导航和状态栏不会更改其颜色。我在主页上的build方法中运行了代码,但这似乎并不能做到这一点。下面是主页构建方法中的代码:

代码语言:javascript
运行
复制
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:的主应用程序中的代码

代码语言:javascript
运行
复制
    return MaterialApp(
      initialRoute: '/',
      routes: routes,
      navigatorObservers: [_routeObserver],
      theme: Themes.lightTheme,
      darkTheme: Themes.darkTheme,
      debugShowCheckedModeBanner: false,
      title: 'School Life',
    );
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-05-22 16:41:57

覆盖initState方法并使用onPlatformBrightnessChanged

代码语言:javascript
运行
复制
@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

代码语言:javascript
运行
复制
WidgetsBinding.instance?.handlePlatformBrightnessChanged();
票数 9
EN

Stack Overflow用户

发布于 2021-10-31 06:39:33

@CopsOnRoad answer运行良好,但它禁用了对小部件中平台亮度变化的自动反应,要解决此问题,请使用以下命令:

代码语言:javascript
运行
复制
@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;
  };
}

另一种处理方法:

代码语言:javascript
运行
复制
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();
  }
}
票数 3
EN

Stack Overflow用户

发布于 2019-12-06 01:46:53

使用(来自WidgetsBinding)监听更改

代码语言:javascript
运行
复制
void didChangePlatformBrightness()

https://api.flutter.dev/flutter/widgets/WidgetsBindingObserver/didChangePlatformBrightness.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58260648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档