dart - 是否可以在 onComplete 上返回与 Stream 发出的对象不同的对象?
问题描述
我有一个返回 a 的 API Stream<int> uploadFile()
,其中int
表示上传的字节数,但是我希望在完成后让它返回一个完全不同的类型 - 在这种情况下,是String
上传文件 URL 的 a 。那可能吗?
Stream<int> uploadFile(File file) {
//...
}
解决方案
简短的回答是否定的,不可能明确地做到这一点。
你有几个选择,我会强调我的偏好:
返回
dynamic
或Object
,并指示(向用户)发出的事件将是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
等待上传完成。干杯!
推荐阅读
- c# - GCHandle.Alloc 会阻止分页吗?
- sqlite - SQLite 按外部表字段排序
- javascript - 在 AntD 中,如何将 TreeSelect 的功能与 Select 的“标签”模式结合起来?
- python-socketio - 使用 socketIO 服务器将从单独的 python 程序生成的数据发送到 socketIO 客户端
- elasticsearch - 处理 Elasticsearch 中的可选字段搜索
- r - 生存分析中未找到对象“PSTATUS”
- r - lm 函数/系数,用于一个数据帧 R 中的特定不同时间窗口/事件
- javascript - 处理多个 else if 语句以提高 Google Apps 脚本速度的最佳方法是什么?
- node.js - React 应用程序未在命令行中的“npm start”时启动。npm install 命令在 cmd 中也没有响应
- permissions - 用于覆盖/删除驱动器项目权限的 Microsoft Graph API