【发布时间】:2019-06-19 13:20:03
【问题描述】:
假设我的主页有 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 值始终为 null。
当有登录/注销时,我应该如何使登录详细信息在所有页面上即时更新?
更新:我尝试将 TabBarView 包装在 StreamBuilder 中。但还是一样,而且页面也经常刷新。
【问题讨论】:
-
currentUser 值始终为 null。 - 在其他选项卡中,它将为 null,因为您将初始 null currentUser 传递给这些选项卡,但是当登录状态更改时,您不会'不要重新创建它们(并给它们新更新的 currentUser 值)。 我应该如何使登录详细信息即时更新... - 一种方法是将 TabBarView 包装在 StreamBuilder 小部件中并使用 FirebaseAuth.instance.onAuthStateChanged 作为其流。
-
我试过了,它使所有 hte 页面刷新多次,这看起来不太好。也无助于解决。
-
谢谢。让我试试这个。
-
@Luksprog :效果很好。谢谢。但是我是否将更新后的新值放在同一个 StatefulWidget 类的主体之外?让我们看看根据用户或访客更新浮动栏。
标签: firebase flutter firebase-authentication