You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MediaQuery.of(context).platformBrightness失效问题求助

问题原因

你用MediaQuery.platformBrightness或SchedulerBinding.platformDispatcher.platformBrightness获取的是系统级的亮度模式,而非AdaptiveTheme切换后应用内的主题模式。AdaptiveTheme是在应用层独立切换主题,不会修改系统的亮度设置,所以这两个方法始终返回系统当前的亮度状态(你初始设置系统为浅色,因此打印结果一直是false)。

解决方案

有两种可靠的方式获取应用当前的主题模式:

方法1:通过AdaptiveTheme实例直接获取

AdaptiveTheme提供了专门API读取当前激活的主题模式:

@override
Widget build(BuildContext context) {
  final currentMode = AdaptiveTheme.of(context).mode;
  bool isDarkMode = currentMode == AdaptiveThemeMode.dark || 
                    (currentMode == AdaptiveThemeMode.system && 
                     MediaQuery.of(context).platformBrightness == Brightness.dark);
  print(isDarkMode);
  
  // 其余build代码...
}

方法2:从当前ThemeData中读取brightness

当前激活的ThemeData的brightness属性会与应用主题保持一致,直接读取即可:

@override
Widget build(BuildContext context) {
  bool isDarkMode = Theme.of(context).brightness == Brightness.dark;
  print(isDarkMode);
  
  // 其余build代码...
}
验证步骤

调用AdaptiveTheme的切换方法测试状态变化:

// 切换到暗黑模式
AdaptiveTheme.of(context).setDark();
// 切换到浅色模式
AdaptiveTheme.of(context).setLight();
// 跟随系统主题
AdaptiveTheme.of(context).setSystem();

此时打印的isDarkMode会正确匹配当前应用的主题状态。

内容的提问来源于stack exchange,提问作者Fabian M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:35:33