Как загрузить изображение в Firebase Storage и получить downloadUrl (Flutter / Firebase) - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу осуществить отправку файлов в Firebase Storage, а также получить ссылку на него.Но по какой-то причине это не работает ...

void _pickFile() async {
  File file = await FilePicker.getFile(type: FileType.ANY);
  StorageReference ref = FirebaseStorage.instance.ref()
  .child("image${Random().nextInt(999)}.jpg");
  var fileUrl = ref.putFile(file).onComplete.then((file) => 
  file.ref.getDownloadURL());
  print(fileUrl);
  _sendMessage(fileUrl: fileUrl.toString());
}

...
prefixIcon: IconButton(
  icon: Icon(Icons.attach_file),
  color: Colors.white,
  onPressed: () => _pickFile()
)

Почему я получаю это вместо ссылки?

I / flutter (16610): экземпляр 'Future'

Мне нужна ссылка в строке!

В чем проблема?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Вам нужно использовать await для Future функций

void _pickFile() async {
  File file = await FilePicker.getFile(type: FileType.ANY);
  StorageReference ref = FirebaseStorage.instance.ref()
  .child("image${Random().nextInt(999)}.jpg");
  final StorageUploadTask uploadTask = ref.putFile(file);
  StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
  String downloadUrl = await taskSnapshot.ref.getDownloadURL();
  _sendMessage(fileUrl: downloadUrl);
}

Это выглядело бы так без использования await

void _pickFile() async {
  File file = await FilePicker.getFile(type: FileType.ANY);
  StorageReference ref = FirebaseStorage.instance.ref()
  .child("image${Random().nextInt(999)}.jpg");
  ref.putFile(file).onComplete.then((file){
    var fileUrl = file.ref.getDownloadURL());
    _sendMessage(fileUrl: fileUrl.toString());
  });
}
0 голосов
/ 03 апреля 2019

Как и в журнале, fileUrl - это будущее, которое еще не разрешено.Вы должны убедиться, что решено использовать строку give.

void _pickFile() async {
  File file = await FilePicker.getFile(type: FileType.ANY);
  StorageReference ref = FirebaseStorage.instance.ref()
    .child("image${Random().nextInt(999)}.jpg");
  String fileUrl = await (await ref.putFile(file).onComplete).ref.getDownloadURL();
  print(fileUrl);
  _sendMessage(fileUrl: fileUrl.toString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...