Open AmrNRD opened 1 year ago
I received this error while auto reconnect after disconnecting on Socket IO
Unhandled Exception: NoSuchMethodError: The method '[]' was called on null. Receiver: null Tried calling: [](0) #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:38:5) #1 SocketIoChannel.on.<anonymous closure> (package:laravel_echo/src/channel/socketio-channel.dart:90:31) #2 EventEmitter.emit.<anonymous closure> (package:socket_io_common/src/util/event_emitter.dart:51:14) #3 List.forEach (dart:core-patch/growable_array.dart:416:8) #4 EventEmitter.emit (package:socket_io_common/src/util/event_emitter.dart:50:11) #5 Socket.emitWithAck (package:socket_io_client/src/socket.dart:138:13) #6 Socket.emit (package:socket_io_client/src/socket.dart:123:5) #7 Socket.onconnect (package:socket_io_client/src/socket.dart:326:5) #8 Socket.onpacket (package:socket_io_client/src/socket.dart:222:9) #9 EventEmitter.emit.<anonymous closure> (package:socket_io_common/src/util/event_emitter.dart:51:14) #10 List.forEach (dart:core-patch/growable_array.dart:416:8) #11 EventEmitter.emit (package:socket_io_common/src/util/event_emitter.dart:50:11) #12 Manager.ondecoded (package:socket_io_client/src/manager.dart:283:5) #13 EventEmitter.emit.<anonymous closure> (package:socket_io_common/src/util/event_emitter.dart:51:14) #14 List.forEach (dart:core-patch/growable_array.dart:416:8) #15 EventEmitter.emit (package:socket_io_common/src/util/event_emitter.dart:50:11) #16 Decoder.add (package:socket_io_common/src/parser/parser.dart:159:14) #17 Manager.ondata (package:socket_io_client/src/manager.dart:274:13) #18 EventEmitter.emit.<anonymous closure> (package:socket_io_common/src/util/event_emitter.dart:51:14) #19 List.forEach (dart:core-patch/growable_array.dart:416:8) #20 EventEmitter.emit (package:socket_io_common/src/util/event_emitter.dart:50:11) #21 Socket.onPacket (package:socket_io_client/src/engine/socket.dart:462:11) #22 Socket.setTransport.<anonymous closure> (package:socket_io_client/src/engine/socket.dart:287:34) #23 EventEmitter.emit.<anonymous closure> (package:socket_io_common/src/util/event_emitter.dart:51:14) #24 List.forEach (dart:core-patch/growable_array.dart:416:8) #25 EventEmitter.emit (package:socket_io_common/src/util/event_emitter.dart:50:11) #26 Transport.onPacket (package:socket_io_client/src/engine/transport/transport.dart:128:5) #27 Transport.onData (package:socket_io_client/src/engine/transport/transport.dart:122:5) #28 IOWebSocketTransport.addEventListeners.<anonymous closure> (package:socket_io_client/src/engine/transport/io_websocket_transport.dart:67:7) #29 _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10) #30 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) #31 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) #32 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19) #33 _StreamController._add (dart:async/stream_controller.dart:648:7) #34 _StreamController.add (dart:async/stream_controller.dart:596:5) #35 new _WebSocketImpl._fromSocket.<anonymous closure> (dart:_http/websocket_impl.dart:1144:21) #36 _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10) #37 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) #38 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) #39 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11) #40 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11) #41 _WebSocketProtocolTransformer._messageFrameEnd (dart:_http/websocket_impl.dart:332:23) #42 _WebSocketProtocolTransformer.add (dart:_http/websocket_impl.dart:226:46) #43 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24) #44 _HttpDetachedStreamSubscription._maybeScheduleData.<anonymous closure> (dart:_http/http_parser.dart:173:20) #45 _microtaskLoop (dart:async/schedule_microtask.dart:40:21) #46 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
I fixed it by simply checking props before calling the listener.
Before: (props) { String channel = props[0]; dynamic data = props[1]; if (this.name == channel && this._listeners[event]!.isNotEmpty) { this._listeners[event]!.forEach((cb) => cb(data)); } }
(props) { String channel = props[0]; dynamic data = props[1]; if (this.name == channel && this._listeners[event]!.isNotEmpty) { this._listeners[event]!.forEach((cb) => cb(data)); } }
After: (props) { if(props is List&&props.length>1){ String channel = props[0]; dynamic data = props[1]; if (this.name == channel && this._listeners[event]!.isNotEmpty) { this._listeners[event]!.forEach((cb) => cb(data)); } } }
(props) { if(props is List&&props.length>1){ String channel = props[0]; dynamic data = props[1]; if (this.name == channel && this._listeners[event]!.isNotEmpty) { this._listeners[event]!.forEach((cb) => cb(data)); } } }
I received this error while auto reconnect after disconnecting on Socket IO
I fixed it by simply checking props before calling the listener.
Before:
(props) { String channel = props[0]; dynamic data = props[1]; if (this.name == channel && this._listeners[event]!.isNotEmpty) { this._listeners[event]!.forEach((cb) => cb(data)); } }
After:
(props) { if(props is List&&props.length>1){ String channel = props[0]; dynamic data = props[1]; if (this.name == channel && this._listeners[event]!.isNotEmpty) { this._listeners[event]!.forEach((cb) => cb(data)); } } }