未处理的异常:类型 'List<Widget>' 不是类型转换中类型 'Iterable<MyWidget>' 的子类型

Unhandled Exception: type 'List<Widget>' is not a subtype of type 'Iterable<MyWidget>' in type cast

迁移到 null safety 后,迁移工具将 as Iterable<SetWidget> 添加到我的代码中。但不幸的是我得到了这个错误:

Unhandled Exception: type 'List<Widget>' is not a subtype of type 'Iterable<SetWidget>' in type cast

这是代码:

  final List<Widget> _sets = [];

  Map getSets() {
    Map sets = {};
    int k = 0;
    for (SetWidget set in _sets as Iterable<SetWidget>) {
      sets.putIfAbsent(k.toString(), () => set.getMap());
      k++;
    }
    return sets;
  }

这里有什么问题?

我不知道为什么这个工具决定这样做,但如果你仔细想想,它显然会抛出一个错误。 _sets 是一个 Widget 列表,这意味着它可以包括例如一个 Column、一个 Container 和一个 SetWidget,因此它不能被转换为一个 SetWidget 可迭代对象。

getMap()SetWidgetclass中的一个方法吗?如果是,您可以将 List<Widget> 更改为 List<SetWidget> 并删除 as Iterable<SetWidget> 吗?希望这能解决您的问题。

另外,旁注,这段代码是做什么用的?您是否将列表转换为 Map<String, Function>,其中字符串只是一个索引?如果是,为什么不使用列表呢?

for (SetWidget widget in _sets)
{
  sets.add(widget.getMap)
}