Replace initState block in above example. This is working @override void initState() { super.initState(); channel = WebSocketChannel.connect(Uri.parse(ApiPath.WSS_ANGEL)); channel!.sink.add( jsonEncode({ "task": "cn", "channel": "", "token": "feed_token", "user": "client_id", "acctid": "client_id" }), ); channel!.sink.add( jsonEncode({ "task": "mw", // "channel": "nse_cm|3045", "channel": "nse_cm|3045&nse_cm|2885", "token": "feed_token", "user": "client_id", "acctid": "client_id" }), ); channel!.stream.listen( (data) { String response = data.toString(); debugPrint('wss Response before Decode: ' + response); var step1 = base64.decode(response); debugPrint('wss Response Decode Step 1: ' + step1.toString()); var inflated = zlib.decode(step1); var step2 = utf8.decode(inflated); debugPrint('wss Response Decode Step 2: ' + step2.toString()); var step3 = json.decode(step2); debugPrint('wss Response Decode Step 3: ' + step3.toString()); if (step3.toString().contains('task') && step3[0]['task'].toString() == 'cn' && step3[0]['msg'].toString() == 'cn') { debugPrint('wss Socket Connected'); } }, onDone: () { debugPrint('wss Socket Connected'); }, onError: (error) => debugPrint('wss Error: ' + error.toString()), ); } Decoded Data in Log wss Response Decode Step 3: [{e: nse_cm, name: sf, ltp: 2597.25, ltq: 20, tk: 2885, ltt: NA}, {e: nse_cm, name: sf, ltp: 518.90, ltq: 8, tk: 3045, ltt: NA}]