【问题标题】:Flutter Bloc parellel image uploadingFlutter Bloc 并行图片上传
【发布时间】:2021-01-14 12:48:59
【问题描述】:

我想在为每张图片发送事件的同时并行上传图片

但是Future.await对我不起作用,不知道有什么解决办法?

我的代码示例

final proofs = _assetsMap.values.toList();
var isUploadedAll = true;
final waitingToBeUploaded =
    proofs.where((proof) => proof.mode == ThumbnailStatus.uploading);
for (final proof in waitingToBeUploaded) {
  final uploaded = await shipmentFacade.uploadDeliveryProof(
    asset: proof.asset,
  );

  yield uploaded.fold(
    (failure) {
      isUploadedAll = false;
      _updateProof(proof.asset, ThumbnailStatus.failed);

      return state.copyWith(
        proofs: _assetsMap.values.toList(),
      );
    },
    (proofDocument) {
      _updateProof(proof.asset, ThumbnailStatus.uploaded);

      return state.copyWith(
        proofs: _assetsMap.values.toList(),
      );
    },
  );
}

yield state.copyWith(
  proofs: _assetsMap.values.toList(),
  isUploading: false,
  hasUploadSuccess: isUploadedAll,
  hasUploadFailed: !isUploadedAll,
);

【问题讨论】:

    标签: flutter dart stream bloc


    【解决方案1】:

    我用Stream.fromFutures

     final requests = <Future<ShipmentProofState>>[];
        final proofs = _assetsMap.values.toList();
        var isUploadedAll = true;
        final waitingToBeUploaded =
            proofs.where((proof) => proof.mode == ThumbnailStatus.uploading);
    
        for (final proof in waitingToBeUploaded) {
          requests.add(
            shipmentFacade
                .uploadDeliveryProof(
              asset: proof.asset,
            )
                .then(
              (uploaded) {
                return uploaded.fold(
                  (failure) {
                    isUploadedAll = false;
                    _updateProof(proof.asset, ThumbnailStatus.failed);
    
                    return state.copyWith(
                      proofs: _assetsMap.values.toList(),
                    );
                  },
                  (proofDocument) {
                    _updateProof(proof.asset, ThumbnailStatus.uploaded);
    
                    return state.copyWith(
                      proofs: _assetsMap.values.toList(),
                    );
                  },
                );
              },
            ),
          );
        }
        
        yield* Stream.fromFutures(requests);
    

    【讨论】:

      猜你喜欢
      • 2019-02-03
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2021-03-27
      • 2020-08-14
      • 2019-11-25
      • 2022-11-13
      相关资源
      最近更新 更多