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

Flutter遍历API返回的JSON模型按vehbodyopen字段拆分数据实现方法

Dart 拆分车辆列表数据实现方案

你有JS开发背景的话,Dart的数组操作逻辑和JS几乎一致,只需要注意Dart的空安全规则和类型声明即可,具体实现步骤如下:

1. 声明存储分类数据的列表

在你需要持有数据的位置(比如Widget的State类中、请求成功的回调作用域内)声明两个指定类型的空列表:

// 存储vehbodyopen为Y的车辆数据
List<Vehicle> openVehicles = [];
// 存储vehbodyopen为N的车辆数据
List<Vehicle> closeVehicles = [];

2. 遍历拆分数据

拿到getVehicles接口返回的VehicleList实例后,有两种常用实现方式:

方式1:forEach遍历(和JS用法完全一致)

// 先做空判断,避免空异常
if (vehicleList?.vehicles != null) {
  vehicleList!.vehicles.forEach((vehicle) {
    if (vehicle.vehbodyopen == 'Y') {
      openVehicles.add(vehicle);
    } else if (vehicle.vehbodyopen == 'N') {
      closeVehicles.add(vehicle);
    }
  });
}

方式2:条件过滤(对应JS的Array.filter方法)

Dart的where方法等价于JS的filter,最后调用toList()把过滤后的迭代器转为列表即可:

if (vehicleList?.vehicles != null) {
  openVehicles = vehicleList!.vehicles.where((v) => v.vehbodyopen == 'Y').toList();
  closeVehicles = vehicleList!.vehicles.where((v) => v.vehbodyopen == 'N').toList();
}

3. ListView.builder 示例

你可以直接把拆分后的列表传给ListView.builder渲染:

// 以展示openVehicles为例
ListView.builder(
  itemCount: openVehicles.length,
  itemBuilder: (context, index) {
    final vehicle = openVehicles[index];
    return ListTile(
      title: Text(vehicle.vehname),
      subtitle: Text(vehicle.vehdescrip),
    );
  }
)

小优化提示

你现有代码里的var vehicleModel = null;不符合Dart空安全规范,建议修改为VehicleList? vehicleModel;避免编译警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 22:45:04