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

Flutter中根据指定元素从Dart列表复制数据到新列表

筛选CSV数据中指定ID的条目

现有代码与数据

已定义变量及CSV加载代码

List<List<dynamic>> _data = [];
String key = "39";
List<List<dynamic>> _tempdata = [];

void _loadCSV() async {
  final _rawData = await rootBundle.loadString("assets/mycsv.csv");
  List<List<dynamic>> _listData =
      const CsvToListConverter().convert(_rawData);
  setState(() {
    _data = _listData;
  });
}

CSV文件(mycsv.csv)内容

id,Name,Num,Batch
15,JERRY,PH123,G9
27,Tom,PH129,G8
39,Oggy,PH124,G9
45,Jack,PH125,G10 

实现筛选逻辑

由于_data的第一行是表头,筛选时需要跳过该行,再匹配每行的id列(即每行第一个元素)与指定key。

方案一:加载CSV后直接筛选

修改_loadCSV方法,在数据加载完成后立即执行筛选:

void _loadCSV() async {
  final _rawData = await rootBundle.loadString("assets/mycsv.csv");
  List<List<dynamic>> _listData =
      const CsvToListConverter().convert(_rawData);
  setState(() {
    _data = _listData;
    // 跳过表头,筛选id与key匹配的行
    _tempdata = _data.skip(1).where((row) => row[0].toString() == key).toList();
  });
}

方案二:单独编写筛选函数

如果需要在其他时机触发筛选,可以单独提取筛选逻辑:

void filterData() {
  if (_data.isEmpty) return;
  setState(() {
    _tempdata = _data.skip(1).where((row) => row[0].toString() == key).toList();
  });
}

之后可以在合适的时机调用该函数,比如组件初始化完成后:

@override
void initState() {
  super.initState();
  _loadCSV().then((_) => filterData());
}

补充说明

  • skip(1)用于跳过CSV的表头行,避免把表头纳入筛选范围
  • 调用row[0].toString()是因为CSV解析后id可能为数字类型,需要转为字符串才能与字符串类型的key匹配
  • 最终_tempdata会得到目标数据:[["39", "Oggy", "PH124", "G9"]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:01:09