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
相关产品推荐
相关产品推荐

