使用SharedPreferences存储用户数据遇类型错误,求解决方案
错误原因
你搞反了JSON序列化的方法:userData.toJson()已经返回Map<String, dynamic>类型的数据,而jsonDecode是用来把JSON字符串解析成Map的,这就导致你得到的结果还是Map,和prefs.setString需要的String类型不匹配,所以触发了类型错误。
修正后的代码
把jsonDecode换成jsonEncode——它的作用是把Map转换成JSON格式的字符串,正好符合SharedPreferences存储字符串的要求:
class UserPerfs { static Future<void> saveUserPerfs(User userData) async { SharedPreferences prefs = await SharedPreferences.getInstance(); String userJsonData = jsonEncode(userData.toJson()); await prefs.setString('currentUser', userJsonData); } }
补充:读取存储的用户数据
如果之后需要取出存储的用户信息,要反向操作:用jsonDecode把字符串转回Map,再通过User.fromJson方法转成User对象,示例代码如下:
static Future<User?> getUserPerfs() async { SharedPreferences prefs = await SharedPreferences.getInstance(); String? userJson = prefs.getString('currentUser'); if(userJson != null){ Map<String, dynamic> userMap = jsonDecode(userJson); return User.fromJson(userMap); } return null; }
内容的提问来源于stack exchange,提问作者Cliff Odebala Clarke
相关产品推荐
相关产品推荐

