dart - Riverpod StreamProvider 访问流
问题描述
我正在使用 socket_client_io 和 Riverpod。套接字客户端使用事件进行我想在 StreamProvider 中传播的更新。
我目前拥有的是以下内容。它完成了工作,但是......我想直接写入 StreamProvider 中的流,所以我不需要创建一个额外的流来从事件到产生。
final downloadProgressProvider = StreamProvider.autoDispose<Progress>((ref) async* {
// open socketio
final Server host = ref.read(configProvider).talkServer;
final String jwt = ref.read(userProvider).jwt;
IO.Socket _socket = IO.io('${host.uri.toString()}/?token=$jwt', IO.OptionBuilder()
.setTransports(['websocket'])
.build()
);
StreamController<Progress> _stream = StreamController<Progress>();
ref.onDispose(() {
// close socketio
_stream.close();
_stream = null;
_socket.dispose();
_socket = null;
});
_socket.on('download-update', (message) {
print('download-update incoming');
_stream.add(Progress.fromJson(json.decode(message)))
});
await for (final value in _stream.stream) {
yield value;
}
});
解决方案
推荐阅读
- c# - 为用户 ID 和密码设置 HTML 元素的值
- swift - 如何在 Swift 中导出 16 位 HEIF 图像?
- google-sheets - 向下复制自定义颜色格式
- amp-html - AMP 页面上的内部链接
- javascript - 在 JavaScript 计算器中添加两位数时出现问题
- javascript - 如何在 JS 变量中为 URL 设置“img src=”?
- apache - 使用 apache htaccess,允许访问父目录中限制的子目录中的文件
- javascript - 如何使用 shell 脚本将 html 中的外部 CSS 文件链接替换为 CSS 文件的内容?
- javascript - 我的列 highcharts 没有呈现任何数据
- apache - .htaccess mod_rewrites 将文档根附加到 URL