C'è un modo per caricare l'immagine da Firebase al progetto flutter secondo l'UID dell'utente corrente
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 loggegInUser
e 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
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_firestore
alla versione 0.14.0
e 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 currentUser
non è 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"