使用 `List.map` 时的类型转换问题

Type Casting Problem While Using `List.map`

我正在尝试使用 List.map 功能,但我无法让它工作。 这里我有一个 data 类型的 List<List<dynamic>> 变量,当我试图 在 data 上执行以下操作,它会抛出异常。

rows: data.map((i) {
    DataRow(
      cells: <DataCell>[
        DataCell(Text(i[0].text)),
        DataCell(Text(i[1].text)),
        DataCell(Text(i[3].text)),
      ],
    );
  }
).toList(),

以上代码抛出如下异常:

我尝试了上述 Whosebug link 上提供的不同解决方案。即

rows: data.map<DataRow>((i) {
    DataRow(
      cells: <DataCell>[
        DataCell(Text(i[0].text)),
        DataCell(Text(i[1].text)),
        DataCell(Text(i[3].text)),
      ],
    );
  }
).toList(),

或:

rows: data.map((i) {
    DataRow(
      cells: <DataCell>[
        DataCell(Text(i[0].text)),
        DataCell(Text(i[1].text)),
        DataCell(Text(i[3].text)),
      ],
    );
  }
).toList() as List<DataRow>,

或:

rows: List<DataRow>.from(data.map((i) {
    DataRow(
      cells: <DataCell>[
        DataCell(Text(i[0].text)),
        DataCell(Text(i[1].text)),
        DataCell(Text(i[3].text)),
      ],
    );
  })
).toList(),

None 似乎有效,在应用上述方法时,在某些情况下,我得到的异常与我的异常不同 在开始时提到,即在某些情况下我得到这个例外: type 'Null' is not a subtype of type 'DataRow' in type cast

如果我不使用 List.map,它会起作用。即如果我声明一个 List<DataRow> 变量然后填充它 使用 for 循环。然后就可以了。

   rows: buildItems(data),
    );
  }

  List<DataRow> buildItems(data) {
    List<DataRow> rows = [];
    for (var i in data) {
      rows.add(DataRow(cells: [
        DataCell(Text(i[0].text)),
        DataCell(Text(i[1].text)),
        DataCell(Text(i[3].text)),
      ]));
    }
    return rows;
  }

上面的代码是可以的,只是我在使用List.map.

的时候不能让它工作

您需要像这样向地图添加 return 语句

rows: data.map((i) {
    return DataRow(
      cells: <DataCell>[
        DataCell(Text(i[0].text)),
        DataCell(Text(i[1].text)),
        DataCell(Text(i[3].text)),
      ],
    );
  }
).toList(),