Flutter获取两点距离遇空值及并发修改迭代问题排查
问题解决方案
1. 解决distance显示null的问题
- 检查
Destination模型类的JSON解析逻辑:
确保fromJson方法中正确读取了JSON里的distance字段,比如:
注意:如果接口返回的class Destination { int? distance; String? name; Destination({this.distance, this.name}); factory Destination.fromJson(Map<String, dynamic> json) { return Destination( name: json['name'] as String?, // 关键:确保这里的key和接口返回的JSON字段完全一致 distance: json['distance'] as int?, ); } }distance是字符串类型(比如"0"),需要先转换为数字:int.tryParse(json['distance'] as String)。 - 若使用
json_serializable库,检查字段注解:
如果JSON字段和模型变量名不一致(比如大小写差异),需添加@JsonKey注解指定对应关系:@JsonKey(name: 'distance') int? distance;
2. 解决"Concurrent modification during iteration"错误
这个错误是因为遍历集合的同时修改了集合本身(比如添加/删除元素、修改集合内元素时触发集合变更),解决方式如下:
- 遍历集合副本:
不要直接遍历原列表,而是遍历它的副本,这样修改原列表不会影响遍历过程:// 原错误写法(直接遍历原列表并修改) // for (var dest in destinations) { ... } // 正确写法:遍历原列表的副本 for (var dest in List.from(destinations)) { // 在这里安全处理元素或修改原列表 dest.distance = jsonData['distance']; } - 创建新列表存储结果:
完全避免修改原列表,而是生成一个新的处理后列表:List<Destination> processedDestinations = []; for (var dest in destinations) { // 复制原对象并赋值distance(避免修改原对象可能引发的问题) var newDest = Destination( name: dest.name, distance: jsonData['distance'], ); processedDestinations.add(newDest); } // 后续使用processedDestinations进行展示
内容的提问来源于stack exchange,提问作者msi
相关产品推荐
相关产品推荐

