Closed. This question needs
details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息,并通过
editing this post阐明问题。
在6个月前关闭。
Improve this question
在获得结果之前,请问我如何正确执行此操作,而不会出现轻微的空错误。我正在尝试在检查用户数据是否存在之后检查快照是否存在。
final user = Provider.of<UserProvider>(context);
return StreamBuilder<DocumentSnapshot>(
stream: Firestore.instance.collection("users")
.document(user.user.uid)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Center(child: Text("${snapshot.error.toString()}"));
} else if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(backgroundColor: appOrange,));
}
else if (snapshot.hasData) {
return StreamBuilder<DocumentSnapshot>(
stream: Firestore.instance.collection("sports").document(
user.user.uid).snapshots(),
builder: (context, snapshots) {
if(!snapshots.data.exists){
return Scaffold(
appBar: AppBar(
),
body: Text("there is no data for you ye, lets create one"),
);
}else if(snapshots.hasError){
return Scaffold(
appBar: AppBar(
),
body: Text("Error")
);
}else if(!snapshots. hasData){
return Center(
child: CircularProgressIndicator(backgroundColor: appOrange,));
}else if(snapshots.hasData){
return Text("Welcome to the world");
}
}
);
}
}
);
}
}
使用StreamBuilder
时,请使用connectionState
,因为它为您提供了更多选择来处理每个阶段中数据的变化:
active
:
Connected to an active asynchronous computation. For example, a Stream that has returned at least one value, but is not yet done.
done
:
Connected to a terminated asynchronous computation.
none
:
Not currently connected to any asynchronous computation. For example, a FutureBuilder whose FutureBuilder.future is null.
waiting
:
Connected to an asynchronous computation and awaiting interaction.
然后,您可以执行以下操作:
if (snapshot.connectionState == ConnectionState.done) {
//terminated
}
https://api.flutter.dev/flutter/widgets/ConnectionState-class.html
我是一名优秀的程序员,十分优秀!