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

如何根据ThemeMode.system实际明暗状态设置IconButton图标?

解决Flutter中根据主题动态切换图标问题

你之前的代码错误在于,ThemeMode.system是一个主题模式枚举值,它仅表示应用跟随系统主题,无法直接用来判断当前系统的明暗状态。要正确显示对应图标,需要获取当前实际生效的主题亮度,而非判断主题模式。

正确实现方式

可以通过Theme.of(context).brightness获取当前应用的实际主题亮度,它会自动适配两种场景:

  • 当主题模式为ThemeMode.system时,同步系统的明暗状态;
  • 当用户手动切换到ThemeMode.dark或ThemeMode.light时,返回对应的亮度值。

完整IconButton代码示例

IconButton(
  icon: Icon(
    Theme.of(context).brightness == Brightness.dark
        ? Icons.dark_mode
        : Icons.light_mode,
  ),
  onPressed: () {
    // 这里添加主题切换逻辑,比如更新应用的ThemeMode状态
  },
)

补充说明

如果你需要单独获取系统的原生亮度(不受应用手动切换主题影响),可以使用MediaQuery.of(context).platformBrightness,但这种场景较少,大部分情况下使用Theme.of(context).brightness就能满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:40:20