Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flatter | Firebase用户认证&;配置文件创建_Firebase_Flutter_Authentication_Firebase Authentication_Backend - Fatal编程技术网

Flatter | Firebase用户认证&;配置文件创建

Flatter | Firebase用户认证&;配置文件创建,firebase,flutter,authentication,firebase-authentication,backend,Firebase,Flutter,Authentication,Firebase Authentication,Backend,我是Flatter/Firebase的新手,我想编写一个应用程序,用户可以登录/注册,然后他需要创建一个个人资料,其中包含他的姓名、年龄等信息。。。只有创建了个人资料,他才能继续查看应用程序的“主要部分” 我已经用一个有效的登录/注册页面实现了Firebase身份验证,但我现在的问题是,如何最有效地创建配置文件 当时我在这里自己创建了这个方法: Future checkUserProfile() async{ // get snapshot from document final snap

我是Flatter/Firebase的新手,我想编写一个应用程序,用户可以登录/注册,然后他需要创建一个个人资料,其中包含他的姓名、年龄等信息。。。只有创建了个人资料,他才能继续查看应用程序的“主要部分”

我已经用一个有效的登录/注册页面实现了Firebase身份验证,但我现在的问题是,如何最有效地创建配置文件

当时我在这里自己创建了这个方法:

  Future checkUserProfile() async{

// get snapshot from document
final snapShot = await Firestore.instance.collection('profiles').document(uid).get();

if(snapShot == null || !snapShot.exists){

  User.gotProfile = false;

} else {

  User.gotProfile = true;

}
此方法检查具有Firebase Auth user UID的用户配置文件是否已经存在,如果不存在,用户将被发送到“配置文件页面”,FutureBuilder将执行上述方法,如果已经存在,他将看到应用程序的主要部分


正如我已经说过的,我自己尝试过,我想问这是否已经是一个很好的实现,或者是否有更简单更好的方法来实现它?

是的,这是一个很好的实现。在我的应用程序中,我有像你一样的检查用户方法。下面的方法是一个示例。当用户未注册时,他将转发到RegisterPage,否则他将转发到主页

checkUserAlreadyExists(FirebaseUser user) async {
    final userData = await Firestore.instance.collection('users').document(user.uid).get();
    if (userData == null || !userData.exists) {
      setState(() {
        Navigator.pushAndRemoveUntil(context,
            MaterialPageRoute(builder: (BuildContext context) => RegisterPage()), ModalRoute.withName('/'));
      });
    } else {
      setState(() {
        Navigator.pushAndRemoveUntil(context,
            MaterialPageRoute(builder: (BuildContext context) => MainPage()), ModalRoute.withName('/'));
      });
    }
  }

啊,好吧,你已经在函数中做了。我为它创建了一个额外的小部件,但它仍然应该是一样的。非常感谢分享!是的,完全没有问题,欢迎:)你能接受答案吗,或者我能帮你解决其他问题吗?