C'è un modo per caricare l'immagine da Firebase al progetto flutter secondo l'UID dell'utente corrente

Aug 21 2020

Voglio caricare un'immagine dal mio archivio Firebase. Ho caricato immagini come foto del profilo per utenti con il nome {users uid} .png. Quindi, quando vado alla schermata del profilo degli utenti, voglio caricare queste immagini da Firebase in base all'UID dell'utente corrente. Qual è il modo migliore per farlo ?? Ho un metodo asincrono che imposta le mie proprietà utente come final loggegInUsere ho un metodo asincrono

void getCurrentUser() async {
    try {
      final user = await _auth.currentUser();
      if (user != null) {
        loggedInUser = user;
        print(loggedInUser.email);
        print(uid);
      }
    } catch (e) {
      print(e);
    }
  }

Questo metodo imposta la mia proprietà LogInUser globale, quindi voglio caricare l'immagine dall'archivio Firebase in questo modo

CircleAvatar(
                    backgroundColor: Colors.black,
                    backgroundImage: FirebaseImage(
                            'gs://homeparty-68792.appspot.com/user_profile_images/${loggedInUser.uid}.png')
                       ,
                   
                    radius: 100,
                  ),

Ma quando carico questa schermata ottengo

ERROR TYPE Exception has occurred. NoSuchMethodError (NoSuchMethodError: The getter 'uid' was called on null. Receiver: null Tried calling: uid)

errore. I metodi getCurrentUser () funzionano correttamente, stampa l'e-mail e la password ma nel widget di build restituisce null. Perché sta succedendo ho bisogno di aiuto ???

Risposte

1 PeterHaddad Aug 21 2020 at 15:22

Se si sta chiamando getCurrentUser()in initState, allora il problema è che la build()sta ottenendo chiamato prima di recuperare l'utente. Pertanto la cosa migliore da fare è aggiornare cloud_firestorealla versione 0.14.0e aggiungere firebase_core : 0.5.0:

dependencies:
  flutter:
    sdk: flutter
  firebase_core : ^0.5.0
  firebase_auth : ^0.18.0
  firebase_storage:^4.0.0
  # cloud_firestore: ^0.14.0 not sure if you are using

Quindi puoi eseguire le seguenti operazioni, inizializzando prima Firebase:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

e all'interno getCurrentUser():

void getCurrentUser() {
    try {
      final user =  _auth.currentUser;
      if (user != null) {
        loggedInUser = user;
        print(loggedInUser.email);
        print(uid);
      }
    } catch (e) {
      print(e);
    }
  }

Nella nuova versione, ottenere il currentUsernon è più asincrono non richiede async/await.

Alcuni link utili:

Non è stata creata alcuna app Firebase "[DEFAULT]": chiama Firebase.initializeApp () in Flutter e Firebase

Classe non definita "FirebaseUser"

cloud_firestore 0.14.0 come utilizzare il metodo dei dati

Il getter "istanza" non è definito per il tipo "Firestore"