《第10讲:网络请求桥接:从 Flutter 发起 HTTP 请求》
本文介绍了在Flutter与鸿蒙混合开发中实现网络请求桥接的方法。由于企业内网、HTTPS证书校验等场景需要原生层统一处理网络请求,以及部分设备禁用WebView网络功能,因此提出了通过ArkTS实现HTTP客户端并注册到WebView的解决方案。文章详细展示了ArkTS的NetworkBridge实现、WebView注册过程以及Flutter侧的调用方式,并总结了该方案的三大优势:统一网络监控、
·
第10篇:网络请求桥接:从 Flutter 发起 HTTP 请求
# Flutter × 鸿蒙实战30讲(10):网络请求桥接:从 Flutter 发起 HTTP 请求
> 作者:烟云任平生
> 发布时间:2025年12月10日
> 标签:`#Flutter` `#OpenHarmony` `#网络请求` `#HTTP` `#CSDN`
---
### 一、为什么需要桥接?
虽然 Flutter Web 可直接发起 `fetch()` 请求,但在 **企业内网、HTTPS 证书校验、统一拦截** 等场景下,需由原生层统一处理网络。
此外,部分设备禁用 WebView 网络,必须走原生通道。
---
### 二、ArkTS 实现 HTTP 客户端
```ts
// networkBridge.ts
import http from '@ohos.net.http';
export class NetworkBridge {
static async request(url: string, options: any = {}): Promise<string> {
return new Promise((resolve, reject) => {
const req = http.createHttp();
req.request(
url,
{
method: options.method || http.RequestMethod.GET,
header: options.headers || {},
extraData: options.body
},
(err, data) => {
if (err) {
reject(err);
} else {
resolve(data.result as string);
}
req.destroy();
}
);
});
}
}
三、注册到 WebView
// MainPage.ets
aboutToAppear() {
this.controller.registerJavaScriptProxy({
object: {
httpGet: async (url: string) => {
try {
const result = await NetworkBridge.request(url);
return result;
} catch (e) {
return JSON.stringify({ error: e.message });
}
}
},
name: "HttpAPI",
interface: ["httpGet"]
});
}
四、Flutter 侧调用
Future<String> fetchData(String url) async {
final bridge = html.window['HttpAPI'];
if (bridge == null) {
// 降级:直接 fetch
final resp = await html.window.fetch(url);
return await resp.text();
}
// 走原生通道
final result = await bridge.callMethod('httpGet', [url]);
if (result is String) {
final json = jsonDecode(result);
if (json['error'] != null) throw Exception(json['error']);
return result;
}
return '';
}
五、优势与适用场景
✅ 统一网络监控:可在 ArkTS 层记录日志、埋点
✅ 绕过 WebView 限制:某些设备 WebView 禁网
✅ 支持自定义证书:在 http.createHttp() 中配置 SSL
🔜 下一篇预告:《第11讲:获取设备信息:型号、OS版本、屏幕DPI》
❤️ 如果这篇帮你解决了网络兼容问题,请点赞支持!
更多推荐


所有评论(0)