Flutter中SharedPreferences无法正常保存数据该如何解决?
问题原因
- 异步读取存储值后未触发UI更新:你在
getStringValuesSF方法中拿到存储的字符串后直接赋值给text变量,没有调用setState通知Flutter刷新UI,所以重新打开应用后界面不会显示之前保存的数据。 - 未处理空值场景:
SharedPreferences.getString在对应key从未存储过值时会返回null,直接赋值给非空String类型的text会触发类型异常。
修复代码
只需修改getStringValuesSF方法即可,调整后逻辑如下:
//method to get the string getStringValuesSF() async { SharedPreferences prefs = await SharedPreferences.getInstance(); //Return String,空值默认返回空字符串 String? stringValue = prefs.getString('stringValue'); // 调用setState触发UI刷新 setState(() { text = stringValue ?? ""; }); }
如果需要保证存储操作的可靠性,也可以给prefs.setString加上await修饰:
onPressed: () async { setState(() { text = _controller.text; }); SharedPreferences prefs = await SharedPreferences.getInstance(); // 加await确认存储完成 await prefs.setString('stringValue', text); },
内容的提问来源于stack exchange,提问作者HabeebAdhru
相关产品推荐
相关产品推荐

