如何在 io.dart 库中获取 WebSocket 连接状态?
我通过创建连接
client = IOWebSocketChannel.connect(url);
并且根据连接的成功,你需要转发它的状态。
如果我尝试连接到错误的服务器,我会得到这个输出
E/flutter ( 6678): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: WebSocketChannelException: WebSocketChannelException: SocketException: Failed host lookup: 'echo.websocket.or' (OS Error: No address associated with hostname, errno = 7)
E/flutter ( 6678): #0 new IOWebSocketChannel._withoutSocket.<anonymous closure> (package:web_socket_channel/io.dart:84:24)
E/flutter ( 6678): #1 _invokeErrorHandler (dart:async/async_error.dart:16:24)
E/flutter ( 6678): #2 _HandleErrorStream._handleError (dart:async/stream_pipe.dart:282:9)
E/flutter ( 6678): #3 _ForwardingStreamSubscription._handleError (dart:async/stream_pipe.dart:161:13)
E/flutter ( 6678): #4 _rootRunBinary (dart:async/zone.dart:1214:47)
E/flutter ( 6678): #5 _CustomZone.runBinary (dart:async/zone.dart:1107:19)
E/flutter ( 6678): #6 _CustomZone.runBinaryGuarded (dart:async/zone.dart:1013:7)
E/flutter ( 6678): #7 _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:376:15)
E/flutter ( 6678): #8 _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:394:16)
E/flutter ( 6678): #9 _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:294:7)
E/flutter ( 6678): #10 _SyncStreamControllerDispatch._sendError (dart:async/stream_controller.dart:812:19)
E/flutter ( 6678): #11 _StreamController._addError (dart:async/stream_controller.dart:690:7)
E/flutter ( 6678): #12 _rootRunBinary (dart:async/zone.dart:1214:47)
E/flutter ( 6678): #13 _CustomZone.runBinary (dart:async/zone.dart:1107:19)
E/flutter ( 6678): #14 _CustomZone.runBinaryGuarded (dart:async/zone.dart:1013:7)
E/flutter ( 6678): #15 _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:376:15)
E/flutter ( 6678): #16 _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:394:16)
E/flutter ( 6678): #17 _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:294:7)
E/flutter ( 6678): #18 _SyncStreamControllerDispatch._sendError (dart:async/stream_controller.dart:812:19)
E/flutter ( 6678): #19 _StreamController._addError (dart:async/stream_controller.dart:690:7)
E/flutter ( 6678): #20 new Stream.fromFuture.<anonymous closure> (dart:async/stream.dart:178:18)
E/flutter ( 6678): #21 _rootRunBinary (dart:async/zone.dart:1214:47)
E/flutter ( 6678): #22 _CustomZone.runBinary (dart:async/zone.dart:1107:19)
E/flutter ( 6678): #23 _FutureListener.handleError (dart:async/future_impl.dart:157:20)
E/flutter ( 6678): #24 Future._propagateToListeners.handleError (dart:async/future_impl.dart:708:47)
E/flutter ( 6678): #25 Future._propagateToListeners (dart:async/future_impl.dart:729:24)
E/flutter ( 6678): #26 Future._completeError (dart:async/future_impl.dart:537:5)
E/flutter ( 6678): #27 Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:593:7)
E/flutter ( 6678): #28 _rootRun (dart:async/zone.dart:1190:13)
E/flutter ( 6678): #29 _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 6678): #30 _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter ( 6678): #31 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter ( 6678): #32 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter ( 6678): #33 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
E/flutter ( 6678):