Flutter中assets文件读取失败:修改pubspec.yaml仍报错
解决Flutter读取Assets文件报错" No such file or directory"的问题
你用File类直接读取assets文件的方式不对——Flutter的assets文件是打包进应用资源包的,并非存储在设备的文件系统路径中,所以File无法定位到该路径。
正确的解决方案:使用rootBundle读取Assets
步骤如下:
- 导入
flutter/services.dart包 - 通过
rootBundle.loadString()读取assets文件内容,再分割为行 - 后续随机选单词的逻辑保持不变
修正后的完整代码:
import 'package:flutter/services.dart'; // 必须导入这个包 import 'dart:math'; // 建议放在异步方法中执行 Future<List<String>> getRandomWords() async { List<String> wordList = []; try { // 用rootBundle读取assets内容 String fileContent = await rootBundle.loadString('assets/this.txt'); List<String> lines = fileContent.split('\n'); // 过滤空行,避免索引错误 lines = lines.where((line) => line.trim().isNotEmpty).toList(); final random = Random(); for (int i = 0; i < 4; i++) { if(lines.isEmpty) break; // 防止文件为空时报错 int randomIndex = random.nextInt(lines.length); wordList.add(lines[randomIndex]); } } catch (e) { print('Error reading file: $e'); } return wordList; }
额外检查项
- 确认
pubspec.yaml中assets的缩进正确(必须是flutter:下的二级缩进,和uses-material-design同级) - 修改
pubspec.yaml后,执行一次flutter pub get确保资源被正确打包 - 确认
assets/this.txt文件确实存在于项目根目录的assets文件夹中,文件名和路径大小写一致(Flutter对路径大小写敏感)
内容的提问来源于stack exchange,提问作者MMMM
相关产品推荐
相关产品推荐

