Я создаю фиктивное приложение для социальных сетей, которое позволяет пользователям загружать изображения профилей для создания своих профилей. Я создаю это приложение на флаттере. Прямо сейчас, вот мой метод uploadPic:
Future uploadPic(BuildContext context) async{
String fileName = basename(_image.path);
FirebaseStorage storage = FirebaseStorage.instance;
var photoUrl;
Reference ref = storage.ref().child(fileName);
var storedImage = File(_image.path);
UploadTask uploadTask = ref.putFile(storedImage);
uploadTask.then((res) {
photoUrl = res.ref.getDownloadURL();
});
print("photo url -- $photoUrl");
await widget.user?.updatePhotoURL(photoUrl);
await FirebaseAuth.instance.currentUser?.updatePhotoURL(photoUrl);
}
Я добавил правильные разрешения в свою консоль firebase, чтобы разрешить чтение и запись в базу данных. Я знаю это, потому что, когда я проверяю хранилище Firebase, я вижу, что изображения были успешно загружены. Однако, когда я пытаюсь распечатать возвращенный URL-адрес фотографии (после завершения задачи загрузки), я получаю нулевое значение. Это проблема, когда я пытаюсь получить доступ к фотографии в других областях приложения, потому что пользовательский photoUrl в firebase равен нулю.
Есть ли что-то, что я делаю неправильно в отношении загрузки изображения в firebase? Кроме того, мой терминал возвращает это: нет токена проверки приложения для запроса.. Интересно, это как-то связано с проблемой?
Любая помощь будет принята с благодарностью!
Решение проблемы
твоя проблема проста, она как раз отсюда:
var photoUrl;
uploadTask.then((res) {
photoUrl = res.ref.getDownloadURL();
});
print(photoUrl); // null
проблема в том, что вы пытаетесь напечатать photoUrlпеременную, не дожидаясь, пока будущее uploadTaskзавершит свою работу, что приводит к null.
решение состоит в том, чтобы дождаться uploadTaskбудущего, прежде чем печатать photoUrlпеременную:
var photoUrl;
await uploadTask.then((res) async {
photoUrl = await res.ref.getDownloadURL();
});
print(photoUrl);
решение для вашего кода:
Future uploadPic(BuildContext context) async{
String fileName = basename(_image.path);
FirebaseStorage storage = FirebaseStorage.instance;
var photoUrl;
Reference ref = storage.ref().child(fileName);
var storedImage = File(_image.path);
UploadTask uploadTask = ref.putFile(storedImage);
await uploadTask.then((res) async {
photoUrl = await res.ref.getDownloadURL();
});
print("photo url -- $photoUrl");
await widget.user?.updatePhotoURL(photoUrl);
await FirebaseAuth.instance.currentUser?.updatePhotoURL(photoUrl);
}
Комментариев нет:
Отправить комментарий