【发布时间】:2020-05-01 18:01:36
【问题描述】:
我没有在用户登录或退出时使用Navigator.push 来推动用户,而是使用流来监听登录和退出事件。
StreamProvider<FirebaseUser>.value(
value: FirebaseAuth.instance.onAuthStateChanged,
)
它非常适合主路由,因为它会在用户仍然经过身份验证时立即处理登录用户。
Consumer<FirebaseUser>(
builder: (_, user, __) {
final isLoggedIn = user != null;
return MaterialApp(
home: isLoggedIn ? HomePage() : AuthPage(),
// ...
);
},
);
但是,这仅适用于回家路线。例如,如果用户随后导航到设置页面,在该页面中单击按钮退出,则不会以编程方式退出并再次跳转到身份验证屏幕。我要么不得不说Navigator.of(context).pushNamedAndRemoveUntil('/auth', (_) => false),要么得到一个关于user 为空的错误。
这是有道理的。我只是在寻找可能的另一种方式,当他们退出时,我不必自己进行任何堆栈管理。
我通过将builder 属性添加到MaterialApp 来接近
builder: (_, widget) {
return isLoggedIn ? widget : AuthPage();
},
在我未经身份验证后,这成功地将我移至身份验证页面,但事实证明,widget 实际上是导航器。这意味着当我回到 AuthPage 时,我无法调用任何依赖于父导航器的东西。
【问题讨论】:
-
用
Consumer包裹你的设置屏幕,就像你在第一个屏幕上所做的那样看起来不适合你?我的意思是在 SettingPage.dart 中是这样的:isLoggedIn ? SettingPage() : AuthPage() -
嗨,LoVe,这是一种方法,但我必须对每条路线都这样做,不是吗?假设我有一个关于页面或验证电子邮件页面等。
标签: flutter