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

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

我有一个使用firestore数据库进行登录的应用程序,并且我想进行自动登录,因此我在数据库中进行了 bool(boolean) 设置并将其设置为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);
    }
  }

最佳答案

您不必使用 bool(boolean) 值来检查用户是否已登录。 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();
                  },
                )
              ],
            );
          });
    });
  }

关于firebase - 如何调用功能ASA应用程序在运行中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62527950/

相关文章:

java - 如何解析所有子字段并在 Firebase 数据库中找到我需要的内容?

flutter - setState 函数不更新有状态小部件下的图像

google-maps - 我们可以在 Flutter 的 Google map 上显示一些动态文本和标记吗?

flutter - 在 Dart 中抛出异常的性能成本是多少?

flutter - 具有固定页眉的双向滚动

javascript - 在 Firebase 中写入数据后读取数据

Firebase 仅部署 firebase.json

javascript - Cloud Functions for Firebase - 创建新用户时写入数据库

angular - 谁拥有 Angular Dart 中的 TemplateRef 刷新周期?

unit-testing - Flutter/Dart 在单元测试中等待几秒钟