You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SharedPreferences存储用户数据遇类型错误,求解决方案

问题解决: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:12:33