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
相关产品推荐
相关产品推荐

