Вызов 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;
}