현재 사용자 UID에 따라 Firebase에서 Flutter 프로젝트로 이미지를로드하는 방법이 있습니까?
Firebase 저장소에서 이미지를로드하고 싶습니다. 이름이 {users uid} .png 인 사용자의 프로필 사진과 같은 이미지를 업로드했습니다. 따라서 사용자 프로필 화면으로 이동하면 현재 사용자 uid에 따라 firebase에서 이러한 이미지를 업로드하고 싶습니다. 그것을위한 가장 좋은 방법은 무엇입니까 ?? 내 사용자 속성을 설정 final loggegInUser
하는 비동기 메서드가 있고 비동기 메서드가 있습니다.
void getCurrentUser() async {
try {
final user = await _auth.currentUser();
if (user != null) {
loggedInUser = user;
print(loggedInUser.email);
print(uid);
}
} catch (e) {
print(e);
}
}
이 메서드는 내 전역 loginUser 속성을 설정 한 다음 firebase 저장소에서 이미지를로드하고 싶습니다.
CircleAvatar(
backgroundColor: Colors.black,
backgroundImage: FirebaseImage(
'gs://homeparty-68792.appspot.com/user_profile_images/${loggedInUser.uid}.png')
,
radius: 100,
),
하지만이 화면을로드하면
ERROR TYPE Exception has occurred. NoSuchMethodError (NoSuchMethodError: The getter 'uid' was called on null. Receiver: null Tried calling: uid)
오류. getCurrentUser () 메서드가 제대로 작동하여 이메일과 비밀번호를 인쇄하지만 빌드 위젯에서는 null을 반환합니다. 왜 이런 일이 일어나는지 도움이 필요 해요 ???
답변
당신이 호출하는 경우 getCurrentUser()
에 initState
, 다음 문제는이 때문이다 build()
사용자를 검색하기 전에 호출지고 있습니다. 따라서 가장 좋은 방법은 cloud_firestore
버전 으로 업그레이드 0.14.0
하고 다음을 추가하는 것입니다 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
그런 다음 다음을 수행하고 먼저 Firebase를 초기화합니다.
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
그리고 내부 getCurrentUser()
:
void getCurrentUser() {
try {
final user = _auth.currentUser;
if (user != null) {
loggedInUser = user;
print(loggedInUser.email);
print(uid);
}
} catch (e) {
print(e);
}
}
새 버전에서는 currentUser
더 이상 비동기가 아닙니다 async/await
.
유용한 링크 :
Firebase 앱 '[DEFAULT]'가 생성되지 않았습니다. Flutter 및 Firebase에서 Firebase.initializeApp ()을 호출하세요.
정의되지 않은 클래스 'FirebaseUser'
cloud_firestore 0.14.0 데이터 메소드 사용 방법
Getter '인스턴스'가 'Firestore'유형에 대해 정의되지 않았습니다.