我将flutter与firebase身份验证一起使用,并且尝试将streamBuilder与Firebase Auth中的 onAuthStateChanged 一起使用。
如果用户已登录,则返回主屏幕,在其他情况下,则返回signInScreen。 一切都很好,但是当我在streambuilder中添加一个print('')时(例如在if之前),我可以看到我的streamBuilder被调用了太多次,例如当我按下一个新屏幕时,当我弹出时屏幕...等。即使这些屏幕中没有数据(只是一个空的Container())。我的任何一个具有connection.waiting状态和connection.active的动作(推,弹出...)至少调用过onAuthStateChanged。
因为每次都会重建homeScreen,这意味着每次都会重新构建整个应用程序。
决策代码:
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: userBloc.currentUser.onStateChange(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return HomeScreen();
} else {
return SignInScreen();
}
},
),
);
}
我的主要目标是仅在 snapshot.hasData 更改时才强制streamBuilder重建窗口小部件,而在 onAuthStateChanged 收到无用且不需要重建我的东西时则不强制整个应用程序。