web-dev-qa-db-ja.com

FlutterのDart httpパッケージでlocalhost:8000を指す方法は?

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のポートを指定する方法はないようです。ローカルホストを指すにはどうすればよいですか?

11
Mary

短い答え:パラメーターとして文字列の代わりにUriを渡すことができます

      var client = createHttpClient();
      client.get(new Uri.http("locahost:8000", "/category"));
2
Rémi Rousselet

文字列localhost10.0.2.2に置き換えることで、VMで実行されているAndroidエミュレーターでコードを実行していました。本質的には この質問 の複製。

16
Mary

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;
}
2
HamidReza

ubuntuでこれを行う

  1. 設定に移動します
  2. ネットワークタブをクリックします
  3. 有線ネットワークをクリックしてIPアドレスをコピーし、localhostに置き換えます

注:接続は有線である必要があります[〜#〜] lan [〜#〜]SBテザリングでなく、Bluetoothテザリング(私の場合、Bluetoothテザリングでエラーが発生します)