参数类型“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 =&gt; await getNewsItem(id) 并没有明确告诉 dart 它的类型。所以 dart 只是识别 async 关键字,但没有更进一步,因此导致 dart 认为该匿名函数的返回类型是 Future&lt;dynamic&gt; 使用 map 函数上的 操作数通知 map 函数期望的类型,因此 dart编译器可以识别正确的类型。但正如我所说,我对此不是 100% 确定的。如果我的回答解决了您的问题,那么接受正确答案对我很有帮助

以上是关于参数类型“Iterable<Future<dynamic>>”不能分配给参数类型“Iterable<Future<news_item>>”的主要内容,如果未能解决你的问题,请参考以下文章

获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值'

给定传递给它的参数类型,如何确定函数参数的类型?

参数类型“Type”不能分配给参数类型“FirebaseUser”

类型提示,其中一个参数是另一个参数的类型

参数类型“对象?”不能分配给参数类型'String'最新版本

Python参数类型以及常见的坑