Flutter for OpenHarmony:web 拥抱 Web 标准的桥梁(Wasm GC 与 DOM 互操作) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:web 拥抱 Web 标准的桥梁(Wasm GC 与 DOM 互操作) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

请添加图片描述

前言

随着 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_inappwebviewjs 库进行 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;voidmain(){// 💡 无需 dart:html,直接操作宿主 DOMfinal div = web.document.createElement('div')asweb.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()externalvoidshowAlert(JSString message);voidcallJs(){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 _)implementsJSObject{externalstaticJSStringgetDeviceId();externalstaticvoidonActionSuccess(JSString data);}voidcallHarmonyOS(){// 1. 检查对象是否存在if(web.window.has('OhosBridge')){// 2. 直接获取设备 IDfinal id =OhosBridge.getDeviceId().toDart;print('✅ 获取到鸿蒙设备 ID: $id');}}
在这里插入图片描述

五、总结

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

Read more

Ubuntu 20.04/22.04 下通过 NVM 安装 Node.js 22(LTS 稳定版)

引言 Node.js 是前端开发、后端服务开发的核心环境,而 NVM(Node Version Manager)作为跨平台的 Node.js 版本管理器,能轻松实现多版本 Node.js 切换、安装与卸载,避免版本冲突问题。本文将详细介绍在 Ubuntu 系统中通过 NVM 安装 Node.js 22(LTS 稳定版)的完整步骤,操作简单且适配主流 Ubuntu 版本,适合开发新手与进阶用户。 一、准备工作:安装依赖工具 curl Ubuntu 系统默认可能未预装 curl 工具,而后续安装 NVM 需要通过 curl 下载脚本,因此首先需执行以下命令安装 curl:

By Ne0inhk
Spring Boot 消息队列与异步通信

Spring Boot 消息队列与异步通信

Spring Boot 消息队列与异步通信 21.1 学习目标与重点提示 学习目标:掌握Spring Boot消息队列与异步通信的核心概念与使用方法,包括消息队列的定义与特点、Spring Boot与ActiveMQ的集成、Spring Boot与RabbitMQ的集成、Spring Boot与Kafka的集成、Spring Boot异步通信的基本方法、Spring Boot的实际应用场景,学会在实际开发中处理消息队列与异步通信问题。 重点:消息队列的定义与特点、Spring Boot与ActiveMQ的集成、Spring Boot与RabbitMQ的集成、Spring Boot与Kafka的集成、Spring Boot异步通信的基本方法、Spring Boot的实际应用场景。 21.2 消息队列概述 消息队列是Java开发中的重要组件。 21.2.1 消息队列的定义 定义:消息队列是一种异步通信机制,用于在应用程序之间传递消息。 作用: * 实现应用程序之间的异步通信。 * 实现应用程序之间的解耦。 * 提高应用程序的性能。 常见的消息队列: * Activ

By Ne0inhk
Flutter 组件 spinify 适配鸿蒙 HarmonyOS 实战:实时消息管道,构建全场景高性能 WebSocket 长连接架构

Flutter 组件 spinify 适配鸿蒙 HarmonyOS 实战:实时消息管道,构建全场景高性能 WebSocket 长连接架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 spinify 适配鸿蒙 HarmonyOS 实战:实时消息管道,构建全场景高性能 WebSocket 长连接架构 前言 在鸿蒙(OpenHarmony)生态迈向万物互联、涉及高频实时交互、流式数据同步或多人协同编辑的场景下,如何建立一套稳定、高效且具备自动愈合能力的长连接通道,已成为提升应用实时性体验的“关键枢轴”。在鸿蒙设备这类强调分布式协同与严苛能效管理的移动终端上,如果直接使用原生的 WebSocket 进行裸奔(Bare Metal)开发,由于由于缺乏完善的心跳机制、重连策略与频道管理,极易由于由于网络波动导致连接频繁断档,进而引发业务状态的不一致。 我们需要一种能够深度封装协议细节、支持大规模并发频道订阅且具备毫秒级重连恢复能力的实时通讯引擎。 spinify 为 Flutter 开发者提供了与 Centrifugo(高性能实时消息服务器)交互的高级客户端。它支持全双工通信、自动重连计数与消息序列确认(ACK)。在适配到鸿

By Ne0inhk
RAGFlow 登录界面点击登录无反应,控制台报错 502 Bad Gateway 解决方法

RAGFlow 登录界面点击登录无反应,控制台报错 502 Bad Gateway 解决方法

遇到的问题 在使用RAGFlow的时候,登录不进去,但是之前能登录。 还出现了输入地址直接进入工作界面,但是进行不了任何操作的bug;以及无法上传文档的问题(其实都是因为没登录)。 登陆界面报错如图显示。 解决方法 我按照官网readme里面写的快速启动的方法启动,就没有502的问题了。 1.先删除docker中ragflow的进程。 2.输入启动代码 在cmd(要在RAGFlow的docker文件夹目录下)输入 docker compose -f docker-compose.yml up -d 3.查看服务器状态 接下来服务器启动成功后再次确认服务器状态:docker logs -f ragflow-server 官网说了: 出现以下界面提示说明服务器启动成功: ____ ___ ______ ______ __ / __ \ / | / ____// ____// /____ _ __ / /_/ // /| | / / __ / /_ / // __ \| | /| / / / _, _// ___ |/ /_/ // __/ / // /_/ /

By Ne0inhk