Flutter - Как восстановить мою страницу, когда пользователь входит в систему с помощью Firebase? - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь скрыть Container в своем приложении, когда пользователь входит в систему, но мой пользовательский интерфейс не изменится, даже если я использую onAuthStateChanged или setState()

Я использую StreamBuilder в моем main.dart, и я использую зависимость, аналогичную гамбургер-меню (https://pub.dev/packages/kf_drawer), которое передает переменную, которая определяет Visibility моего Container

 return MaterialApp(
      home: StreamBuilder(
        stream: FirebaseAuth.instance.onAuthStateChanged,
        builder: (_, snap) {
          if (snap.connectionState == ConnectionState.active) {
            if (snap.data != null) {
              return DrawerMenu(firebaseUser: snap.data, visibleLogin: false);
            } else {
              return DrawerMenu(firebaseUser: null, visibleLogin: true);
            }
          } else {
            return CircularProgressIndicator();
          }
        },
      ),
    );

Это мой код, в котором пользователь firebase сначала переходит к DrawerMenu(), а затем к моим Home(),

KFDrawerItem.initWithPage(
          text: Text(
            'Home',
            style: TextStyle(color: Colors.white),
          ),
          icon: Icon(Icons.settings, color: Colors.white),
          page: Home(
            firebaseUser: widget.firebaseUser,
            visibleLogin: widget.visibleLogin,
          ),
        ),

Это код для моего Container, однако мой пользовательский интерфейс не будет обновляться, как только мой пользователь входит в систему, а только когда я просматриваю другие страницы в своем приложении, а также состояние приложения не сохраняется, когда я повторно открываю свое приложение после выхода из него.

//Simplified code for example purposes
 Widget login(bool visibleLogin) {
    return Visibility(
      visible: visibleLogin,
      child: Align(
        alignment: Alignment.bottomCenter,
        child: Container(),
      ),
    );
  }

Я хочу добиться чего-то вроде этого, нижний логин Container исчезает, как только пользователь входит в систему.

ПЕРЕД ВХОДОМ - https://i.stack.imgur.com/BKfby.png

ПОСЛЕ ВХОДА - https://i.stack.imgur.com/5zMHB.png

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

создать StreamSubscription из FirebaseAuth.instance.onAuthStateChanged в функции initState() внутри DrawerMenu до setState((){}) экрана DrawerMenu в зависимости от состояния пользователя; и удалите StreamBuilder из MaterialApp

0 голосов
/ 16 июня 2020

Что-то может быть не так с вашим потоком, вы уверены, что получаете поток, реагирующий на изменение, если поток в порядке, тогда вы можете посмотреть в свой гамбургер, он может как-то не работать propper.

...