是否可以返回onComplete上的其他对象而不是Stream发出的对象?

时间:2018-04-30 21:01:11

标签: dart

我有一个返回Stream<int> uploadFile()的API,其中int代表上传的字节数,但是我想在完成后让它返回一个完全不同的类型 - 在此case,上传文件的URL String。这可能吗?

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

1 个答案:

答案 0 :(得分:2)

简短的回答是,无法明确

您有几个选项,我会突出显示我的偏好设置:

  1. 返回dynamicObject,并指示(对用户)发生的事件在进行中时类型为intString一旦完成。这依赖于进行一些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() { ... }
    
  4. 最后一个选项会明确表示您可以收听progress字段,或者只是等待url等待上传完成。干杯!