firebase - 如何处理 Firebase 登录作为首次访问
问题描述
我正在编写一个集成 Firebase 身份验证的 Flutter 应用程序。
问题
我想以最好和最优化的方式集成身份验证检查用户是否在应用程序启动时通过身份验证。如果用户通过身份验证,则应用程序打开正常的主页,否则显示身份验证页面。身份验证后,应用程序应将用户重定向到正常主页。由于显而易见的原因,用户不能点击后退按钮并返回身份验证页面。
到目前为止我所做的
目前,应用程序检查main()
用户是否已通过身份验证,如果是,它会创建一个MaterialApp
带有 ashome
的应用程序主页。在这种情况下,'/'
应用程序的主页就是主页。如果不是,应用程序会创建一个MaterialApp
带有 ashome
的身份验证屏幕。但是,在这种情况下,'/'
是欢迎屏幕,所以我不能使用
Navigator.of(context).popUntil(ModalRoute.withName('/'))
(事实上,这恰好是非常必要和有用的),因为'/'
它不是主页,而且,用户可以点击后退按钮并返回欢迎屏幕。
问题
我失去了什么?我完全错了,有一种完全不同的方式来做我想做的事,还是基础是正确的?如果是这样,我该如何实现我想要的?
提前致谢。
解决方案
您正在寻找Navigator.pushReplacement
或Navigator.pushReplacementNamed
。
https://docs.flutter.io/flutter/widgets/Navigator-class.html https://docs.flutter.io/flutter/widgets/Navigator/pushReplacement.html https://docs.flutter.io/flutter/小部件/导航器/pushReplacementNamed.html
这是一个快速示例代码。
class FirstScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: [
Text("First screen"),
RaisedButton(
child: Text("Go to second screen"),
onPressed: () => _goToSecondScreen(context),
),
],
);
}
_goToSecondScreen(context) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => SecondScreen()));
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: [
Text("Second screen"),
RaisedButton(
child: Text("Go to first screen"),
onPressed: () => _goToFirstScreen(context),
),
],
);
}
_goToFirstScreen(context) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => FirstScreen()));
}
}
推荐阅读
- python - 将多列与另一列进行比较时立即选择更小/更大的值
- r - 多列汇总
- java - 将类的对象存储为循环内的 HashMap 的值
- ios - 加载视图控制器后,模糊视图背景变为不透明
- phpstorm - PhpStorm 协议处理程序直接从无法在 Mac 上打开文件的 URL 打开文件
- c# - Asp.net 样板中的 Elsa 工作流集成
- c++ - C++17 找到函数的确切参数并传递给模板函数
- c# - 在 C# .Net Core 中管理增量计数器的最佳方法
- php - 如何添加送货电话号码 paypal order v2 api
- python - 添加字母不起作用 - 请让我知道我哪里出错了