🐛 Trying to fix stream already listen
This commit is contained in:
		@@ -71,7 +71,7 @@ class ChatMessageController extends ChangeNotifier {
 | 
			
		||||
      resp.data as Map<String, dynamic>,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    _wsSubscription = _ws.stream.stream.listen((event) {
 | 
			
		||||
    _wsSubscription = _ws.pk.stream.listen((event) {
 | 
			
		||||
      switch (event.method) {
 | 
			
		||||
        case 'events.new':
 | 
			
		||||
          if (event.payload?['channel_id'] != channel?.id) break;
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@ class NotificationProvider extends ChangeNotifier {
 | 
			
		||||
  List<SnNotification> notifications = List.empty(growable: true);
 | 
			
		||||
 | 
			
		||||
  void listen() {
 | 
			
		||||
    _ws.stream.stream.listen((event) {
 | 
			
		||||
    _ws.pk.stream.listen((event) {
 | 
			
		||||
      if (event.method == 'notifications.new') {
 | 
			
		||||
        final notification = SnNotification.fromJson(event.payload!);
 | 
			
		||||
        if (showingCount < 0) showingCount = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,8 @@ class WebSocketProvider extends ChangeNotifier {
 | 
			
		||||
  late final SnNetworkProvider _sn;
 | 
			
		||||
  late final UserProvider _ua;
 | 
			
		||||
 | 
			
		||||
  StreamController<WebSocketPackage> stream = StreamController.broadcast();
 | 
			
		||||
  StreamController<WebSocketPackage> pk = StreamController.broadcast();
 | 
			
		||||
  Stream<dynamic>? _wsStream;
 | 
			
		||||
 | 
			
		||||
  WebSocketProvider(BuildContext context) {
 | 
			
		||||
    _sn = context.read<SnNetworkProvider>();
 | 
			
		||||
@@ -36,7 +37,7 @@ class WebSocketProvider extends ChangeNotifier {
 | 
			
		||||
  Completer<void>? _connectCompleter;
 | 
			
		||||
 | 
			
		||||
  Future<void> connect({noRetry = false}) async {
 | 
			
		||||
    if(_connectCompleter != null) {
 | 
			
		||||
    if (_connectCompleter != null) {
 | 
			
		||||
      await _connectCompleter!.future;
 | 
			
		||||
      _connectCompleter = null;
 | 
			
		||||
    }
 | 
			
		||||
@@ -59,6 +60,7 @@ class WebSocketProvider extends ChangeNotifier {
 | 
			
		||||
    try {
 | 
			
		||||
      conn = WebSocketChannel.connect(uri);
 | 
			
		||||
      await conn!.ready;
 | 
			
		||||
      _wsStream = conn!.stream.asBroadcastStream();
 | 
			
		||||
      listen();
 | 
			
		||||
      log('[WebSocket] Connected to server!');
 | 
			
		||||
      isConnected = true;
 | 
			
		||||
@@ -73,7 +75,7 @@ class WebSocketProvider extends ChangeNotifier {
 | 
			
		||||
        log('Retry connecting to websocket in 3 seconds...');
 | 
			
		||||
        return Future.delayed(
 | 
			
		||||
          const Duration(seconds: 3),
 | 
			
		||||
              () => connect(noRetry: true),
 | 
			
		||||
          () => connect(noRetry: true),
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
    } finally {
 | 
			
		||||
@@ -93,11 +95,12 @@ class WebSocketProvider extends ChangeNotifier {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void listen() {
 | 
			
		||||
    conn?.stream.listen(
 | 
			
		||||
    if (_wsStream == null) return;
 | 
			
		||||
    _wsStream!.listen(
 | 
			
		||||
      (event) {
 | 
			
		||||
        final packet = WebSocketPackage.fromJson(jsonDecode(event));
 | 
			
		||||
        log('Websocket incoming message: ${packet.method} ${packet.message}');
 | 
			
		||||
        stream.sink.add(packet);
 | 
			
		||||
        pk.sink.add(packet);
 | 
			
		||||
      },
 | 
			
		||||
      onDone: () {
 | 
			
		||||
        isConnected = false;
 | 
			
		||||
 
 | 
			
		||||
@@ -206,7 +206,7 @@ class _ChatRoomScreenState extends State<ChatRoomScreen> {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    final ws = context.read<WebSocketProvider>();
 | 
			
		||||
    _wsSubscription = ws.stream.stream.listen((event) {
 | 
			
		||||
    _wsSubscription = ws.pk.stream.listen((event) {
 | 
			
		||||
      switch (event.method) {
 | 
			
		||||
        case 'calls.new':
 | 
			
		||||
          final payload = SnChatCall.fromJson(event.payload!);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user