使用animated_theme_switcher切换主题后图标未更新,求正确实现代码
问题原因
- 图标切换的判断逻辑存在类型不匹配错误:你在
Icon的判断条件中直接将主题对象ThemeModelInheritedNotifier.of(context).theme和Brightness枚举值做相等比较,二者类型完全不同,判断逻辑永远返回false,因此图标不会随主题切换变化。 - 若你主动修改了
ThemeModelInheritedNotifier.of(context)的listen参数为false,也会导致组件无法监听到主题更新,保持默认的listen: true即可。
修复方案
将Icon的判断条件调整为读取主题的brightness属性再和Brightness枚举比较即可,修复后的完整代码如下:
Container( margin: const EdgeInsets.only(), child: ThemeSwitcher( clipper: const ThemeSwitcherCircleClipper(), builder: (context) { return IconButton( onPressed: () async { var themeName = ThemeModelInheritedNotifier.of(context).theme.brightness == Brightness.light ? 'dark' : 'light'; var service = await ThemeService.instance..save(themeName); var theme = service.getByName(themeName); ThemeSwitcher.of(context).changeTheme(theme: theme); }, icon: Icon(ThemeModelInheritedNotifier.of(context) .theme .brightness == Brightness.light ? Icons.light_mode_outlined : Icons.dark_mode_outlined), ); }, ), ),
内容的提问来源于stack exchange,提问作者Anatoly Kuznetsov
相关产品推荐
相关产品推荐

