使用 Flutter 列出目录中的本地文件

List local files in directory with Flutter

我开始头疼了解底层的Flutter FileSystem...

我试图简单地列出一个目录的内容(有音频文件)并使用我找到的每个库来获得正确的路径但没有成功... 这是我的结构:

root
  D assets
    D audio
      D categoryDir
        F something.wav
        F other.wav

这是我的资产部分 pubspec.yaml :

 assets:
  - assets/audio/
  - assets/audio/categoryDir/

我已经使用了 getApplicationDocumentsDirectoryDirectory.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);
});

怎么办?

你混淆了两种不同的东西:

  1. flutter assets 是应用程序自带的,不能被应用程序更改(据我所知也没有浏览过)。
  2. getApplicationDocumentsDirectory() returns 您应用程序的文档目录。您的应用可以在此处存储它在运行时获取的文件。

如果您的资产中有多个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();

在这里找到答案:

我希望这就是您要找的东西。