You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flutter应用无法响应系统定时深色模式自动切换的问题咨询

Flutter应用无法响应系统定时深色模式自动切换的问题咨询

我正在开发一款支持明暗双主题的Flutter应用,目前使用ThemeMode.system来跟随系统主题设置,同时为了检测并响应系统主题变化,我在ConsumerStatefulWidget中实现了WidgetsBindingObserver,并重写了didChangePlatformBrightness()方法,具体代码如下:

class _MyAppState extends ConsumerState<MyApp> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void didChangePlatformBrightness() {
    final newBrightness = WidgetsBinding.instance.platformDispatcher.platformBrightness;
    debugPrint(' system brightness changed: $newBrightness');
    setState(() {});
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }
}

当我手动在系统设置中切换明暗模式时,应用能正常响应主题变化;但当系统通过定时规则(比如日落/日出自动切换,或自定义时间触发)开启深色模式时,Flutter完全检测不到这个变化——只有当我把应用切到后台再重新打开时,主题才会更新。

测试环境

  • 测试设备:小米实体手机(MIUI系统)
  • 系统状态:定时深色模式已开启
  • Flutter版本:3.32.8

已尝试的解决方案

  • 在普通StatefulWidget中直接使用WidgetsBindingObserver
  • 通过Riverpod Provider来跟踪系统亮度状态
  • 在app.dart中监听该Provider以触发应用重建
  • didChangePlatformBrightness()中添加日志(定时切换时该方法完全没有被调用)

我想了解的问题

  1. 为什么Flutter的didChangePlatformBrightness()方法无法检测到系统定时触发的主题变化?
  2. 这是MIUI系统的已知限制吗?
  3. 是否有原生Android的替代方案(比如onConfigurationChanged)可以通过平台通道桥接到Flutter中使用?

如果有任何关于实时检测系统定时主题变化的思路,或是可行的原生解决方案,都非常感谢!

内容来源于stack exchange

火山引擎 最新活动