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

Flutter使用csv_hashmap将CSV转为Map<String,String>键前出现多余空格求解

原因分析
  • 核心原因是你用到的csv解析包不会自动修剪读取到的字段前后空白字符:你的CSV文件中,id列的值前面本身带有空格,或是CSV分隔符(逗号)后跟随的空格被一同读取为了字段值的一部分,最终生成Map的时候就保留了这些前置空格。
  • 额外存在异步逻辑错误:convertCSV是异步方法,你在同步的loadDocTypes中直接调用未加await,会出现CSV还没解析完成就提前读取_refHashMap的问题,大概率会导致空异常或者返回无效数据。
修复方案

你可以在构造Map的环节对所有key和value做修剪处理,同时修复异步逻辑即可,修复后代码如下:

HashMap? _refHashMap;

Future<HashMap> convertCSV() async {
  _refHashMap = await CSV_HashMap().hashMapConvertor(
      refList: ["id", "name"], csvPath: 'assets/document_types.csv');
  return _refHashMap!;
}

Future<Map<String, String>> loadDocTypes() async {
  // 等待CSV解析完成再往下执行
  await convertCSV();
  final ids = _refHashMap!["id"] as List<String>;
  final names = _refHashMap!["name"] as List<String>;
  // 对key和value分别做去前后空格处理
  final trimmedIds = ids.map((idStr) => idStr.trim());
  final trimmedNames = names.map((nameStr) => nameStr.trim());
  return Map<String, String>.fromIterables(trimmedIds, trimmedNames);
}

如果确认不需要处理value的空格,只需要去掉key的前置空格,仅对ids的元素做trim操作即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:45:04