Flutter Firebase Storage Upload Stream - PullRequest
0 голосов
/ 01 мая 2020

Я загружаю несколько изображений в облачное хранилище, я прочитал, что могу нажать на поток, чтобы отобразить индикатор выполнения загрузки, однако я не вижу способа сделать это.

  Future<dynamic> postImage(Asset imageFile) async {
    String fileName = DateTime.now().toString();
    StorageReference reference = FirebaseStorage.instance.ref().child(fileName);
    StorageUploadTask _uploadTask =
        reference.putData((await imageFile.getByteData()).buffer.asUint8List());
    StorageTaskSnapshot storageTaskSnapshot = await _uploadTask.onComplete;
    return storageTaskSnapshot.ref.getDownloadURL();
  }

1 Ответ

0 голосов
/ 01 мая 2020

Существует пример использования плагина firebase-storage в репозитории FlutterFire, что очень удобно.

Этот пример в значительной степени выполняет вызовы на StorageUploadTask task, которые у вас есть, чтобы определить состояние загрузки и ход выполнения.

  String get status {
    String result;
    if (task.isComplete) {
      if (task.isSuccessful) {
        result = 'Complete';
      } else if (task.isCanceled) {
        result = 'Canceled';
      } else {
        result = 'Failed ERROR: ${task.lastSnapshot.error}';
      }
    } else if (task.isInProgress) {
      result = 'Uploading';
    } else if (task.isPaused) {
      result = 'Paused';
    }
    return result;
  }

Для определения прогресса он использует:

  String _bytesTransferred(StorageTaskSnapshot snapshot) {
    return '${snapshot.bytesTransferred}/${snapshot.totalByteCount}';
  }

, который затем используется в методе build() следующим образом:

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<StorageTaskEvent>(
      stream: task.events,
      builder: (BuildContext context,
          AsyncSnapshot<StorageTaskEvent> asyncSnapshot) {
        Widget subtitle;
        if (asyncSnapshot.hasData) {
          final StorageTaskEvent event = asyncSnapshot.data;
          final StorageTaskSnapshot snapshot = event.snapshot;
          subtitle = Text('$status: ${_bytesTransferred(snapshot)} bytes sent');
        } else {
          subtitle = const Text('Starting...');
        }

Так что требуется events поток task и получает оттуда информацию о ходе выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...