首页 > 解决方案 > 是否可以在 onComplete 上返回与 Stream 发出的对象不同的对象?

问题描述

我有一个返回 a 的 API Stream<int> uploadFile(),其中int表示上传的字节数,但是我希望在完成后让它返回一个完全不同的类型 - 在这种情况下,是String上传文件 URL 的 a 。那可能吗?

Stream<int> uploadFile(File file) {
    //...
}

标签: dart

解决方案


简短的回答是否定的,不可能明确地做到这一点。

你有几个选择,我会强调我的偏好:

  1. 返回dynamicObject,并指示(向用户)发出的事件将是int在进行中的类型,String一旦完成。这依赖于做一些is检查,我个人不会选择这个选项:

    uploadFile().listen((progress) {
      if (progress is int) {
    
      } else if (progress is String) {
    
      }
    });
    
  2. 返回一个包装类,例如UploadProgress

    abstract class UploadProgress {
      int get progressPercent;
      String get uploadUrl;
    }
    
    Stream<UploadProgress> uploadFile() { ... }
    
  3. 我的偏好:返回一个暴露的包装类Stream

    abstract class FileUpload {
      Stream<int> get progress;
      Future<String> get url;
    }
    
    FileUpload uploadFile() { ... }
    

最后一个选项表明您可以收听该progress字段,或者只是等待url等待上传完成。干杯!


推荐阅读