Flutter报错:List<dynamic>无法赋值给Iterable<Future<dynamic>>参数
解决Dart中Future.wait的类型转换错误
错误原因
你代码里var requests = [];默认创建的是List<dynamic>,虽然List本身是Iterable的子类,但dynamic类型无法满足Future.wait要求的Iterable<Future>泛型约束,强行用as Iterable<Future>做类型转换就会触发type 'List' is not a subtype of type 'Iterable<Future>'错误。
修复方案
方案1:明确列表泛型类型
直接将requests声明为List<Future<http.Response>>(http.get返回的是Future<Response>),这样无需类型转换,Future.wait可直接接收:
import 'package:http/http.dart' as http; // 明确泛型类型,避免dynamic List<Future<http.Response>> requests = []; for(var urlStr in urls){ final url = urlStr.split(',')[0]; requests.add(http.get(Uri.parse(url))); } // 直接传入requests,不需要类型转换 var results = await Future.wait(requests); for(int i = 0; i < results.length; i++){ saveData(urls[i].split(',')[1], results[i]); }
方案2:用map直接生成Future列表(更简洁)
通过map方法直接生成Future列表,省去手动初始化和添加元素的步骤:
import 'package:http/http.dart' as http; final requests = urls.map((urlStr) { final url = urlStr.split(',')[0]; return http.get(Uri.parse(url)); }).toList(); var results = await Future.wait(requests); // 用List.generate配对url和结果,降低索引越界风险 for (final entry in List.generate(urls.length, (index) => (urls[index], results[index]))) { saveData(entry.$1.split(',')[1], entry.$2); }
额外提醒
如果urls是Map类型(你代码里用了for(var url in urls),若urls为Map则遍历的是key),要调整遍历逻辑,避免拿到错误的url值。
内容的提问来源于stack exchange,提问作者Deniz Coskun
相关产品推荐
相关产品推荐

