首页 > 解决方案 > 如何处理 Firebase 登录作为首次访问

问题描述

我正在编写一个集成 Firebase 身份验证的 Flutter 应用程序。

问题

我想以最好和最优化的方式集成身份验证检查用户是否在应用程序启动时通过身份验证。如果用户通过身份验证,则应用程序打开正常的主页,否则显示身份验证页面。身份验证后,应用程序应将用户重定向到正常主页。由于显而易见的原因,用户不能点击后退按钮并返回身份验证页面。

到目前为止我所做的

目前,应用程序检查main()用户是否已通过身份验证,如果是,它会创建一个MaterialApp带有 ashome的应用程序主页。在这种情况下,'/'应用程序的主页就是主页。如果不是,应用程序会创建一个MaterialApp带有 ashome的身份验证屏幕。但是,在这种情况下,'/'是欢迎屏幕,所以我不能使用

Navigator.of(context).popUntil(ModalRoute.withName('/'))

(事实上​​,这恰好是非常必要和有用的),因为'/'它不是主页,而且,用户可以点击后退按钮并返回欢迎屏幕。

问题

我失去了什么?我完全错了,有一种完全不同的方式来做我想做的事,还是基础是正确的?如果是这样,我该如何实现我想要的?

提前致谢。

标签: firebasenavigationdartfirebase-authenticationflutter

解决方案


您正在寻找Navigator.pushReplacementNavigator.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()));
  }
}

推荐阅读