首页 > 解决方案 > 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;
  }
});

标签: dartriverpod

解决方案


推荐阅读