Flutter鸿蒙、安卓适配Dio两步搞定
·
在 Flutter 鸿蒙(OpenHarmony)项目里,把 Dio 跑通只需要做两件事:
- 给鸿蒙侧声明网络权限;
- 在 Dart 侧把 Dio 的 IOHttpClientAdapter 替换成鸿蒙兼容的实现。
下面按“权限 → 代码 → 打包”三步一次性配好,复制即可用。
一、鸿蒙权限(必须)
文件:ohos/entry/src/main/module.json5
在 requestPermissions 节点里加一行:
"requestPermissions": [
{ "name": "ohos.permission.INTERNET" }
]
不加会在真机/模拟器里直接报 403,日志里连请求都不会发出去 。
二、Dart 侧 Dio 初始化(鸿蒙适配)
pubspec.yaml 先引依赖:
dependencies:
dio: ^5.4.0 # 最新稳定版即可
dio/io.dart: ^5.4.0 # 带出 IOHttpClientAdapter
建一个单例 DioManager(直接拷):
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:dio/io.dart';
class DioManager {
static final DioManager _inst = DioManager._();
factory DioManager() => _inst;
DioManager._();
late final Dio dio = _create();
Dio _create() {
final dio = Dio(BaseOptions(
baseUrl: 'https://api.xxx.com', // 换成你的
connectTimeout: const Duration(seconds: 8),
receiveTimeout: const Duration(seconds: 8),
responseType: ResponseType.json,
));
// 统一拦截器示范
dio.interceptors.add(InterceptorsWrapper(
onRequest: (opt, handler) {
opt.headers['Authorization'] = 'Bearer $YOUR_TOKEN';
return handler.next(opt);
},
onError: (e, handler) {
// 可统一弹 Toast
return handler.next(e);
},
));
return dio;
}
}
这样就能在鸿蒙真机/模拟器里正常走 https/http 了 。
三、常见问题速查
| 现象 | 原因 | 解决 |
|---|---|---|
| 模拟器报 403/无日志 | 没加 ohos.permission.INTERNET | 检查 module.json5 |
| 访问电脑本地 localhost 失败 | 鸿蒙模拟器把 localhost 映射到自己 | 把 baseUrl 换成电脑局域网 IP,如 http://192.168.1.8:8080 |
| https 证书报错 | 用了自签证书 | IOHttpClientAdapter 里加 badCertificateCallback 返回 true(仅调试) |
四、Android 侧(若同时出 Android 包)
android/app/src/main/AndroidManifest.xml 里老规矩:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
iOS 侧 Info.plist 如果走 http 再加 ATS 即可,与鸿蒙无关。
完成上面 1+2 步,Flutter+Dio 在鸿蒙就通了;后续再把业务拦截器、Cookie、缓存等按常规 Dio 做法叠加上去即可。祝开发顺利!
更多推荐


所有评论(0)