使用ThemeProvider时CupertinoSwitch无法切换明暗主题的问题排查
使用ThemeProvider时CupertinoSwitch无法切换明暗主题的问题排查
嘿,我帮你揪出了代码里的两个关键问题,正是它们导致开关没法正常切换主题!
第一个问题:Setter方法没有修改实际的主题变量
看你ThemeProvider里的themeData setter:
set themeData(ThemeData themeData) { themeData = themeData; notifyListeners(); }
这里你犯了个小迷糊——把参数themeData赋值给了它自己,完全没碰类里的私有成员_themeData!相当于啥都没改,主题自然不会切换。
正确的写法应该是把新的主题数据赋值给_themeData:
set themeData(ThemeData themeData) { _themeData = themeData; notifyListeners(); }
第二个问题:_themeData被标记为final,无法修改
你原来的代码里_themeData是final类型:
final ThemeData _themeData = lightMode;
final变量一旦初始化就不能再修改了,而切换主题本质就是要改变这个变量的值,所以必须把final去掉:
ThemeData _themeData = lightMode;
修改后的完整ThemeProvider代码
import 'package:chat_app/themes/dark_mode.dart'; import 'package:chat_app/themes/light_mode.dart'; import 'package:flutter/material.dart'; class ThemeProvider extends ChangeNotifier { ThemeData _themeData = lightMode; ThemeData get getTheme => _themeData; bool get isDarkMode => _themeData == darkMode; set themeData(ThemeData themeData) { _themeData = themeData; notifyListeners(); } void toggleTheme() { themeData = isDarkMode ? lightMode : darkMode; } }
现在再点击CupertinoSwitch,开关应该就能正常切换,主题也会跟着更新啦!
备注:内容来源于stack exchange,提问作者Caio
相关产品推荐
相关产品推荐

