首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分配uid?

如何分配uid?
EN

Stack Overflow用户
提问于 2021-01-21 17:38:04
回答 2查看 44关注 0票数 0

我刚开始接触Flutter,我在Youtube上得到了一个教程,当应用程序应该发送给我用户uid时,我遇到了一个错误,因为代码在新版本的Firebase上已经过时了,即使在互联网上搜索时,我也找不到为什么firestore总是给我发送一个空的uid。感谢那些会回答我的人,我已经被屏蔽了2天了:)

翻译很抱歉,我不太会说英语,所以我用了google =)

错误来自代码“Firebase.instance.currentUser.then((”

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter_tuto/constants/chargement.dart';
import 'package:flutter_tuto/pageCrud/accueil.dart';

class Inscription extends StatefulWidget {
  final Function basculement;
  Inscription({ this.basculement });
  @override
  _InscriptionState createState() => _InscriptionState();
}

class _InscriptionState extends State<Inscription> {

  FirebaseAuth _auth = FirebaseAuth.instance;
  User courantUser;

  //Collection Utilisateur depuis firestore
  final CollectionReference collectionUtil = FirebaseFirestore.instance.collection('utilisateurs');

  String email = '';
  String pseudo = '';
  String motDePasse = '';
  String confirmeMdp = '';

  bool chargement = false;

  final _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {

    FirebaseAuth.instance.currentUser().then((User util){
      setState(() {
        this.courantUser = util;
      });
    });

    String _idUtil(){
      if(courantUser != null){
        return courantUser.uid;
      }else{
        return "pas d'utilisateurs courant";
      }
    }

    return chargement ? Chargement() : Container(
        decoration: BoxDecoration(
            image: DecorationImage(
                image: AssetImage("assets/BackgroundImage.jpg"),
                fit: BoxFit.cover
            )
        ),
        child: Scaffold(
          backgroundColor: Colors.transparent,
          body: SingleChildScrollView(
              child: Container(
                  padding: EdgeInsets.symmetric(vertical: 100.0, horizontal: 30.0),
                child: Form(
                  key: _formKey,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.stretch,
                    children: [
                      Image.asset("assets/logo.png", height: 100.0, width: 100.0),
                      SizedBox(height: 10.0),
                      Center(
                        child: Text("Créer un compte Stix pour accéder à notre appli", style: TextStyle(fontSize: 20.0, color: Colors.blueAccent[100]))
                      ),
                      SizedBox(height: 10.0),
                      TextFormField(
                        decoration: InputDecoration(
                          labelText: "Adresse Mail",
                          border: OutlineInputBorder()
                        ),
                        validator: (val) => val.isEmpty ? 'Entrez une adresse mail' : null,
                        onChanged: (val) => email = val,
                      ),
                      SizedBox(height: 10.0),
                      TextFormField(
                        decoration: InputDecoration(
                            labelText: "Pseudo",
                            border: OutlineInputBorder()
                        ),
                        validator: (val) => val.isEmpty ? 'Entrez votre pseudo' : null,
                        onChanged: (val) => pseudo = val,
                      ),
                      SizedBox(height: 10.0),
                      TextFormField(
                        decoration: InputDecoration(
                            labelText: "Mot de passe",
                            border: OutlineInputBorder()
                        ),
                        validator: (val) => val.length < 6 ? 'Votre mot de passe doit contenir au moins 6 caractères' : null,
                        onChanged: (val) => motDePasse = val,
                        obscureText: true,
                      ),
                      SizedBox(height: 10.0),
                      TextFormField(
                        decoration: InputDecoration(
                            labelText: "Confirmez le mot de passe",
                            border: OutlineInputBorder()
                        ),
                        validator: (val) => val != motDePasse ? 'Le mot de passe doit correspondre a la confirmation' : null,
                        onChanged: (val) => confirmeMdp = val,
                        obscureText: true,
                      ),
                      FlatButton(
                          onPressed: () async {
                            if (_formKey.currentState.validate()){
                              setState(() {
                                chargement = true;
                              });
                              UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: motDePasse);
                            await collectionUtil.doc(_idUtil()).set({
                              'idUtil' : _idUtil(),
                              'pseudo' : pseudo,
                              'email' : email
                            });
                            if(result == null){
                              setState(() => chargement = true);
                            }
                            }
                          },
                          color: Colors.blueAccent,
                        child: Text("S'inscrire"),
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(20.0)
                        ),
                      ),
                      OutlineButton(
                        onPressed: (){
                          widget.basculement();
                        },
                        borderSide: BorderSide(width: 2.0, color: Colors.blueAccent),
                        child: Text("Déja Inscrit ?"),
                        shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(20.0)
                        ),
                      ),
                    ],
                  )
                )
              ),
          ),
        )
    );
  }
}
EN

回答 2

Stack Overflow用户

发布于 2021-01-21 17:49:20

只需使用

代码语言:javascript
复制
 FirebaseAuth.instance.currentUser

在最近的更改中,它被更新为getter。Firebase正在将用户保存在自身之下。

您的代码将如下所示

代码语言:javascript
复制
String _idUtil(){
  var user = FirebaseAuth.instance.currentUser;
  if(user != null){
    return user.uid;
  }else{
    return "pas d'utilisateurs courant";
  }
}

如果您正在检查用户是否已登录,我会考虑使用authStateChanges

示例

代码语言:javascript
复制
@override
  void initState() {
    _firebaseAuth.authStateChanges().listen(_onAuthStateChanged);
    super.initState();
  }

Future<void> _onAuthStateChanged(User firebaseUser) async {
    if (firebaseUser != null) {
      setState((){
        _status = AuthStatus.LOGGED_IN;
      }
    } else {
      setState((){
        _status = AuthStatus.NOT_LOGGED_IN;
      }      
    }
  }
票数 0
EN

Stack Overflow用户

发布于 2021-01-21 17:58:49

代码语言:javascript
复制
Future<String> getCurrentUID() async{
    final FirebaseUser user = await _auth.currentUser();
    final String uid = user.uid;
    return uid;
  }

使用这段代码来获取uid作为返回。因为这里使用的是Future,所以async关键字是必须的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65824672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档