dart - 是否有可能在Stream上返回与onComplete不同的对象?

标签 dart

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

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

最佳答案

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

您有几种选择,我将重点介绍我的偏好:

  • 返回dynamicObject,并(向用户)指示发出的事件在进行中将是int类型,并且String一旦完成。这依赖于进行许多is检查,我个人不会选择此选项:
    uploadFile().listen((progress) {
      if (progress is int) {
    
      } else if (progress is String) {
    
      }
    });
    
  • 返回包装器类,例如UploadProgress:
    abstract class UploadProgress {
      int get progressPercent;
      String get uploadUrl;
    }
    
    Stream<UploadProgress> uploadFile() { ... }
    
  • 我的偏好:返回一个包装器类,该类公开Stream:
    abstract class FileUpload {
      Stream<int> get progress;
      Future<String> get url;
    }
    
    FileUpload uploadFile() { ... }
    

  • 最后一个选项可以使您清楚地知道您可以收听progress字段,或者只是等待url以等待上传完成。干杯!

    关于dart - 是否有可能在Stream上返回与onComplete不同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50108153/

    相关文章:

    dart - 如何在中间垂直对齐ListView

    firebase - StreamBuilder Firestore 分页

    Flutter 状态管理 (BloC) : Stateless vs Stateful widget

    dart - 删除数组 "distinct"中重合的项目

    Dart null 安全条件语句?

    dart - 如何在 flutter 中使设备顶部面板(状态栏)具有与 AppBar 相同的背景颜色?

    dart - Onrefresh 指示器在条件语句中不起作用

    flutter - 如何将插入文本表单字段的文本转换为 flutter 中的图像?

    flutter - 如何在 FLUTTER 中几秒钟后重定向到 Stream Builder 中的另一个屏幕/页面?

    dart - 如何在 Flutter 中链接文本