Flutter搭配Deno开发时接口请求的端点地址应该如何设置?
问题排查与解决方案
核心原因
Android 模拟器的10.0.2.2确实是指向宿主机本地环回地址的专用别名,你遇到的请求失败问题主要来自三个常见配置遗漏:
- Deno 默认拦截所有网络请求,启动时未加网络权限参数的话,即使监听了
0.0.0.0,来自模拟器的外部请求也会被拦截 - Android 9(API level 28)及以上版本默认禁止 HTTP 明文请求,你使用的
http://10.0.2.2:8000属于明文请求,会被系统直接拦截 - Windows 防火墙默认拦截外部设备对本地端口的访问,模拟器的请求会被判定为外部网络请求,被防火墙直接阻断
分步解决方法
第一步:调整 Deno 启动参数
启动 Deno 服务时必须添加--allow-net参数开放网络权限,完整启动命令参考:
deno run --allow-net your_server_file.ts
如果要缩小权限范围仅开放8000端口,可以使用限定参数:
deno run --allow-net=0.0.0.0:8000 your_server_file.ts
第二步:配置安卓应用允许明文请求
在 Flutter 安卓项目中修改配置:
- 打开
android/app/src/main/AndroidManifest.xml文件 - 在
<application>标签中添加android:usesCleartextTraffic="true"属性,修改后参考:
<application android:name="io.flutter.app.FlutterApplication" android:label="你的应用名称" android:icon="@mipmap/ic_launcher" android:usesCleartextTraffic="true"> <!-- 其他原有配置保持不变 --> </application>
- 保存后完全重启 Flutter 应用生效,不要使用热重载。
第三步:配置 Windows 防火墙放行规则
- 打开 Windows Defender 防火墙,选择「高级设置」
- 入站规则 -> 新建规则 -> 端口 -> 下一步 -> 选择TCP,特定本地端口填写
8000-> 下一步 -> 允许连接 -> 下一步 -> 勾选对应网络类型(常用场景勾选专用、公网即可) -> 下一步,填写规则名称后完成配置。
验证方式
配置完成后先打开模拟器自带的浏览器,访问http://10.0.2.2:8000/api/register,如果能正常返回接口数据,说明网络链路已打通,再在 Flutter 代码中发起请求即可。
内容的提问来源于stack exchange,提问作者GoodMan
相关产品推荐
相关产品推荐

