Ce problème a déjà été signalé par d'autres (comme aquí ). Bien que j'aie compris la cause de ce problème, je n'ai toujours pas trouvé de solution lorsque j'utilise l'outil de niveau supérieur http
bibliothèque. Par exemple :
import 'package:http/http.dart';
// yes, pwd is String, it's just a test...
Future<Response> login(String user, String pwd) {
final authHeader = encodeBasicCredentials(user, pwd);
return get(
'http://192.168.0.100:8080/login',
headers: <String, String>{
HttpHeaders.AUTHORIZATION: authHeader,
},
));
}
Je n'arrive pas à trouver un moyen d'attraper un SocketException
qui est lancé, par exemple, si l'hôte ne peut pas être atteint (dans mon cas, l'ip de l'hôte était erronée). J'ai essayé d'envelopper le await
en try/catch
ou en utilisant Future.catchError
.
Il s'agit d'une trace de la pile de l'exception :
[ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter ( 4036): SocketException: OS Error: Connection refused, errno = 111, address = 192.168.0.100, port = 35588
E/flutter ( 4036): #0 IOClient.send (package:http/src/io_client.dart:30:23)
E/flutter ( 4036): <asynchronous suspension>
E/flutter ( 4036): #1 BaseClient._sendUnstreamed (package:http/src/base_client.dart:171:38)
E/flutter ( 4036): <asynchronous suspension>
E/flutter ( 4036): #2 BaseClient.get (package:http/src/base_client.dart:34:5)
E/flutter ( 4036): #3 get.<anonymous closure> (package:http/http.dart:47:34)
E/flutter ( 4036): #4 _withClient (package:http/http.dart:167:20)
E/flutter ( 4036): <asynchronous suspension>
E/flutter ( 4036): #5 get (package:http/http.dart:47:3)