Search code examples
flutterdartiterable

Flutter Error: The argument type 'List<dynamic>' can't be assigned to the parameter type 'Iterable<Future<dynamic>>'


I'm trying multiple request in a controller.

var requests = [];
for(var url in urls){
  requests.add(http.get(Uri.parse(url.split(',')[0])));
}

var results = await Future.wait(requests as Iterable<Future>);
for(int i = 0; i < results.length; i++){
  saveData(urls[i].split(',')[1], results[i]);
}

So it give an error.

[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: type 'List' is not a subtype of type 'Iterable<Future>' in type cast


Solution

  • The Future.wait() method expects an Iterable<Future> as an argument, but you're passing a List instead. Just remove casting:

      var requests = <Future>[];
      for (var url in urls) {
        requests.add(http.get(Uri.parse(url.split(',')[0])));
      }
    
      var results = await Future.wait(requests);
    

    Or you can directly run for loop inside the argument:

      var results2 = await Future.wait([
        for (var url in urls) http.get(Uri.parse(url.split(',')[0])),
      ]);