Flutter渲染评论列表时出现'+方法被空对象调用'错误如何解决
问题根因
你遇到的空指针报错核心有两个问题:
- CommentModel解析逻辑和接口返回字段不匹配
你在CommentModel.fromJson方法中,判断是否存在用户信息的键是staff,但你提供的JSON示例里用户信息对应的键是user,所以解析时永远不会走到用户信息赋值的分支,_user始终是默认初始化的空UserModel对象,内部的name、surname字段均为null。 - 字符串拼接未做空值处理
第52行的代码直接对name和surname做拼接操作,两个字段只要有一个为null,就会触发「方法'+'被调用在null对象上」的报错。
修复方案
第一步:修复评论模型的解析逻辑
把CommentModel.fromJson方法中判断用户信息的键从staff改为user:
factory CommentModel.fromJson(Map<String, dynamic> json) { //* initialize comment creator var _user = new UserModel(); // 把staff改成user,匹配接口返回的字段名 if (json != null && json.containsKey("user")) { _user = UserModel.fromJson(json['user']); } return CommentModel( id: int.parse(json["id"].toString()) ?? 0, userId: json["user_id"] ?? "", body: json["body"] ?? "", type: json["type"] ?? "", createdAt: json["created_at"] ?? "", projectId: json["project_id"] ?? "", user: _user); }
第二步:优化用户模型的空值兼容
给UserModel.fromJson的字段取值加默认空字符串兜底,避免接口返回空时赋值为null:
factory UserModel.fromJson(Map<String, dynamic> json) { return UserModel( id: json['id'] ?? 0, name: json["name"] ?? '', surname: json["surname"] ?? '', picture: json["picture"] ?? '', email: json["email"] ?? '', medical: json["medical"] ?? '', contract: json["contract"] ?? '', ); }
第三步:优化字符串拼接的空安全处理
把第52行的拼接代码改成插值写法,就算极端情况出现空值也不会报错:
// 替换原来的 + 拼接写法 userName('${widget.comment.user.name ?? ''} ${widget.comment.user.surname ?? ''}'),
可选优化建议
如果你的项目已经开启空安全,建议给所有模型字段加上可空标记(?)或者required修饰,避免隐式空值带来的潜在问题。
内容的提问来源于stack exchange,提问作者Lucky Shabalala
相关产品推荐
相关产品推荐

