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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:33:47