【问题标题】:why does my getDownloadurl() return null?为什么我的 getDownloadurl() 返回 null?
【发布时间】:2020-06-06 08:14:53
【问题描述】:

我正在使用flutter和firebase,所以我试图在同一个应用程序上显示我上传的图像,但是每次上传时这个url都是空的……我发现的大多数解决方案都与android有关,几乎不适用于flutter.. ..

filePath = 'Images/$order.png';
    storageUploadTask = storage.ref().child(filePath).putFile(finalImage);
    storageUploadTask.onComplete.then((value) {
      if (value.error == null) {
        storageTaskSnapshot = value;
        storageTaskSnapshot.ref.getDownloadURL().then((downloadUrl) {
          photoUrl = downloadUrl.toString();
        }).catchError((onError) {
          print('I error from the upload.');
        });
      }
    });

    await globals.firestore.collection('AdminMessage').add({
      'text': captionController == null
          ? 'Image Uploaded'
          : captionController.value,
      'order': order,
      'time': time,
      'from': globals.sitename,
      'isImage': true,
      'imgPath': photoUrl,
    });
    captionController = null;

【问题讨论】:

    标签: firebase flutter firebase-storage


    【解决方案1】:

    getDownloadURL() 的调用是异步调用。任何需要该调用结果的代码都需要在回调中。所以:

    filePath = 'Images/$order.png';
    storageUploadTask = storage.ref().child(filePath).putFile(finalImage);
    storageUploadTask.onComplete.then((value) {
      if (value.error == null) {
        storageTaskSnapshot = value;
        storageTaskSnapshot.ref.getDownloadURL().then((downloadUrl) {
          photoUrl = downloadUrl.toString();
    
          await globals.firestore.collection('AdminMessage').add({
            'text': captionController == null
                ? 'Image Uploaded'
                : captionController.value,
            'order': order,
            'time': time,
            'from': globals.sitename,
            'isImage': true,
            'imgPath': photoUrl,
          });
          captionController = null;
        }).catchError((onError) {
          print('I error from the upload.');
        });
      }
    });
    

    或者,既然你已经在使用await,你也可以只使用awaitonCompletegetDownloadURL调用:

    filePath = 'Images/$order.png';
    storageUploadTask = storage.ref().child(filePath).putFile(finalImage);
    let value = await storageUploadTask.onComplete;
    if (value.error == null) {
      storageTaskSnapshot = value;
      let downloadUrl = storageTaskSnapshot.ref.getDownloadURL();
      photoUrl = await downloadUrl.toString();
    
      await globals.firestore.collection('AdminMessage').add({
        'text': captionController == null
            ? 'Image Uploaded'
            : captionController.value,
        'order': order,
        'time': time,
        'from': globals.sitename,
        'isImage': true,
        'imgPath': photoUrl,
      });
      captionController = null;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多