【发布时间】:2020-02-22 04:11:41
【问题描述】:
在学习了多年的 Python 之后,我正在使用 Dart 学习绳索。 我对 Streams 有点困惑,如果有任何其他特定的解决方案可以用于我的具体情况。
我正在构建一个 API 驱动的应用程序,我需要动态填充 ListView 而无需等待所有 HTTP 调用完成。 目前我正在使用一个 Stream 来填充一个 List 并返回:
类似这样的:
var scraperList = List<Api> ();
Stream<List<Api>> get getFiles (String id) async* {
var res = await http.post('${baseUrl}/folder/list/{id}');
if (res.statusCode == 200) {
var jsonResult = jsonDecode(res.body);
jsonResult = jsonResult['content'];
List<dynamic> body = jsonResult;
List<Api> result = body.map((dynamic item) => ApiModel.apiFiles(item),).toList();
}
现在,这是我迷路的地方,因为 API 充当一种文件/文件夹存储,如果它们是“文件”,我需要产生结果,并使用文件夹的 id 重复调用并获取该文件夹中的“文件”并继续这样做,直到我递归地获取每个文件夹中的所有文件。
关键是我想继续提供该 Stream 并在结果到达时获得结果,而无需等待所有调用完成。
我现在迷失的地方是这部分
// THIS IS THE PART I NEED TO UNDERSTAND YET
for (item in result){
if (item.type == 'file'){
yield filelist.add(0, item);}
else { I NEED TO MAKE A CALL AGAIN TO THIS FUNCTION TO GET THE FOLDER CONTENT
THE CALL AGAIN }
我如何迭代这个 API,递归地获取每个文件夹中的所有文件并继续提供该 Stream? 有一个更好的方法吗? 在 python 中,有很多方法可以跨类共享列表等,但我仍然对如何在 Dart 中动态实现这一点感到困惑。
【问题讨论】: