Cannot catch SocketException
Asynchronous errors can't be caught using try
/catch
(https://www.dartlang.org/docs/tutorials/futures/) at least unless you are using async
/await
(https://www.dartlang.org/articles/await-async/)
See also https://github.com/dart-lang/sdk/issues/24278
You can use the
done
future on theWebSocket
object to get that error, e.g.:
import 'dart:async';import 'dart:io';main() async { // Connect to a web socket. WebSocket socket = await WebSocket.connect('ws://echo.websocket.org'); // Setup listening. socket.listen((message) { print('message: $message'); }, onError: (error) { print('error: $error'); }, onDone: () { print('socket closed.'); }, cancelOnError: true); // Add message, and then an error. socket.add('echo!'); socket.addError(new Exception('error!')); // Wait for the socket to close. try { await socket.done; print('WebSocket donw'); } catch (error) { print('WebScoket done with error $error'); }}
You can specify SocketException
try { //network request} on SocketException catch (_) { //handle socket exception here} catch (_) { //handle other error}