почему мой getDownloadurl () возвращает ноль? - PullRequest
0 голосов
/ 22 февраля 2020

Я использую 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;

1 Ответ

1 голос
/ 22 февраля 2020

Вызов 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, вы также можете просто await onComplete и getDownloadURL звонить:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...