首页 > 解决方案 > 当我想获取我的图片下载链接 Flutter 时遇到问题(请求没有应用检查令牌。)

问题描述

获取上传到 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)

标签: firebaseflutterdart

解决方案


在代码中,Firestore 的set()方法在上传完成之前被调用。上传的执行应该返回 String 但它的异步行为是在执行发生之前预期await的(这就是你让 Future 登录控制台的原因)。您应该等待存储以上传文件。

所以最终的代码将是:

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));
  }

推荐阅读