在我的 Flutter 应用程序中,我设想根据关联的 Firebase 实时数据库中的表是否已创建来路由已登录的用户。一旦有人打开应用程序,就会调用此小部件。我的第一次尝试涉及使用 StreamBuilder。在我的“authentication.dart”文件中,我有:
Widget build(BuildContext context) {
//Instance to know the authentication state.
final firebaseUser = context.watch<User>();
final referenceDatabase = FirebaseDatabase.instance;
if (firebaseUser != null) {
String userID = firebaseUser.uid;
DatabaseReference _ref = referenceDatabase.reference().child(userID);
return Scaffold(
body: StreamBuilder(
stream: _ref.onValue,
// ignore: missing_return
builder: (context, snapshot){
if(snapshot.connectionState != ConnectionState.active){
return CircularProgressIndicator();
}
else {
if (snapshot.hasData && snapshot.data.snapshot.value != null) {
print("What is it already: " +
snapshot.connectionState.toString());
return FitnessAppHomeScreen();
}
else {
return DietScreen();
}
这样做似乎带来的许多问题之一是,如果我路由到 DietScreen,并进行更改以导致快照包含数据(在我的情况下,选择饮食计划),我不认为 StreamBuilder实际上已经被处理掉了,所以一旦我做出改变,用户就会自动被路由到 FitnessAppHomeScreen。路由完成后有什么方法可以关闭 StreamBuilder 吗?或者,我应该通过 StreamBuilder 以外的其他东西进行路由吗?我只是在实际检查 Firebase 实时数据库快照中有数据的情况时遇到了麻烦(StreamBuilder 为我提供了一种在小部件中检查它的方法)。