异步功能完成后如何返回数据

时间:2020-04-25 00:30:37

标签: flutter asynchronous dart

假设我具有以下文件夹结构:

People
|
|── John
|   |── img.png
|   |── info.json 
|── Craig
|   |── img.png
|   |── info.json
|── Daniel
|   |── img.png
|   |── info.json

我想获取info.json文件夹中列出的每个文件夹的People。为此,我编写了一个函数:

import 'dart:convert';
import "dart:io";


Directory folderPath = Directory("/storage/people/");
Future<List> getData() async {

      List data = [];

      folderPath.list().listen((e) async { //for every entity in directory
        var path = e.path;
        File infoFile = File("$path/info.json");
        String infoString = await infoFile.readAsString();
        Map info = jsonDecode(infoString);
        data.add(item);
       });
       return data;
  } 

不幸的是,它不起作用。函数不等待循环结束,而是返回data为空。

函数在循环完成后有什么方法可以返回数据吗?

2 个答案:

答案 0 :(得分:0)

您应该尝试在folderPath.list()上使用本机for循环。 在Dart中,使用for循环会自动告诉函数等待结束,然后再返回任何内容。

答案 1 :(得分:0)

您可以尝试一下吗?

Directory folderPath = Directory("/storage/people/");
Future<List> getData() async {
  List data = [];
  List<FileSystemEntity> entities = folderPath.listSync();

  for (FileSystemEntity e in entities) {
    var path = e.path;
    File infoFile = File("$path/info.json");
    String infoString = await infoFile.readAsString();
    Map info = json.decode(infoString);
    data.add(info);
  }
  return data;
}