Flutter中如何实现两条记录互存对方ID?批量操作ID为空问题
问题分析
你的代码存在两个核心问题,导致多组处理时出现ID为空的情况:
- 异步执行顺序不保证:两个
add操作是并行执行的,第二个add的whenComplete只会等待自身完成,但第一个add可能还没执行完,此时idRel1还未被赋值,执行update时就会传入空值。 - 全局变量冲突:如果用全局变量存储
idRel1、idRel2,同时处理多组记录时,后一组的操作会覆盖前一组的变量值,导致更新时用了错误的ID。
修复方案
把每组记录的创建和更新逻辑封装成独立的异步函数,用async/await严格控制执行顺序,同时使用局部变量避免多组间的变量冲突:
Future<void> createMutualRelations(String id, String room, String rel) async { try { // 先创建第一条记录并获取ID final doc1 = await collectionReferenceRel.add({ 'idRoom': id, 'room': rel, 'rel': room, 'id': '', }); final idRel1 = doc1.id; // 再创建第二条记录并获取ID final doc2 = await collectionReferenceRel.add({ 'idRoom': id, 'room': room, 'rel': rel, 'id': '', }); final idRel2 = doc2.id; // 并行执行两条更新操作,提升效率 await Future.wait([ collectionReferenceRel.doc(idRel1).update({'id': idRel2}), collectionReferenceRel.doc(idRel2).update({'id': idRel1}), ]); } catch (error) { CustomFullScreenDialog.cancelDialog(); CustomSnackBar.showSnackBar( context: Get.context, title: 'Error', message: 'Something went wrong', backgroundColor: Colors.green, ); } }
多组处理方式
处理多组记录时,可通过Future.wait批量执行,各组流程完全独立不会互相干扰:
// 示例:批量处理多组关联数据 final List<Map<String, String>> relationGroups = [ {'id': 'room_001', 'room': 'groupA', 'rel': 'groupB'}, {'id': 'room_002', 'room': 'groupC', 'rel': 'groupD'}, // 更多组数据... ]; await Future.wait( relationGroups.map((group) => createMutualRelations( group['id']!, group['room']!, group['rel']!, )), );
内容的提问来源于stack exchange,提问作者JoseO
相关产品推荐
相关产品推荐

