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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:50:18