Flutter 颤振-同时请求多个API的最佳方式

Flutter 颤振-同时请求多个API的最佳方式,flutter,dart,future,Flutter,Dart,Future,我有两个URL,我正在使用fetchData()函数解析json Future<Iterable> fetchData() async { var response = await http.get(firstUrl); var listOne = List<Article>(); if (response.statusCode == 200) { var notesJson = json.decode(response.body); var bodyList

我有两个URL,我正在使用
fetchData()
函数解析json

Future<Iterable> fetchData() async {
var response = await http.get(firstUrl);
var listOne = List<Article>();

if (response.statusCode == 200) {
  var notesJson = json.decode(response.body);
  var bodyList = notesJson['items'];
  for (var i in bodyList) {
    listOne.add(Article.fromJson(i));
  }
}
var resp = await http.get(secondUrl);
var listTwo = List<Article>();
if (resp.statusCode == 200) {
  var notesJson = json.decode(resp.body);
  var bodyList = notesJson['items'];
  for (var i in bodyList) {
    listTwo.add(Article.fromJson(i));
  }
}

var newL = [...listOne, ...listTwo];
return newL;
}
Future fetchData()异步{
var response=wait http.get(firstUrl);
var listOne=List();
如果(response.statusCode==200){
var notesJson=json.decode(response.body);
var bodyList=notesJson['items'];
用于(主体列表中的var i){
add(Article.fromJson(i));
}
}
var resp=await http.get(secondUrl);
var listwo=List();
如果(响应状态代码==200){
var notesJson=json.decode(分别为body);
var bodyList=notesJson['items'];
用于(主体列表中的var i){
add(Article.fromJson(i));
}
}
var newL=[…列表一,…列表二];
返回newL;
}

我觉得这是多余的。我想知道这是否是正确的方法,或者我可以优化它吗?既然我在查询两个URL,我应该改用
compute()
吗?

flatter的
compute
产生了一个完整的
隔离
(Dart中类似线程的东西),而这对于只等待网络请求来说是相当耗费资源的。 令人高兴的是,Dart是基于事件循环的,因此您可以通过简单地将两个网络请求
Future
s包装在对
Future.wait的调用中,同时等待这两个请求。
有关Dart事件循环的更多信息,您可能希望查看

Future fetchData()异步{
var responses=wait Future.wait([
http.get(firstUrl),
http.get(第二个URL),
]);
返回[
…_getArticlesFromResponse(响应[0]),
…_getArticlesFromResponse(响应[1]),
];
}
列表\u getArticlesFromResponse(http.Response){
返回[
如果(response.statusCode==200)
for(json.decode(response.body)['items']中的变量i)
第1(i)条,
];
}

这给了我一个错误,参数类型“List”无法分配给参数类型“Iterable”。这是因为您必须将这些函数的返回类型http.get(firstUrl)设为future。