我正在尝试呈现一个小部件列表。为此,我创建了一个RowDataEntry对象列表,如下所示:
class RowDataEntry {
final Map<String, dynamic> values;
RowDataEntry(this.values);
}
然后我想实例化这样的条目列表:
final List<RowDataEntry> data = args['data'].subFunds.map((subFund) {
final name = subFund.parameters["subFundName"];
return RowDataEntry({"fundName": name, "status": Status('pass')});
}).toList();
然而;toList(("将列表转换为dynamic类型的列表,而不是RowDataEntry类型的列表。
我试过选角,但没能成功。如果有人能告诉我哪里出了问题,那就太好了。
谢谢。
编辑==========================
我认为问题出在args对象上。它看起来像这样:
final Map<String, dynamic> args = ModalRoute.of(context).settings.arguments;
由于args['data']
是声明类型dynamic
,因此在编译时没有关于args['data'].subFunds
的类型信息。因此,编译器无法推断map
甚至具有类型参数,更不用说类型参数应该是RowDataEntry
了。
要获得List<RowDataEntry>
,您需要在某个时刻添加类型信息。最好的一点可能是args['data']
本身的类别:
(args['data'] as SomeClass).subFunds.map( /* ... */ ).toList();
据推测,该类将subFunds
声明为类型List<SubFund>
的属性,因此Dart可以推断lambda参数的类型和map
的类型参数。
修复类型推断的其他选项包括:
- 将
args['data'].subFunds
声明为List
或List<SubFund>
- 显式地给
map
一个类型参数