Я использую 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 получает что-то бесполезное и не нуждается в перестройке всего моего приложения.