Использование несколькими StreamBuilder одного и того же источника данных

Прямое подключение к websocket с помощью Streambuilder работает без проблем, но я попытался сделать поток частью провайдера, чтобы я мог получить доступ к данным потока в нескольких виджетах, не сталкиваясь с "Bad State: Stream has already been listened to".

Является ли это лучшим способом обработки многопотоковой передачи данных, если нет, то какие у меня есть варианты?

Websocket-сервер является частью Django

Код для провайдера указан ниже

  late final WebSocketChannel _fpdSockets;

  Map _webSocketMessages = {};

  Map get webSocketMessages {
    return _webSocketMessages;
  }


  WebSocketStreamProvider()
      : _fpdSockets = IOWebSocketChannel.connect(
          Uri.parse('ws://127.0.0.1:8000/ws/socket-server/'),
        );

  Stream<Map<String, dynamic>> get dataStream => _fpdSockets.stream
      .asBroadcastStream()
      .map<Map<String, dynamic>>((value) => (jsonDecode(value)));

  void sendDataToServer(dataToServer) {
    print("Sending Data");
    _fpdSockets.sink.add(
      jsonEncode(dataToServer),
    );
  }

  void closeConnection() {
    _fpdSockets.sink.close();
  }

  handleMessages(data) {
    print(data);
    _webSocketMessages = data;
    // notifyListeners();
  }
}

Вернуться на верх