onAuthStateChanged вызывается слишком много раз и вызывает перестройку верхнего виджета - PullRequest
0 голосов
/ 22 апреля 2019

Я использую flutter с аутентификацией firebase и пытаюсь использовать streamBuilder с onAuthStateChanged от Firebase Auth.

Если пользователь вошел в систему, я возвращаю homeScreen, а в других случаях signInScreen.Все работает отлично, но когда я добавляю print ('') в streambuilder (как раз перед if, например), я вижу, что мой streamBuilder вызывается слишком много раз, например, когда я нажимаю на новый экран, когда я выскакиваюэкран ... и т. д., даже если на этих экранах нет данных (только пустой контейнер ()).По крайней мере onAuthStateChanged вызывается дважды любым моим действием (push, pop ...) с состоянием connection.waiting и connection.active.

Из-за этого мой homeScreen перестраивается каждый раз, что означает, что все мое приложениекаждый раз перестраивается.

Код решения:

Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
        stream: userBloc.currentUser.onStateChange(),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return HomeScreen();
          } else {
            return SignInScreen();
          }
        },
      ),
    );
  }

Моя главная цель - заставить streamBuilder перестраивать виджет только в случае изменения snapshot.hasData , а не когда onAuthStateChanged получает что-то бесполезное и не нуждается в перестройке всего моего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...