List of files in flutter

2019-02-26 08:17发布

问题:

I have images and I want to load them to my appplication. my_app/lib/... - here my source files my_app/assets/images/... - here my images

I need to get list of files in assets/images/ and after that show some of them (according to other logic) I'm trying this

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)));

The problem is: I recieve exception

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

I've tried different ways: assets/images/, images/, images and so on My pubspec.yaml

flutter:
  assets:
    - assets/images/
    - assets/

When I create Image directly all is fine

new Image(image: AssetImage("assets/images/cat.png"))

I knew that previously (month ago) each resource has to be declared in pubspec.yaml directly, but now assets/images/ is ok. I can load file by direct path. Why I can't access a directory? How to get list of files in directory to get them from my code?

回答1:

When you add files to your assets, it means that you already know their paths. Store all the images paths in a list and access them whenever you need.

For example if you have 3 images in

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

create a list and store all of them like:

List<String> imagePaths = ['assets/images/image1.jpg', 'assets/images/image2.jpg', 'assets/images/image3.jpg'];

and for example if you want to access your first image, use

AssetImage(imagePaths[0])



回答2:

I keep a json file inside assets which records the file tree of assets folder.

When file list is needed, I just read from the json file.

Such json file can be easily generated by code.

However, this does not solve your problem directly when u have 5-10k images. Only one json file might be too large to read.

Images should be grouped and recorded in separated json files.



标签: dart flutter