Flutter 连接真实手机设备时无法使用localhost
2023-03-16
801 字约 3 分钟
...在使用Flutter编写手机app时,开发过程中想要通过调用本地的后台服务来获取数据,但是每次都会报错:
SocketException: OS Error: Connection refused, errno = 111, address = localhost, port = 38396
这里调用时的api请求路径:http:localhost:10086/auth
之前因为忙于开发,查了下资料都没有解决问题,时间紧,任务重,就直接将后台api部署到云环境,通过调用云函数来获取数据。但是这样做,每次修改api都得部署到云环境上,app才能正确获取数据,很麻烦,但是当时也没有其他的办法和时间,所以将就了。
现在开发阶段已经结束了,趁着有时间,再回过头来调查,经过测试,已完美解决该问题,能够通过调用本地后台api获取数据。深层次的原因还没调查到,待日后调查到根本原因后再记录,这里只记录一下解决方案。
1.首先,我们访问本地后台api时的http请求不能使用 http:localhost:10086/auth 这样的URL,或者 http:127.0.0.1:10086/auth 这样的也不行,需要将这里的 localhost 或 127.0.0.1 替换成 本机的真实 IPv4 地址,例如 192.166.1.12 (获取本机ip地址方式可以参考:Linux获取本机ip 或 Windows获取本机ip),替换后的请求地址就变成了 http:192.166.1.12:10086/auth
2.找到 android/app/src/main/AndroidManifest.xml 这个文件,如果没有就自己创建一个,然后添加如下内容:
1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2. package="com.example.my_app">
3. <application
4. android:label="my_app"
5. android:icon="@mipmap/ic_launcher"
6. android:usesCleartextTraffic="true"
7. >
8. <activity
9. android:name=".MainActivity"
10. android:launchMode="singleTop"
11. android:theme="@style/LaunchTheme"
12. android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
13. android:hardwareAccelerated="true"
14. android:windowSoftInputMode="adjustResize">
15. <!-- Specifies an Android theme to apply to this Activity as soon as
16. the Android process has started. This theme is visible to the user
17. while the Flutter UI initializes. After that, this theme continues
18. to determine the Window background behind the Flutter UI. -->
19. <meta-data
20. android:name="io.flutter.embedding.android.NormalTheme"
21. android:resource="@style/NormalTheme"
22. />
23. <!-- Displays an Android View that continues showing the launch screen
24. Drawable until Flutter paints its first frame, then this splash
25. screen fades out. A splash screen is useful to avoid any visual
26. gap between the end of Android's launch screen and the painting of
27. Flutter's first frame. -->
28. <meta-data
29. android:name="io.flutter.embedding.android.SplashScreenDrawable"
30. android:resource="@drawable/launch_background"
31. />
32. <intent-filter>
33. <action android:name="android.intent.action.MAIN"/>
34. <category android:name="android.intent.category.LAUNCHER"/>
35. </intent-filter>
36. </activity>
37. <!-- Don't delete the meta-data below.
38. This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
39. <meta-data
40. android:name="flutterEmbedding"
41. android:value="2" />
42. </application>
43. <uses-permission android:name="android.permission.INTERNET" />
44. </manifest>
其中重要的是

添加后就像这样:
如果是IOS,需要将下面这段添加到 ios/Runner/info.plist文件中
1. <key>NSAppTransportSecurity</key>
2. <dict>
3. <key>NSAllowsArbitraryLoads</key>
4. <true/>
5. </dict>
再次编译运行,成功。
如果您觉得这篇文章有帮助,请点个赞吧~
相关文章
更多文章 →flutter2026-10-14
Flutter Android 正式签名实战:生成密钥、配置构建与验证 APK
Flutter Android 正式签名实战:生成密钥、配置构建与验证 APK Android 正式签名不需要购买证书。开发者可以自己生成密钥,用它给 APK 签名;密钥的用途是建立稳定的应用身份。签名有效并不等于应用已经通过商店审核,也不等于应用功能已完成真机验收。 本文面向 Flutter Android 项目,介绍从开发签名切换到独立正式签名的完整流程。应用名称、目录、包名和证书信息均使用通用示例,不包含真实项目密码、私钥、签名指...
学习
flutter2026-10-14
Flutter 新版本发布实战:完整安装包与 Shorebird 热更新
一、先判断该发完整包还是补丁 | 这次改动 | 发布方式 | | | | | Dart 文案、Flutter 页面布局、业务逻辑修复 | 通常可以发布补丁 | | 纯 Dart 依赖变化 | 可以尝试补丁构建,仍需验证兼容性 | | Kotlin、Java、Swift、Objective C 或原生构建配置变化 | 发布完整包 | | 插件的原生实现变化、新增原生插件、权限变化 | 发布完整包 | | 新增或修改打包图片、字体、应用图标...
学习
flutter2026-07-01
Dart 入门回顾
1\. Dart 是什么 Dart 是一门类型安全、支持面向对象、支持异步编程的语言。它的语法和 JavaScript、TypeScript、Java、C# 都有一些相似之处。 Dart 常见使用场景: Flutter 跨平台应用开发 命令行工具 Web 应用 服务端接口或脚本 作为学习现代类型语言的入口 Dart 的几个核心特点: 静态类型:变量、函数返回值、参数都有类型。 类型推断:很多时候可以用 ,让 Dart 自动推断类型。 空...
学习
flutter2026-07-01
Flutter 常用 Widget 入门
Flutter 的核心思想是:一切皆 Widget。文字、图片、按钮、页面结构、布局、间距、滚动、动画、手势,几乎都由 Widget 组合出来。 1\. Widget 先分成几类理解 | 类别 | 常用 Widget | 解决什么问题 | | | | | | 应用入口 | 、 | 搭建应用外壳、主题、路由 | | 页面骨架 | 、 、 | 标准页面结构 | | 基础显示 | 、 、 | 显示文字、图标、图片 | | 布局容器 | 、 、...
学习
flutter2024-11-21
在 Flutter 中使用 webview_flutter 4.0
1. 2. ,已入选 3. 4. 本文是第 4 篇,定位是新手入门,介绍和演示 webview 的基础用法。最后还介绍了事件处理的技巧。因为是补写的,所以本来应该首发的却发在最后了。 环境准备已经在 说过了,不再赘述。既然是新手入门,就会本着详尽的原则,而且会多配示例。 获取页面信息 获取页面 title 核心方法:controller.getTitle 完整示例,放在 main.dart 就能运行。运行示例,点击获取 title 的按...
学习
flutter2024-11-06
flutter android端运行报错Namespace not specified. Specify a namespace in the module‘s build file
在使用flutterSDK 3.24之后发现新建项目,项目默认都是基于AGP8了,由于 AGP 开始强制要求 namespace 配置,不仅仅是主工程,也包括第三方库都强制要求 namespace 。但是我们在引入第三方库的时候会发现部分库没能及时的去做相关配置,这也就导致了我们会出现标题错误: 出现这个问题,我们可能会通过去找到本地缓存的第三方库代码去修改它的build.gradle和AndroidManifest.xml来解决缺失...
学习
评论
请登录后发表评论
去登录