У меня возникает проблема, когда я хочу, чтобы ссылка на скачивание моей фотографии трепетала (маркер проверки приложения для запроса отсутствует).

# #firebase #flutter #dart

Вопрос:

Я получаю такую ошибку при получении ссылки для загрузки фотографии, которую я загрузил в firebase.введите описание изображения здесь

Источник:Github

     uploadImageToFirebase() async {
    File yuklenecekDosya = _imagefile!;
    firebase_storage.Reference referansYol = firebase_storage
        .FirebaseStorage.instance
        .ref()
        .child("Profilresimleri")
        .child(user!.uid)
        .child("profilresmi.png");




    firebase_storage.UploadTask yuklemeGorevi =
        referansYol.putFile(yuklenecekDosya);
    yuklemeGorevi.then((s) {
      if (s.state.toString() == firebase_storage.TaskState.success.toString()) {
        downloadURL = referansYol.getDownloadURL().toString();
        print(referansYol.getDownloadURL().toString());
        print(referansYol.getDownloadURL().toString());
        print(referansYol.getDownloadURL().toString());
        print(referansYol.getDownloadURL().toString());
        print(referansYol.getDownloadURL().toString());
      }
    });

    //= await firebase_storage.FirebaseStorage.instance
    //  .ref('Profilresimleri/${user!.uid}/profilresmi.png')
    //.getDownloadURL();
    await firestore
        .collection("Users")
        .doc(user!.uid)
        .set({"profilfotolink": downloadURL}, SetOptions(merge: true));
  }
 

проблема

 W/kinoks_elektro( 3803): Accessing hidden method Lsun/misc/Unsafe;->putInt(Ljava/lang/Object;JI)V (greylist, linking, allowed)
2
W/kinoks_elektro( 3803): Accessing hidden method Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V (greylist, linking, allowed)
W/kinoks_elektro( 3803): Accessing hidden method Lsun/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; (greylist, linking, allowed)
W/kinoks_elektro( 3803): Accessing hidden method Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V (greylist, linking, allowed)
I/chatty  ( 3803): uid=10148(com.example.ekinoks_elektron) FirestoreWorker identical 3 lines
W/kinoks_elektro( 3803): Accessing hidden method Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V (greylist, linking, allowed)
W/kinoks_elektro( 3803): Accessing hidden method Lsun/misc/Unsafe;->putLong(Ljava/lang/Object;JJ)V (greylist, linking, allowed)
W/kinoks_elektro( 3803): Accessing hidden method Lsun/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; (greylist, linking, allowed)
I/flutter ( 3803): Instance of 'Future<String>'
I/chatty  ( 3803): uid=10148(com.example.ekinoks_elektron) 1.ui identical 3 lines
I/flutter ( 3803): Instance of 'Future<String>'
6
W/NetworkRequest( 3803): No App Check token for request.
W/kinoks_elektro( 3803): Accessing hidden method Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V (greylist, linking, allowed)
W/kinoks_elektro( 3803): Accessing hidden method Lsun/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; (greylist, linking, allowed)
W/kinoks_elektro( 3803): Accessing hidden method Lsun/misc/Unsafe;->putInt(Ljava/lang/Object;JI)V (greylist, linking, allowed)
W/kinoks_elektro( 3803): Accessing hidden method Ldalvik/system/CloseGuard;->close()V (greylist,core-platform-api, linking, allowed)
W/kinoks_elektro( 3803): Accessing hidden method Ldalvik/system/CloseGuard;->warnIfOpen()V (greylist,core-platform-api, linking, allowed)
 

Ответ №1:

В коде set() метод Firestore вызывается до завершения загрузки. Выполнение загрузки должно возвращать строку, но ее асинхронное поведение ожидается await до того, как произойдет выполнение (именно по этой причине вы в будущем войдете в консоль). Вам следует дождаться загрузки файла в хранилище.

Таким образом, окончательный код будет:

 uploadImageToFirebase() async {
    File yuklenecekDosya = _imagefile!;
    firebase_storage.Reference referansYol = firebase_storage
        .FirebaseStorage.instance
        .ref()
        .child("Profilresimleri")
        .child(user!.uid)
        .child("profilresmi.png");


    firebase_storage.UploadTask yuklemeGorevi =
        referansYol.putFile(yuklenecekDosya);
    await yuklemeGorevi.then((s) {
      if (s.state.toString() == firebase_storage.TaskState.success.toString()) {
        downloadURL = referansYol.getDownloadURL().toString();
        print("Download URL: $downloadURL");
      }
    });

    await firestore
        .collection("Users")
        .doc(user!.uid)
        .set({"profilfotolink": downloadURL}, SetOptions(merge: true));
  }