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
相关产品推荐
相关产品推荐

