Flutter serial 库鸿蒙化适配:Web 串口通信与硬件连接指南
在鸿蒙(OpenHarmony)系统的工业平板、手持 PDA 及桌面协同场景中,如何通过 Web 容器直接操控外部硬件设备(如扫码枪、打印机、传感器)?serial 作为一个优秀的 window.navigator.serial API 的 Flutter 封装库,为鸿蒙开发者提供了跨平台的硬件底座。本文将深入探讨其在鸿蒙生态中的适配要点。
前言
什么是 Web Serial?它允许鸿蒙应用内的 Web 组件直接请求访问用户的串行设备。在 Flutter for OpenHarmony 的实际开发中,serial 库抹平了异步流读取、波特率配置及端口管理在不同平台上的差异。对于构建需要'触达硬件'的鸿蒙工业级 Web 应用来说,它是核心连接器。
一、原理分析 / 概念介绍
1.1 硬件通信拓扑
serial 库主要作为底层浏览器 API 的强类型桥接层。
graph LR
A["鸿蒙应用 UI (Web/Flutter)"] --> B["serial (Dart Wrapper)"]
B -- "Promise / Stream" --> C["Ohos Webview (Native Serial Engine)"]
C -- "HAL / NDK" --> D["鸿蒙系统串口驱动 (UART/USB)"]
D -- "TX/RX" --> E["外部硬件外设"]
1.2 为什么在鸿蒙上使用它?
- 零驱动依赖:利用鸿蒙内置 Webview 的标准能力,无需额外编写复杂的 FFI 桥接。
- 强类型流控:通过 Dart Stream 优雅地管理数据接收,避免传统回调(Callback)带来的逻辑地狱。
- 动态选配:支持运行时动态发现串口,适配鸿蒙设备多变的扩展硬件环境。
二、鸿蒙基础指导
2.1 适配情况
- 核心限制:该库目前主要基于 Web 标准。在鸿蒙端,它依赖于底层的浏览器内核支持
navigator.serial。对于鸿蒙原生(Native)应用,如需直接操作/dev/tty,可能需要额外配合 FFI 进行适配。 - 鸿蒙权限:需在
module.json5中确保开启相关的 USB 和硬件访问权限,并在 Webview 层开启串口权限请求的拦截。 - 平台特性:需关注鸿蒙系统的 USB OTG(On-The-Go)自动识别与权限弹窗策略。
2.2 安装配置
在鸿蒙项目的 pubspec.yaml 中添加依赖:
dependencies:
serial: ^0.0.7+1
三、核心 API / 组件详解
3.1 核心调用类与方法
| 类/方法 | 功能描述 | 鸿蒙端用法建议 |
|---|---|---|
Serial.requestPort() | 弹出硬件请求对话框 | 用于手动触发硬件授权 |
SerialPort.open() | 开启串口 | 需配置波特率(9600/115200 等) |
readable.stream | 接收数据流 | 核心接收闭环 |
writable.getWriter() |

