Mar*_*ary 15 http localhost dart flutter
我正在按照Flutter Networking/HTTP教程对我的localhost:8000上运行的服务器执行GET请求.通过我的浏览器访问我的本地主机工作正常.我的代码看起来像这样:
var url = 'http://localhost:8000';
Future<String> getUnits(String category) async {
var response = await httpClient.get('$url/$category');
return response.body;
}
Run Code Online (Sandbox Code Playgroud)
当我指向任何真实的URL时,这可以正常工作,例如https://example.com
,当我指向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)
Run Code Online (Sandbox Code Playgroud)
每次重新加载应用程序时,上述错误中的端口都会更改.我查看了http包代码,似乎没有办法为URL指定端口.我如何指向我的本地主机?
mah*_*mnj 25
尝试将模拟器或设备的端口转发到计算机端口
\n例如,如果您的服务器在 localhost:8000 上运行,则运行此命令
\nadb reverse tcp:8000 tcp:8000
这个命令实际上将你的手机\xe2\x80\x99s端口8000重定向到你的计算机\xe2\x80\x99s端口8000。现在你的客户端应该能够与本地运行的服务器通信
\n提示:如果您想使用\n在手机上本地运行 Flutter Web 应用程序,这也适用
\nflutter run -d web-server\n
Run Code Online (Sandbox Code Playgroud)\n\n
小智 19
将 url 中的“localhost”替换为 wifi 连接 ip,例如:“ http://localhost:8000 ”=>“ http://192.168.1.102:8000 ”。您可以使用 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;
}
Run Code Online (Sandbox Code Playgroud)
Sed*_*ush 14
如果您使用的是 Android 模拟器,那么localhost
在模拟器上就不是127.0.0.0
了10.0.2.2
,因此,在您需要编写的 Android 模拟器上https://10.0.2.2:8000
,它https://127.0.0.1:8000
也不会在真实设备上运行。因为localhost
在真实设备上意味着不同的东西。
有关如何将 Flutter 应用程序连接到localhost
模拟器或真实设备的更多信息,请单击链接将 Flutter 应用程序连接到本地主机
Rém*_*let 12
简短回答:您可以传递 Uri 而不是字符串作为参数
var client = createHttpClient();
client.get(new Uri.http("locahost:8000", "/category"));
Run Code Online (Sandbox Code Playgroud)
小智 7
我遇到了同样的问题,很明显,我找到了解决此问题的方法,因此,由于您使用手机处于虚拟环境中,因此无法使用本地主机,因为手机未与您的 PC 如此简单地连接,就我而言,它工作,只需使用:
10.0.2.2:PORT
Run Code Online (Sandbox Code Playgroud)
将此 URL 与您的端口一起使用,它应该可以工作:)
我使用 ubuntu 20LTS、laravel 后端、flutter http 包。
sudo apt-get install net-tools
. 这个包支持ifconfig
命令工作。ifconfig
. 然后在输出中搜索这一行inet 192.168.43.217 netmask 255.255.255.0 broadcast 192.168.43.255
。然后复制inet 192.168.43.217
ip地址。另请注意,您的 IP 地址将有所不同。对我来说是的192.168.43.217
。cd your_laravel_project
,然后运行sudo php -S 192.168.43.217:81 -t public
服务到inet地址。static const _apiRoute = "http://192.168.43.217:81/api/login".
吧!!这对我有用。小智 6
如果即使指向 10.0.:2.2:port 仍然无法工作,很可能 Android 不允许 http 流量。
更改 AndroidManifest.xml android/app/src/main
包括
android:usesCleartextTraffic="true"
Run Code Online (Sandbox Code Playgroud)
如下所示
<application
android:name="io.flutter.app.FlutterApplication"
android:label="app_name"
android:icon="@mipmvvap/ic_vvlauncher"
android:usesCleartextTraffic="true">
Run Code Online (Sandbox Code Playgroud)
查找ip是ifconfig
mac/linux
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
this one => inet 192.168.43.57 netmask 0xffffff00 broadcast 192.168.43.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
Run Code Online (Sandbox Code Playgroud)
启动PHP
php -S 192.168.43.57:5000 index.php
比宣布未来
Future<String> getIsi()async{
final res = await new Dio().get('http://192.168.43.57:5000/lihat-isi');
print('res.data');
return res.data;
}
Run Code Online (Sandbox Code Playgroud)
结果是
I/flutter ( 3250): [{"id":"1","judul":"asasa","gambar":"asa","ket":"asa"},{"id":"2","judul":"asasa","gambar":"asa","ket":"asa"},{"id":"3","judul":"asasa","gambar":"asa","ket":"asa"},{"id":"4","judul":"asasa","gambar":"asa","ket":"asa"}]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12266 次 |
最近记录: |