颤振中的文件列表

Ser*_*sov 9 dart flutter

我有图像,我想将它们加载到我的应用程序中。my_app/lib/... - 这里是我的源文件 my_app/assets/images/... - 这里是我的图片

我需要获取 assets/images/ 中的文件列表,然后显示其中的一些(根据其他逻辑)我正在尝试这个

final dir = Directory("assets/images/");
print(dir.existsSync());    // <---- it also print: false
var files = dir.listSync().toList();
files.forEach((e) => list.add(MyImageItem(e.path)));
Run Code Online (Sandbox Code Playgroud)

问题是:我收到异常

FileSystemException: Directory listing failed, path = 'assets/images/'
(OS Error: No such file or directory, errno = 2)
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的方法:assets/images/、images/、images 等等 我的 pubspec.yaml

flutter:
  assets:
    - assets/images/
    - assets/
Run Code Online (Sandbox Code Playgroud)

当我直接创建 Image 时一切都很好

new Image(image: AssetImage("assets/images/cat.png"))
Run Code Online (Sandbox Code Playgroud)

我知道之前(一个月前)每个资源都必须直接在 pubspec.yaml 中声明,但现在 assets/images/ 没问题。我可以通过直接路径加载文件。为什么我无法访问目录?如何获取目录中的文件列表以从我的代码中获取它们?

Jav*_*ash 2

当您将文件添加到资产时,这意味着您已经知道它们的路径。将所有图像路径存储在列表中并在需要时访问它们。

例如,如果您有 3 张图像

your_app/assets/images/image1.jpg
your_app/assets/images/image2.jpg
your_app/assets/images/image3.jpg

创建一个列表并存储所有这些,如下所示:

List<String> imagePaths = ['assets/images/image1.jpg', 'assets/images/image2.jpg', 'assets/images/image3.jpg'];
Run Code Online (Sandbox Code Playgroud)

例如,如果您想访问第一张图像,请使用

AssetImage(imagePaths[0])

  • 在应用程序包中存储 5-10k 图像是一个糟糕的主意,您最好考虑另一个解决方案。 (2认同)
  • 如果必须,您可以使用代码生成来生成一个 dart 文件,其中每个文件都有常量。 (2认同)