Flutter SharedPreference无法实时更新问题求助
解决方案
1. 补充SharedPreference的保存方法
你的LocalPreference类缺少保存语言的核心方法,先添加它:
static String selectedLanguageKey = "language"; static SharedPreferences? _prefs; static Future<SharedPreferences?> init() async { _prefs = await SharedPreferences.getInstance(); return _prefs; } static String? getSelectedLanguage() { return _prefs?.getString(selectedLanguageKey); } // 新增保存语言的方法 static Future<bool> saveSelectedLanguage(String language) async { if (_prefs == null) await init(); return await _prefs!.setString(selectedLanguageKey, language); }
2. 在语言选择后触发UI更新
在showModalBottomSheet的选项点击事件里,先保存选中的语言,再通过setState刷新页面状态,让UI实时同步最新值:
onTap: () async { // 替换成用户实际选中的语言值(比如从弹窗选项中获取) String chosenLanguage = "English"; // 保存到SharedPreference await LocalPreference.saveSelectedLanguage(chosenLanguage); // 更新状态并刷新UI setState(() { _selectedLanguage = chosenLanguage; // 也可以用更稳妥的方式:重新从SharedPreference读取 // _selectedLanguage = LocalPreference.getSelectedLanguage(); }); Navigator.pop(context); // 关闭底部弹窗 }
问题根源
之前UI无法实时更新是因为:页面初始化时initState仅调用一次getSelectedLanguage获取语言值,但用户选择新语言并保存后,没有触发setState更新_selectedLanguage变量,导致UI始终显示旧值。只有重启应用后,initState重新执行才会读取新保存的语言数据。
内容的提问来源于stack exchange,提问作者ibramazin
相关产品推荐
相关产品推荐

