为何Dart中使用addAll拼接Future列表无法符合预期?
为什么使用
addAll无法实现预期效果? 首先要明确List.addAll()方法的核心特性:它是原地修改原列表的操作——把传入列表的元素添加到当前列表中,并且它的返回值类型是void,也就是说这个方法不会返回任何新列表,只是修改list1本身的内容。
你代码里的final appended = list1.addAll(list2);这行,appended实际拿到的是void,而Future.wait()需要接收一个Iterable<Future>类型的参数,自然会触发“表达式类型是void无法使用”的错误。
而你用[...list1, ...list2]的方式,是创建了一个全新的列表:把list1和list2的所有元素都复制到这个新列表里,新列表的类型是List<Future<void>>,完全符合Future.wait()的参数要求,因此能正常运行。
如果非要用addAll实现类似效果,可以修改成这样:
list1.addAll(list2); await Future.wait(list1);
此时list1已经包含了原两个列表的所有Future,直接传入Future.wait()即可正常工作。
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

