Flutter应用Android端HTTP请求超时但浏览器端正常的原因与解决
问题原因分析
核心是Android设备/模拟器与Web端对localhost的解析逻辑不同:
- Flutter Web运行在浏览器中,
localhost直接指向运行Node服务器的本机,因此能正常建立连接。 - Android模拟器的
localhost指的是模拟器自身系统,而非宿主机器;真机用localhost也无法定位到同一局域网内的服务器,最终导致请求超时。
你的网络安全配置已经允许明文HTTP流量,所以并非权限或明文限制导致的问题。
解决方法
1. 适配Android模拟器
将请求的baseUrl中的localhost替换为10.0.2.2——这是Android模拟器官方规定的、用于映射宿主机器localhost的特殊IP地址。
示例修改:
// 原配置 // const baseUrl = 'http://localhost:3000'; // 修改后 const baseUrl = 'http://10.0.2.2:3000';
2. 适配Android真机
- 确保手机和运行Node服务器的电脑处于同一Wi-Fi局域网
- 查找电脑的局域网IP地址:Windows用
ipconfig命令,macOS/Linux用ifconfig或ip addr命令,比如得到192.168.1.105 - 将
baseUrl替换为该局域网IP:
const baseUrl = 'http://192.168.1.105:3000';
3. 调整Node服务器绑定地址
确保Node服务器监听0.0.0.0而非仅localhost,这样才能允许外部设备访问:
// 错误示例:仅绑定localhost,外部设备无法访问 // app.listen(3000, 'localhost', () => {...}); // 正确示例:绑定所有网卡,允许外部访问 app.listen(3000, '0.0.0.0', () => { console.log('Server running on port 3000'); });
4. 二次验证网络配置(可选)
虽然你的现有配置已经满足明文流量要求,但可以确认network_security_config.xml无语法错误,同时AndroidManifest.xml中的android:usesCleartextTraffic="true"已正确应用。
内容的提问来源于stack exchange,提问作者Behruz Sherov
相关产品推荐
相关产品推荐

