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

Flutter安全存储存储对象值报错:NoSuchMethodError问题求助

解决Flutter中NoSuchMethodError: '_Map<String, dynamic>'无toJson方法的问题

错误原因

报错的核心是jsonResponse['data'][0]本身是Map<String, dynamic>类型的原生集合对象,并非你自定义的、实现了toJson()方法的模型类,所以直接调用.toJson()会触发方法不存在的错误。

解决方案

分两种场景处理:

场景1:直接存储Map数据

如果不需要用模型类封装数据,直接对现有Map做序列化即可——json.encode()本身支持直接处理Map,无需额外调用toJson():

await LocalStorage().addStorage('currentUser', json.encode(jsonResponse['data'][0]));

场景2:转为自定义模型类后存储

如果希望用模型类管理用户数据,先定义带序列化方法的模型类,再完成转换存储:

  1. 定义User模型类(示例):
class User {
  final String id;
  final String username;
  // 根据接口返回补充其他字段

  User({required this.id, required this.username});

  // 从Map转模型对象
  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      username: json['username'],
    );
  }

  // 模型转Map(实现toJson方法)
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'username': username,
    };
  }
}
  1. 转换并存储:
User user = User.fromJson(jsonResponse['data'][0]);
await LocalStorage().addStorage('currentUser', json.encode(user.toJson()));

安全存储补充说明

  • Flutter安全存储(如flutter_secure_storage)仅支持存储字符串,所以必须通过json.encode()将对象/Map转为JSON字符串后存入。
  • 读取数据时,需要用json.decode()将字符串转回Map或模型对象:
String? userStr = await LocalStorage().getStorage('currentUser');
if (userStr != null) {
  // 转回Map
  Map<String, dynamic> userMap = json.decode(userStr);
  // 或转回模型
  User user = User.fromJson(userMap);
}

内容的提问来源于stack exchange,提问作者Tantely José

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:14:53