0

在我的 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 为我提供了一种在小部件中检查它的方法)。

4

0 回答 0