我是 flutter 和 firebase 的新手,我正在尝试构建一个应用程序,如果两个用户的“友谊”与我们在 Facebook 上看到的相似,那么他们就会相互显示帖子,
但是,当我尝试使用以下逻辑检查文档时:
b
ool friendship =false;
checkConnection(String target) async{
await FirebaseFirestore.instance.collection("users").doc(loggedUser.phoneNumber).collection("friendship").where("phoneNumber", isEqualTo: target).get().then((value) {
if(value.docs.first.exists)
friendship=true;
else
friendship=false;
});
}
<块引用>
然后使用streambuilder显示帖子
StreamBuilder(
stream: FirebaseFirestore.instance.collection("posts").snapshots(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return snapshot.data.docs.length == 0
? noPosts()
: ListView.builder(
itemCount: snapshot.data.docs.length,
itemBuilder: (context, index) {
DocumentSnapshot currentDoc = snapshot.data.docs[index];
checkConnection(currentDoc["by"]);
friendship?singlePostWidget(currentDoc["by"],currentDoc["context"]):SizedBox();
});
}
我得到的错误是:
<块引用>E/flutter (15767): [ERROR:flutter/shell/common/shell.cc(242)] Dart
未处理的异常:错误状态:无元素,堆栈跟踪:#0
List.first (dart:core-patch/growable_array.dart:332:5) E/flutter
(15767):#1 _CommunityState.checkConnection。
(包:connect/Screens/Account/Community/Community.dart:119:21)
E/flutter (15767):#2 _RootZone.runUnary
(dart:async/zone.dart:1612:54) E/flutter (15767): #3
_FutureListener.handleValue (dart:async/future_impl.dart:152:18) E/flutter (15767): #4
Future._propagateToListeners.handleValueCallback
(dart:async/future_impl.dart:704:45) E/flutter (15767): #5
Future._propagateToListeners (dart:async/future_impl.dart:733:32)
E/flutter (15767):#6 Future._completeWithValue
(dart:async/future_impl.dart:539:5) E/flutter (15767): #7
_completeOnAsyncReturn (dart:async-patch/async_patch.dart:254:13) E/flutter (15767): #8 Query.get
(包:cloud_firestore/src/query.dart)E/flutter(15767):
E/颤振(15767):
答案 0 :(得分:0)
不要同时使用 await
和 then
。从第一个代码块中删除 await。
await 用于中断流程,直到异步方法完成。然而, then 不会中断流程(意味着将执行下一条指令),而是使您能够在异步方法完成时运行代码。