При загрузке ref.getDownloadURL имеет значение null, как ждать, прежде чем поместить его в другую переменную - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь загрузить изображение в хранилище firebase, а затем поместить URL-адрес загрузки в хранилище firebase cloud, но значение в базе данных всегда равно null

File image;
String imageUrl;

...

  Future<Null> uploadImage() async {
    if (image == null) {
      imageUrl = defaultImage;
    } else {
      StorageReference ref = FirebaseStorage.instance.ref().child(filename);
      uploadTask = ref.putFile(image);

      imageUrl = await (await uploadTask.onComplete).ref.getDownloadURL();
    }
  }

  void _addData() {
    Firestore.instance.collection('kajian').add({
      "imageUrl": imageUrl,
    });
    image = null;
    imageUrl = null;
  }

...

      Scaffold(
        floatingActionButton: new FloatingActionButton(
          onPressed: () {
            uploadImage();
            _addData();
            Navigator.pop(context);
          },
          child: Icon(Icons.cloud_upload),
        ),

1 Ответ

0 голосов
/ 28 июня 2019

URL-адрес загрузки может быть определен только после завершения загрузки изображения. Поэтому вам нужно будет записать его в базу данных после завершения загрузки.

Future<Null> uploadImage() async {
  StorageReference ref = FirebaseStorage.instance.ref().child(filename);

  uploadTask = ref.putFile(image);

  String imageUrl = await (await uploadTask.onComplete).ref.getDownloadURL();

  Firestore.instance.collection('kajian').add({
    "imageUrl": imageUrl,
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...