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
相关产品推荐
相关产品推荐

