How to get the UID of currentUser in firebase in flutter?

After splashscreen I check if the currentUser is null, if not I redirect it to my Home, the problem is that the UID of this user is null, I would like to know how do I get this UID from currentUser.

I used currentUser so it does not stay logging in whenever I close the app.

Verification code

FirebaseAuth.instance.currentUser != null ? HomeScreen() : Login(),
Author: Edit's Vfx, 2020-01-31

1 answers

To get the UID of the current user do:

FirebaseUser user = await _firebaseAuth.currentUser();
return user?.uid;

I leave here also a class I created for firebase implementation in my application

import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import '../classes/defaultResponse.dart';
import '../classes/user.dart';

class FirebaseConnection{
  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

  Future<DefaultResponse> createUserWithEmailAndPassword(String email, String password) async {
    try{
      AuthResult request = await _firebaseAuth.createUserWithEmailAndPassword(email: email, password: password);
      return DefaultResponse(code: 'OK', value: request.user.uid);
    } catch(error) {
      var errorMessage;
        switch (error.code) {
        case "ERROR_WEAK_PASSWORD":
          errorMessage = "Senha fraca!";
          return DefaultResponse(code: 'ERROR', value: errorMessage, addtionalInfo: "A senha tem que ter mais de 6 digitos!");
        case "ERROR_INVALID_EMAIL":
          errorMessage = "O email informado não parece ser um email!";
          return DefaultResponse(code: 'ERROR', value: errorMessage, addtionalInfo: "Exemplo de email: [email protected]");
        case "ERROR_EMAIL_ALREADY_IN_USE":
          errorMessage = "O email já está sendo usado por outro usuário.";
          return DefaultResponse(code: 'ERROR', value: errorMessage);
        default:
          errorMessage = "Um erro desconhecido ocorreu.";
          return DefaultResponse(code: 'ERROR', value: errorMessage);
      }
    }
  }

  Future<DefaultResponse> signInWithEmailAndPassword(String email, String password) async {
    try{
      AuthResult request = await _firebaseAuth.signInWithEmailAndPassword(email: email, password: password);
      return DefaultResponse(code: 'OK', value: request.user.uid);
    } catch(error) {
      var errorMessage;
      switch (error.code) {
        case "ERROR_INVALID_EMAIL":
          errorMessage = "O email informado não parece ser um email!";
          return DefaultResponse(code: 'ERROR', value: errorMessage);
        case "ERROR_WRONG_PASSWORD":
          errorMessage = "Senha errada!";
          return DefaultResponse(code: 'ERROR', value: errorMessage);
        case "ERROR_USER_NOT_FOUND":
          errorMessage = "O usuário não existe.";
          return DefaultResponse(code: 'ERROR', value: errorMessage);
        case "ERROR_USER_DISABLED":
          errorMessage = "Esse usuário foi desabilitado.";
          return DefaultResponse(code: 'ERROR', value: errorMessage);
        case "ERROR_TOO_MANY_REQUESTS":
          errorMessage = "Muitas requisições. Tente mais tarde.";
          return DefaultResponse(code: 'ERROR', value: errorMessage);
        case "ERROR_OPERATION_NOT_ALLOWED":
          errorMessage = "Login com email e senha não está habilitado.";
          return DefaultResponse(code: 'ERROR', value: errorMessage);
        default:
          errorMessage = "Um erro desconhecido ocorreu.";
          return DefaultResponse(code: 'ERROR', value: errorMessage);
      }
    }    
  }

  Future<String> currentUserUID() async {
    FirebaseUser user = await _firebaseAuth.currentUser();
    return user?.uid;
  }

  Future<FirebaseUser> currentUserObject() async {
    FirebaseUser user = await _firebaseAuth.currentUser();
    return user;
  }

  Future<void> signOut() async {
    return _firebaseAuth.signOut();
  }  

  Future<User> getCurrentUserObject() async {
    User user = User();
    FirebaseUser objeto = await currentUserObject();

    if (objeto!=null){
      DocumentSnapshot document = await Firestore.instance.collection("users").document(objeto.uid).get();
      if (document.data != null)
        user.toClass(document.documentID, document.data);
    }

    return user;
  }  
}

It can be found in my Project example .

 3
Author: Matheus Ribeiro, 2020-01-31 17:40:56