跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Dart大前端

Flutter 与 OpenHarmony 集成:基于 package:web 的 Wasm GC 与 DOM 互操作

Flutter 中 package:web 库的使用,该库基于最新 JS Interop 机制并支持 Wasm GC。文章分析了其在 OpenHarmony 环境下的适配场景,区分了原生 HAP 编译与 Flutter Web 运行在 WebView 中的不同情况。提供了 DOM 操作、JS 函数调用及与鸿蒙系统桥接对象交互的代码示例,旨在帮助开发者掌握新一代 Dart Web 互操作技术以应对混合架构开发需求。

LinuxPan发布于 2026/4/6更新于 2026/10/17109 浏览
Flutter 与 OpenHarmony 集成:基于 package:web 的 Wasm GC 与 DOM 互操作

请添加图片描述

前言

随着 Flutter 3.x 全面拥抱 Wasm(WebAssembly),Dart 团队推出了全新的 package:web 来取代老旧的 dart:html。 package:web 是基于最新的 JS Interop 机制构建的,它不仅性能更好,而且兼容 Wasm GC 标准。

虽然这个库通过名字看是为'Web'平台的,但对于 OpenHarmony 开发者来说,了解它有着特殊的意义:

  1. 混合开发:鸿蒙原生支持 ArkWeb (WebView),在 Flutter 中通过 JS 互操作与 Web 页面交互是常见需求。
  2. 架构演进:理解 package:web 的设计有助于理解 Dart 如何与宿主环境(无论是 Browser 还是 Embedder)进行高效通信。

(注:本库主要用于 Flutter Web 目标平台。在鸿蒙 App 原生端,通常使用 flutter_inappwebview 或 js 库进行 JS 交互。但如果你的鸿蒙应用采用了'Flutter Web 运行在鸿蒙 WebView 中'的架构,本库就是核心)。

一、核心原理

package:web 不再封装很重的 Dart 对象,而是直接将 Dart 类型映射到 JS 对象(Zero-cost interop)。

@JS() Annotation
Wasm / JS
Dart Code
JS Interop Layer
浏览器 DOM / JS Context

二、OpenHarmony 适配说明

场景一:Flutter App 编译为 HAP (原生) 此时 package:web不可用,因为底层没有 V8/SpiderMonkey 引擎环境。你应该使用 plugin 机制与 ArkTS 通信。

场景二:Flutter Web 运行在鸿蒙浏览器/WebView 此时 package:web完全可用,且是官方推荐方案。你可以用它来调用鸿蒙浏览器暴露给 JS 的特殊能力。

三、基础用例 (Web 环境)

在这里插入图片描述

3.1 操作 DOM (新一代 API)
import 'package:web/web.dart' as web;

void main() {
  // 💡 无需 dart:html,直接操作宿主 DOM
  final div = web.document.createElement('div') as web.HTMLDivElement;
  div.innerText = 'Hello from Modern Dart Web!';
  div.style.backgroundColor = 'blue';
  web.document.body?.append(div);
}

在这里插入图片描述

3.2 调用 JS 函数
// 假设 JS 环境中有一个函数:function showAlert(msg) { alert(msg); }
import 'dart:js_interop';

@JS()
external void showAlert(JSString message);

void callJs() {
  showAlert('HarmonyOS Web'.toJS);
}

在这里插入图片描述

四、完整实战示例:鸿蒙 ArkWeb 中的 JS 互操作

本示例展示了在 Flutter Web 编译模式下,如何利用 package:web 与鸿蒙宿主环境进行高效通信。

import 'dart:js_interop';
import 'package:web/web.dart' as web;

// 💡 模拟鸿蒙系统注入的全局 JS 桥接对象
@JS('OhosBridge')
extension type OhosBridge._(JSObject _) implements JSObject {
  external static JSString getDeviceId();
  external static void onActionSuccess(JSString data);
}

void callHarmonyOS() {
  // 1. 检查对象是否存在
  if (web.window.has('OhosBridge')) {
    // 2. 直接获取设备 ID
    final id = OhosBridge.getDeviceId().toDart;
    print('✅ 获取到鸿蒙设备 ID: $id');
  }
}

在这里插入图片描述

五、总结

package:web 是 Dart 迈向 Wasm 时代的关键一步。 虽然它主要面向 Web 平台,但在'大前端'融合的今天,鸿蒙应用中嵌入 Web 页面、小程序的情况比比皆是。掌握新一代的 JS 互操作技术,能让你在混合架构开发中游刃有余。

目录

  1. 前言
  2. 一、核心原理
  3. 二、OpenHarmony 适配说明
  4. 三、基础用例 (Web 环境)
  5. 3.1 操作 DOM (新一代 API)
  6. 3.2 调用 JS 函数
  7. 四、完整实战示例:鸿蒙 ArkWeb 中的 JS 互操作
  8. 五、总结

更多推荐文章

查看全部
  • Flutter package:web 在 OpenHarmony 中的 Wasm GC 与 DOM 互操作适配
  • FASTLIVO2 算法解析与实战(一):系统架构与核心模块详解
  • LLaMA2 模型架构深度解析
  • Flutter for OpenHarmony 项目 Lint 静态检查配置实战
  • Next AI Draw.io 开源项目部署与使用指南:一句话生成流程图
  • 基于 AI Ping 的大模型 API 统一接入与成本优化实践
  • 深入理解 AI 中的 Skills:定义、用法与 Java 实战
  • Flutter for OpenHarmony:通义万相 AIGC 联调与相册持久化
  • Flutter for OpenHarmony 系列四:通义万相 AIGC 联调与相册持久化
  • IoT 无人机安全测试实战:信息收集与服务探测
  • 机器人工具坐标系精准标定:资深工程师的高效实战流程
  • Python 深度学习:ResNext 网络核心原理与分组卷积解析
  • AD4630 四通道 SPI 模式配置与采集 FPGA 设计
  • Spring AOP 核心概念与实战入门
  • MES 系统功能架构与常用功能设计
  • Flutter 三方库 cached_query 为鸿蒙应用打造高性能声明式数据缓存系统
  • Flume 架构深度解析:构建高可用大数据采集系统
  • Flume架构深度解析:构建高可用大数据采集系统
  • Midjourney AI 图像生成器使用教程详解
  • 机器学习:特征缩放与标准化

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online