You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中如何将List<List<Object>>转为List<Object>?嵌套列表扁平化求助

解决Dart中嵌套列表转扁平列表的问题

针对你的代码修改

原代码里,invoice.map((e) => e.products)返回的是Iterable<List<Product>>,转成List后就变成了List<List<Product>>,不符合你需要的返回类型。直接用expand方法就能把所有子列表的元素平铺开,修改后的代码如下:

Future<List<Product>> getproduct() async {
  final invoice = await isar.invoices.where().findAll();
  // expand会把每个invoice的products元素展开成连续的Iterable
  final p = invoice.expand((e) => e.products).toList();
  return p;
}

Dart中List<List>转List的通用方法

方法1:用expand(最简洁)

expand会遍历嵌套列表里的每个子列表,把子列表的元素展开成一个连续的Iterable,最后转成List就行:

List<List<Object>> nestedList = [/* 你的嵌套列表数据 */];
List<Object> flatList = nestedList.expand((subList) => subList).toList();

方法2:用fold累加

通过fold初始化一个空列表,逐个把每个子列表的元素添加到累加列表中:

List<List<Object>> nestedList = [/* 你的嵌套列表数据 */];
// 完整写法
List<Object> flatList = nestedList.fold([], (accumulator, subList) {
  accumulator.addAll(subList);
  return accumulator;
});
// 简写形式
List<Object> flatList = nestedList.fold([], (acc, sub) => acc..addAll(sub));

方法3:手动循环遍历

创建一个空列表,遍历每个子列表并批量添加元素,适合需要对单个元素做额外处理的场景:

List<List<Object>> nestedList = [/* 你的嵌套列表数据 */];
List<Object> flatList = [];
for (var subList in nestedList) {
  // 如果要处理单个元素,可以在这里遍历subList逐个添加
  flatList.addAll(subList);
}

内容的提问来源于stack exchange,提问作者Vinodh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:31:01