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

Flutter:同步多次调用异步函数时共享表单返回值的问题

解决方案:共享表单Future实现并行调用同步结果

要实现多个并行调用共享同一次表单操作的结果,核心思路是缓存当前正在进行的表单Future,让后续调用直接等待这个已存在的Future,而不是重复发起新的表单请求。

具体实现步骤:

  1. 定义缓存变量
    在你的类中添加一个成员变量,用来保存当前正在进行的表单Future:
Future<dynamic>? _pendingFormFuture;
  1. 改造异步函数
    修改弹出表单的异步函数,每次调用时先检查缓存是否存在,存在则复用,不存在则发起新请求并缓存:
Future<dynamic> showTheForm(BuildContext context) async {
  // 若已有弹出的表单,直接返回正在等待的Future
  if (_pendingFormFuture != null) {
    return _pendingFormFuture;
  }

  // 发起表单请求并缓存Future
  _pendingFormFuture = Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => const TheForm()),
  ).whenComplete(() {
    // 表单操作完成后清空缓存,确保下次调用可重新弹出表单
    _pendingFormFuture = null;
  });

  return _pendingFormFuture;
}
  1. 调用方式
    现在即使你用Future.wait并行调用多次,所有调用都会共享同一次表单的结果:
List response = await Future.wait([
  showTheForm(context),
  showTheForm(context)
]);

原理说明

Dart中的Future是一次性的异步任务载体,一旦完成就会返回固定结果。通过缓存正在进行的表单Future,后续调用无需重新发起Navigator请求,直接等待该Future完成即可,自然会拿到和第一个调用相同的返回值。whenComplete回调会在表单关闭(无论提交还是取消)后清空缓存,保证下次调用能正常弹出新表单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:20:45