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

Flutter中Firestore操作的.then代码失效问题求助

解决Firestore else分支中.then代码失效无法跳转的问题

问题原因

你代码里的else分支同时使用了await和.then(),这两种Dart异步处理方式混合会导致.then()被编译器判定为冗余代码,从而呈现灰色失效状态,无法执行内部的跳转逻辑。

解决方案

提供两种规范的写法任选其一:

方案1:移除await,仅使用.then()

直接利用Firestore add()返回的Future对象,通过.then()处理完成后的跳转:

} else {
  Firestore.instance.collection('post').add({
    'contents': textEditingController.text,
    'displayName': widget.user.displayName,
    'email': widget.user.email,
    'photoUrl': 'https://firebasestorage.googleapis.com/v0/b/woonsancommunity2-c95f8.appspot.com/o/post%2FNo%20IMG.001.png?alt=media&token=47a39955-39a0-447f-8846-d89149f40ee3',
    'userPhotoUrl': widget.user.photoUrl,
  }).then(() {
    Navigator.push(
      context, 
      MaterialPageRoute(builder:(context) => HomePage(widget.user)),
    );
  });
}

方案2:统一使用await写法(推荐)

用await等待上传完成后,直接执行跳转逻辑,这种写法更符合Dart异步代码的可读性要求:

} else {
  await Firestore.instance.collection('post').add({
    'contents': textEditingController.text,
    'displayName': widget.user.displayName,
    'email': widget.user.email,
    'photoUrl': 'https://firebasestorage.googleapis.com/v0/b/woonsancommunity2-c95f8.appspot.com/o/post%2FNo%20IMG.001.png?alt=media&token=47a39955-39a0-447f-8846-d89149f40ee3',
    'userPhotoUrl': widget.user.photoUrl,
  });
  Navigator.push(
    context, 
    MaterialPageRoute(builder:(context) => HomePage(widget.user)),
  );
}

注意事项

尽量避免在同一异步流程中混合await和.then()写法,这会降低代码可读性,还可能引发难以排查的异步逻辑问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:35:26