file - 使用 Flutter 列出目录中的本地文件
问题描述
我开始头疼了解底层的 Flutter FileSystem ......
我试图简单地列出目录的内容(具有音频文件)并使用我找到的每个库来获得正确的路径但没有成功......这是我的结构:
root
D assets
D audio
D categoryDir
F something.wav
F other.wav
这是我的 pubspec.yaml 的资产部分:
assets:
- assets/audio/
- assets/audio/categoryDir/
我已经用过getApplicationDocumentsDirectory
,Directory.list
但我总是有文件找不到错误使用这个:
Directory directory = await getApplicationDocumentsDirectory();
Directory audioDir = new Directory(directory.path + '/assets/audio/categoryDir')
audioDir.list(recursive: true, followLinks: false)
.listen((FileSystemEntity entity) {
print('Files: ' + entity.path);
});
怎么做 ?
解决方案
你混合了两种不同的东西:
- 颤振资产随应用程序一起提供,不能由应用程序更改(据我所知也没有浏览过)。
- getApplicationDocumentsDirectory() 返回应用程序的文档目录。在这里,您的应用可以存储它在运行时获取的文件。
如果您的资产中有许多 wav 文件,您可以按如下方式加载它们:
// to get the asset as bytes
String text = await rootBundle.loadString('/assets/text/randomText.txt');
// to get the asset as string
ByteData bytes = await rootBundle.load('/assets/music/randomAudio.wav');
要获取所有资产的列表,我认为有必要创建一个包含所有路径的数组:
List<String> audioAssets = [
"assets/audio/categoryDir/something.wav"
"assets/audio/categoryDir/other.wav"
];
更新:实际上有一种方法可以显示所有包含资产的列表。
final String manifestJson = await DefaultAssetBundle.of(context).loadString('AssetManifest.json');
List<String> images = json.decode(manifestJson).keys.where((String key) {
return key.startsWith('/assets/audio/categoryDir');
}).toList();
在这里找到答案:Flutter read all files from assets folder。
我希望这最终是你想要的。
推荐阅读
- javascript - 具有对象文字作为道具的 Vue.js 子组件在其父渲染时意外更新
- excel - 需要计算没有连续购买的产品的#quarters
- html - HTML
- javascript - 为什么程序员通常在某些函数变量中使用下划线前缀?
- excel - 查找最大值并将名称复制到不同工作表的 VBA 问题
- javascript - WhatsApp API 不会打开 URL 中链接的联系人
- angular - Angular Material mat-ripple 不起作用
- javascript - RegEx 用于验证整数或带两位小数的浮点数
- java - JavaFX折线图改变颜色形状
- javascript - 如何将 jquery 中的输出格式化为 div?