如何调用功能ASA应用程序在运行中运行?

时间:2020-06-23 05:33:17

标签: firebase flutter dart google-cloud-firestore firebase-authentication

我有一个在firestore数据库的帮助下进行登录的应用程序,并且我想进行自动登录,因此我在数据库中进行了布尔设置并将其设置为false,并在登录时将登录功能设置为true。 ,因此我想在应用运行时检查此人是否已经登录,是否有任何想法:)? 这是我的代码:

void getUserData() async {
    try {
      var firebaseUser = await FirebaseAuth.instance.currentUser();
      firestoreInstance
          .collection("Students")
          .document(usernameController.text)
          .get()
          .then((value) {
        setState(() {
          email = (value.data)['email'];
          password = (value.data)['password'];
          gender = (value.data)['gender'];
          loggedin = (value.data)['token'];
        });
      });
    } catch (e) {
      print(e.toString);
    }
  }

1 个答案:

答案 0 :(得分:2)

您不必使用布尔值来检查用户是否已登录。 Firebase身份验证已提供了这一功能。您可以在initState内部进行检查:

  @override
  void initState() {
    super.initState();
    FirebaseAuth.instance.currentUser().then((res) {
      print(res);
      if (res != null) {
        Navigator.pushReplacement(
          context,
          MaterialPageRoute(builder: (context) => Home(uid: res.uid)),
        );
      }
      else
      {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => SignUp()),
        );
      }
    });
  }

检查是否有当前用户,并导航到所需页面。


如果您具有不同类型的用户,则必须在数据库中标识它们。因此,请在Firebase身份验证中进行身份验证,并在数据库中使用userType字段:

  void registerToFb() {
    firebaseAuth
        .createUserWithEmailAndPassword(
            email: emailController.text, password: passwordController.text)
        .then((result) {
      firestoreInstance.collection("users").document(result.user.uid).setData({
        "email": emailController.text,
        "name": nameController.text,
        "userType" : "Students"
      }).then((res) {
        Navigator.pushReplacement(
          context,
          MaterialPageRoute(builder: (context) => Home(uid: result.user.uid)),
        );
      });
    }).catchError((err) {
      showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text("Error"),
              content: Text(err.message),
              actions: [
                FlatButton(
                  child: Text("Ok"),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                )
              ],
            );
          });
    });
  }