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

Flutter Web可正常读取本地CSV资产文件,Android模拟器无法解析

解决Flutter安卓模拟器无法读取本地assets CSV文件的问题

以下是关键排查和修复步骤:

  • 修正assets文件路径
    你代码中调用rootBundle.loadString('final.csv')时使用的路径不完整,pubspec.yaml里配置的是assets/final.csv——安卓模拟器对路径匹配要求更严格,Chrome的容错性较高所以能正常读取。把代码里的路径改为:

    final csvFullString = await rootBundle.loadString('assets/final.csv');
    
  • 确认pubspec.yaml配置与同步
    确保assets配置在flutter节点下,缩进正确:

    flutter:
      assets:
        - assets/final.csv
    

    修改pubspec.yaml后必须执行flutter pub get,如果问题依旧,尝试执行flutter clean清理缓存,再重新flutter pub get并重启模拟器。

  • 检查CSV文件编码
    安卓对文件编码敏感,若CSV是带BOM的UTF-8格式可能解析失败。用记事本打开文件,选择「另存为」,编码选择**UTF-8(无BOM)**后重新保存。

  • 验证assets打包情况
    执行flutter build apk生成安装包,解压后检查assets目录下是否存在final.csv,确认文件被正确打包进APK。

修改后的完整代码示例:

Future<List<Map<String, dynamic>>> fetchMarkers() async {
  try {
    // 修正为完整的assets路径
    final csvFullString = await rootBundle.loadString('assets/final.csv');

    final csvFullList = const CsvToListConverter().convert(csvFullString);
    final dataRows = csvFullList.sublist(1); // 移除表头行
    final markers = dataRows
        .map((row) => {
              'name': row[0],
              'area': row[1],
              'road': row[2],
              'easting': row[3],
              'northing': row[4]
            })
        .toList();

    print('Parsing complete');
    return markers;
  } catch (e) {
    throw Exception('Failed to load markers: $e');
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:42:50