假设我有带有4个选项卡的主页。其中一个选项卡是一个带有Firebase登录的登录页面,另外3个选项卡需要知道用户是登录还是来宾。
下面是“状态”主页的代码。
Widget build(BuildContext context) {
FirebaseAuth.instance.onAuthStateChanged.listen((FirebaseUser user) {
currentUser = user;
});
return Scaffold(
appBar: AppBar(
bottom: TabBar(
isScrollable: true,
tabs: allTabs,
controller: _tabController,
),
title: Text(
"app title",
),
),
body: TabBarView(
children: <Widget>[
ItemsList(currentUser),
CategoriesList(),
currentUser == null ? LoginPage() : ProfileWidget(),
NewsfeedWidget(currentUser ),
ItemsList(currentUser , showOnlyFav),
AboutUs(),
],
controller: _tabController,
),
);
}问题:
即使我成功地从登录页面登录,其他选项卡也没有反映当前用户。currentUser值始终为空。
当有登录/注销时,我应该如何使登录细节即时更新所有页面?
更新:我已经尝试过将TabBarView包装在StreamBuilder中。但是仍然是一样的,而且页面也经常刷新。
发布于 2019-01-25 18:32:16
您可以根据来自StreamBuilder的流将当前代码包装在FirebaseAuth中。这样,无论何时用户登录状态发生变化,您的布局都可以访问用户:
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
bottom: TabBar(
isScrollable: true,
tabs: allTabs,
controller: _tabController,
),
title: Text(
"app title",
),
),
body:
StreamBuilder<FirebaseUser>(
stream: FirebaseAuth.instance.onAuthStateChanged,
builder: (ctx, snapshot) {
return TabBarView(
children: <Widget>[
ItemsList(snapshot.data),
CategoriesList(),
snapshot.data == null ? LoginPage() : ProfileWidget(),
NewsfeedWidget(snapshot.data),
ItemsList(snapshot.data , showOnlyFav),
AboutUs(),
],
controller: _tabController,
),}
);
}https://stackoverflow.com/questions/54369803
复制相似问题