问题描述
我有此代码:
List<Widget> _elementsHere = _locationsRegister
.map((e) => ShowingLocation(
num: e.num,
name: e.name,
icon: e.icon,
))
.toList();
我已指定 List< Widget>
,但是如果我在控制台中打印 _elementsHere.runtimeType.toString()
,则可以看到 List< ShowingLocation>
.实际上,如果我添加以下代码:
I have specified List<Widget>
, but if I print _elementsHere.runtimeType.toString()
in console, I can see List<ShowingLocation>
. In fact if I add this code:
_elementsHere.insert(0, Text('hello'));
我收到错误消息,尽管它是一个小部件,但 Text
不是 ShowingLocation
的子类型.
I receive error that Text
isn't a subtype of ShowingLocation
, despite it's a Widget.
我希望 _elementsHere
作为 List< Widget>
,而不是 List< ShowingLocation>
.
推荐答案
这可以通过在 map
函数的generics字段中指定对象类型来解决.由于未指定类型,因此假定它是 ShowingLocation
的可迭代对象.
This can be solved by specifying the object type in the generics field of the map
function. Since you're not specifying the type, it's being assumed to be an iterable of ShowingLocation
.
相反,请执行以下操作:
Do this instead:
List<Widget> _elementsHere = _locationsRegister
.map<Widget>((e) => ShowingLocation(
num: e.num,
name: e.name,
icon: e.icon,
))
.toList();
这篇关于在列表中添加相同基类的两个派生类时发生类型错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!