为什么Flutter中List的.add()方法无法将子列表添加到父级列表
问题根因
- 异步逻辑未等待:Dart的
forEach方法不支持等待异步回调执行,你在回调中写的await数据库查询逻辑不会阻塞主线程,代码会先执行循环外的print("finalVar: $finalVar"),此时所有数据库查询还未完成,自然打印空数组。你提供的控制台输出顺序也能验证该问题:finalVar的打印早于所有temporalvar的循环打印。 - 列表引用复用错误:List属于引用类型,你全程复用同一个
temporalvar实例,finalVar.add(temporalvar)仅将该实例的引用存入finalVar,后续调用temporalvar.clear()会清空该实例的内容,导致finalVar中存储的所有引用最终都指向空列表。
修复代码
将forEach替换为支持异步等待的for-in循环,每次循环创建新的临时列表,无需复用和清空:
// 注意当前所在方法需要添加async修饰 Future<void> loadData() async { for (var element in listaUniqueGrupoFito) { final valor = await ArmarCartillaDbProvider.db.getArmarCartillaPorDescripcion2('001', element); // 每次循环创建新的临时列表,不复用全局实例 final temporalvar = valor!.map((item) => item.descripcion).toList(); finalVar.add(temporalvar); print("temporalvar: $temporalvar"); } print("finalVar: $finalVar"); }
内容的提问来源于stack exchange,提问作者Kevin Montañez Huamán
相关产品推荐
相关产品推荐

