首页 > 解决方案 > 登录 Firebase/Flutter

问题描述

我创建了一个小部件来选择要渲染LoginScreen()HomeScreen()调用的页面Wrapper(),这是代码:

class _WrapperState extends State<Wrapper> {

  @override
  void initState() {
    super.initState();
    var auth = FirebaseAuth.instance;
    auth.onAuthStateChanged.listen((user) {
      if (user != null) {
        print("user is logged in");
        Navigator.of(context).pushReplacementNamed(HomeScreen.routeName);
      } else {
        print("user is not logged in");
         Navigator.of(context).pushReplacementNamed(LoginScreen.routeName);
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold();
  }
}

运行signOut()函数时抛出的错误:

Error:  The method 'findAncestorStateOfType' was called on nullWrapper widget returned null

标签: firebaseflutterdartfirebase-authentication

解决方案


您不必做所有这些,firebase 身份验证可以处理登录并保持用户登录。在生命周期的第一个方法中initState,您可以执行以下操作:

  @override
  void initState() {
    super.initState();
    var auth = FirebaseAuth.instance;
    auth.onAuthStateChanged.listen((user) {
      if (user != null) {
        print("user is logged in");
        //navigate to home page using Navigator Widget
      } else {
        print("user is not logged in");
         //navigate to sign in page using Navigator Widget
      }
    });
  }

推荐阅读