Je suis Flutter Networking/HTTP tutorial pour faire une requête GET à un serveur fonctionnant sur mon hôte local: 8000. Visiter mon hôte local via mon navigateur fonctionne très bien. Mon code ressemble à ceci:
var url = 'http://localhost:8000';
Future<String> getUnits(String category) async {
var response = await httpClient.get('$url/$category');
return response.body;
}
Cela fonctionne bien lorsque je pointe vers une URL réelle, telle que https://example.com
, mais quand je pointe vers https://localhost:8000
ou https://localhost
(ou toute variante de ceux-ci), j'obtiens une erreur commençant par:
E/flutter ( 4879): [ERROR:topaz/lib/tonic/logging/Dart_error.cc(16)] Unhandled exception:
E/flutter ( 4879): SocketException: OS Error: Connection refused, errno = 111, address = localhost, port = 47060
E/flutter ( 4879): #0 IOClient.send (package:http/src/io_client.Dart:30:23)
Le port dans l'erreur ci-dessus change chaque fois que je recharge l'application. J'ai regardé dans le code du package http et il ne semble pas qu'il y ait un moyen de spécifier le port pour l'URL. Comment pointer vers mon hôte local?
Réponse courte: vous pouvez passer un Uri au lieu d'une chaîne comme paramètre
var client = createHttpClient();
client.get(new Uri.http("locahost:8000", "/category"));
Remplacement de la chaîne localhost
par 10.0.2.2
l'a résolu pour moi, car j'exécutais le code dans l'émulateur Android, qui s'exécute dans une machine virtuelle. Il s'agit essentiellement d'un doublon de cette question .
remplacez 'localhost' dans votre URL vers la connexion wifi ip par exemple: ' http: // localhost: 80 ' => ' http://192.168.1.102:80 '. vous pouvez obtenir votre ip wifi à partir de l'invite de commande avec cmd> ipconfig (adaptateur LAN sans fil WI-FI.
var url = 'http://192.168.1.102:8000';
Future<String> getUnits(String category) async {
var response = await httpClient.get('$url/$category');
return response.body;
}
faire cela dans Ubuntu
remarque: votre connexion doit être câblée, elle peut être LAN , SB Tethering mais pas Bluetooth Tethering ( dans mon cas Bluetooth Tethering me donne une erreur)