Flutter toList() 正在制作<dynamic>一个类型的列表



我正在尝试呈现一个小部件列表。为此,我创建了一个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声明为ListList<SubFund>
  • 显式地给map一个类型参数