Flutter中如何将不同数组元素的服务列表合并为单个列表
问题分析与解决方案
你的代码核心问题是return语句放在了外层for循环内部,导致程序遍历第一个multiServicesModel元素后就直接返回结果,后续元素的services完全没被处理,合并后的列表自然不完整。
修正后的基础写法
把return移到外层循环外面,确保所有元素都遍历完成后再返回最终列表:
List<PriceServicesModel> get selectedServices { List<PriceServicesModel> list = []; for (var element in multiServicesModel) { // 遍历当前元素的所有services并添加到列表 for (var service in element.services) { list.add(service); // 也可以用 list = [...list, service]; 但add性能更优 } } // 所有元素处理完后再返回 return list; }
更简洁的Dart风格写法
Dart提供了更优雅的集合操作方法,不用嵌套循环就能实现需求:
方法1:使用expand展开集合
expand会将每个元素的services列表展开为单个元素,最后转成List:
List<PriceServicesModel> get selectedServices { return multiServicesModel.expand((element) => element.services).toList(); }
方法2:使用fold累加合并
fold从初始空列表开始,逐个将每个元素的services合并到结果列表中:
List<PriceServicesModel> get selectedServices { return multiServicesModel.fold([], (resultList, element) => [...resultList, ...element.services]); }
内容的提问来源于stack exchange,提问作者Apex_MAN
相关产品推荐
相关产品推荐

