Flutter Networking/HTTP tutorial に従って、localhost:8000で実行されているサーバーにGETリクエストを実行しています。ブラウザ経由でローカルホストにアクセスすると問題なく動作します。私のコードは次のようになります。
var url = 'http://localhost:8000';
Future<String> getUnits(String category) async {
var response = await httpClient.get('$url/$category');
return response.body;
}
https://example.com
などの実際のURLをポイントするとうまく機能しますが、https://localhost:8000
またはhttps://localhost
(またはこれらのバリエーション)をポイントすると、次のエラーが表示されます。
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)
上記のエラーのポートは、アプリをリロードするたびに変わります。 httpパッケージコード を調べましたが、URLのポートを指定する方法はないようです。ローカルホストを指すにはどうすればよいですか?
短い答え:パラメーターとして文字列の代わりにUriを渡すことができます
var client = createHttpClient();
client.get(new Uri.http("locahost:8000", "/category"));
文字列localhost
を10.0.2.2
に置き換えることで、VMで実行されているAndroidエミュレーターでコードを実行していました。本質的には この質問 の複製。
uRLの「localhost」をwifi接続ipに置き換えます。例:「 http:// localhost:80 」=>「 http://192.168.1.102:80 」 cmd> ipconfig(ワイヤレスLANアダプターWI-FIを使用して、コマンドプロンプトからwifi ipを取得できます。
var url = 'http://192.168.1.102:8000';
Future<String> getUnits(String category) async {
var response = await httpClient.get('$url/$category');
return response.body;
}
ubuntuでこれを行う
注:接続は有線である必要があります[〜#〜] lan [〜#〜]、SBテザリングでなく、Bluetoothテザリング(私の場合、Bluetoothテザリングでエラーが発生します)