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

Flutter报错NoSuchMethodError: 方法'[]'被调用在null对象上问题求助

问题根因

报错指向调用['id']时操作对象为null,结合给出的代码,最高概率的原因是**UserData.fromJson方法里重复取了data字段**:
你传给UserData.fromJson的已经是json['data']对应的用户信息Map,如果在UserData.fromJson内部写了类似id = json['data']['id']的代码,当前上下文里的json['data']不存在,会返回null,调用null['id']就会触发你遇到的报错。

其他需要排查的问题

  • 空安全适配问题:如果开启了Dart空安全,你当前的ShopLoginModel里三个字段都声明为非空类型,但没有做初始化标记或者默认值赋值,也会触发异常,需要把非空字段改为可空或者添加late标记(确认字段一定会被赋值的场景下用late)
    修复后的ShopLoginModel参考代码:
    class ShopLoginModel {
      late bool status;
      late String message;
      UserData? data;
      ShopLoginModel.thisIsJson(Map<String, dynamic> json) {
        status = json['status'];
        message = json['message'];
        data = json['data'] != null ? UserData.fromJson(json['data']) : null;
      }
    }
    
  • 修正UserData.fromJson的写法,直接从传入的json参数取对应字段,不需要再套一层['data']:
    正确的UserData参考代码:
    class UserData {
      late int id;
      late String name;
      late String email;
      late String phone;
      late String image;
      late int points;
      late int credit;
      late String token;
    
      UserData.fromJson(Map<String, dynamic> json) {
        id = json['id'];
        name = json['name'];
        email = json['email'];
        phone = json['phone'];
        image = json['image'];
        points = json['points'];
        credit = json['credit'];
        token = json['token'];
      }
    }
    

内容的提问来源于stack exchange,提问作者Abdelrahman Mohamed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:05