Flutter无法从PHP API获取数据,浏览器/Postman等客户端正常
Flutter与PHP API互通问题解决方案
Flutter端需调整的配置
- 添加Android网络权限:在
android/app/src/main/AndroidManifest.xml中,于<application>标签上方添加网络权限声明:
若API使用明文HTTP(非HTTPS),需在<uses-permission android:name="android.permission.INTERNET"/><application>标签内添加允许明文流量的配置:<application ... android:usesCleartextTraffic="true"> - 完善请求异常捕获:在
fetchUsers方法中加入try-catch块,打印错误详情以定位问题:Future<void> fetchUsers() async { try { final response = await http.get(Uri.parse('你的API地址')); print('响应状态码: ${response.statusCode}'); print('响应内容: ${response.body}'); } catch (e) { print('请求失败原因: $e'); } } - 修正本地API地址:若PHP服务运行在本地电脑,不要使用
localhost,改用电脑的局域网IP(如192.168.1.100)——Android模拟器的localhost指向模拟器自身,而非开发电脑。 - 设置请求超时:为请求添加超时限制,避免无限阻塞:
final response = await http.get(Uri.parse('你的API地址')) .timeout(const Duration(seconds: 10));
PHP API端需检查的配置
- 返回正确的响应头:确保API输出JSON时设置正确的Content-Type头,避免解析异常:
header('Content-Type: application/json; charset=utf-8'); - 清理多余输出:检查PHP脚本是否存在额外的空格、注释或echo内容,确保仅输出标准JSON数据。
- 验证请求方法匹配:确认Flutter使用的请求方法(GET/POST)与API接口的处理逻辑一致。
- 开放服务器端口:确保PHP服务监听的端口(如80、8080)在Windows防火墙中已开放,允许局域网设备访问。
快速调试步骤
- 在Android模拟器内置浏览器中直接访问API地址,验证网络连通性。若无法访问,排查IP、端口或防火墙设置;若能访问,聚焦Flutter代码逻辑。
- 暂时关闭系统或VSCode的代理设置,避免代理拦截请求。
内容的提问来源于stack exchange,提问作者Nan Medeiros
相关产品推荐
相关产品推荐

