参数类型“Iterable<Future<dynamic>>”不能分配给参数类型“Iterable<Future<news_item>>”
Posted
技术标签:
【中文标题】参数类型“Iterable<Future<dynamic>>”不能分配给参数类型“Iterable<Future<news_item>>”【英文标题】:The argument type 'Iterable<Future<dynamic>>' can't be assigned to the parameter type 'Iterable<Future<news_item>>' 【发布时间】:2021-11-23 00:14:41 【问题描述】:在代码中,我存储了一个 api 的结果,该 api 与另一个 api 合作以给出结果。 我得到了想要的结果,但是当我尝试将该结果存储在一个名为 newsitem 的列表中时,我得到了这个错误.... news_item是json数据的模型类。
class _HomePageState extends State<HomePage>
var stories = [news_item];
@override
void initState()
super.initState();
getNewsList();
getNewsList() async
final newsList = await getHotNewsIds()
.then((ids) => ids.take(15).map((id) async => await getNewsItem(id)));
print(newsList);
List<news_item> newsitem = await Future.wait(newsList);
【问题讨论】:
【参考方案1】:我无法重现您的错误。
你可以尝试改变吗
final newsList = ...
到
final List<Future<news_item>> newsList = ...
那它告诉你什么?
对不起,我没有足够的声誉来发表评论
编辑:您也可以尝试使用以下地图功能:
.map<Future<news_item>>(...
在某些地方,dart 失去了计算所需类型的能力,但是如果没有您正在使用的函数的定义(例如 getNewsItem()),很难判断这种情况发生在哪里。
【讨论】:
iosonntag 非常感谢您在使用地图功能后解决了问题。您能否向我解释一下那里出了什么问题,以便我以后小心。 我不是 100% 确定,但猜测使用这个匿名函数(id) async => await getNewsItem(id)
并没有明确告诉 dart 它的类型。所以 dart 只是识别 async 关键字,但没有更进一步,因此导致 dart 认为该匿名函数的返回类型是 Future<dynamic>
使用 map 函数上的 操作数通知 map 函数期望的类型,因此 dart编译器可以识别正确的类型。但正如我所说,我对此不是 100% 确定的。如果我的回答解决了您的问题,那么接受正确答案对我很有帮助以上是关于参数类型“Iterable<Future<dynamic>>”不能分配给参数类型“Iterable<Future<news_item>>”的主要内容,如果未能解决你的问题,请参考以下文章
获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值'
参数类型“Type”不能分配给参数类型“FirebaseUser”