在 Flutter 鸿蒙(OpenHarmony)项目里,把 Dio 跑通只需要做两件事:

  1. 给鸿蒙侧声明网络权限;
  2. 在 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 做法叠加上去即可。祝开发顺利!

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐