开源鸿蒙与 Flutter 常用组件封装实战(续)
开源鸿蒙组件封装方法
开源鸿蒙(OpenHarmony)的组件封装通常基于 ArkUI 框架。以封装一个自定义按钮为例:
- 定义组件属性 :通过
@Component装饰器声明组件,使用@Prop或@State定义可交互属性。 - 样式与布局 :结合
Flex或Stack布局,通过.width()、.height()等方法设置样式。 - 事件绑定 :使用
onClick或手势事件(如PanGesture)实现交互逻辑。
示例代码:
typescript
@Component
struct CustomButton {
@Prop label: string = 'Click'
@State isPressed: boolean = false
build() {
Column() {
Text(this.label)
.fontSize(20)
.opacity(this.isPressed ? 0.6 : 1)
}
.onClick(() => {
this.isPressed = !this.isPressed
})
}
}
Flutter 组件封装方法
Flutter 中封装组件通常继承 StatelessWidget 或 StatefulWidget。以封装一个带图标的按钮为例:
- 参数定义 :通过构造函数传递必要参数(如
icon、onPressed)。 - 组合现有组件 :利用
Icon、ElevatedButton等内置组件组合功能。 - 主题适配 :通过
Theme.of(context)动态获取应用主题颜色。
示例代码:
dart
class IconButton extends StatelessWidget {
final IconData icon;
final VoidCallback onPressed;
const IconButton({required this.icon, required this.onPressed});
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onPressed,
child: Icon(icon),
style: ElevatedButton.styleFrom(
primary: Theme.of(context).primaryColor,
),
);
}
}
跨平台组件适配策略
- 抽象共性接口 :定义统一的组件接口(如
onPress、disabled),减少平台差异。 - 平台判断逻辑 :使用条件编译或运行时检查(如
Platform.isAndroid)区分实现。 - 性能优化:避免频繁跨平台通信,将复杂逻辑下沉到原生层。
调试与测试要点
- 鸿蒙 DevEco Studio:利用预览器实时调试 UI 布局,查看组件树结构。
- Flutter Hot Reload :快速验证组件样式修改,结合
flutter_test编写单元测试。 - 日志输出:在关键生命周期方法中添加日志,便于追踪交互问题。
进阶实践建议
- 主题系统集成:封装支持动态换肤的组件,统一管理颜色和字体资源。
- 动画封装 :在鸿蒙中使用
animateTo,在 Flutter 中使用AnimationController实现平滑过渡。 - 无障碍支持 :为组件添加语义化标签(如
Semanticsin Flutter),提升可访问性。
flutter 有个组件叫做 image_cropper ,近期这个组件也进行了鸿蒙化操作,只不过再使用的时候,我们需要基于这个插件 imagecropper_ohos 进行鸿蒙裁剪图片组件的封装。还是老样子,我们借助官方文档和示例代码来研究怎么使用。插件网址如下:
首先,我们将这个仓库下载到本地。

解压后,我们找到这个路径下的文件:

打开中断使用flutter pub get 下载依赖:
接着,我们执行 flutter run,一会后报错提示ohos工程要签名,我们在Dev Eco中进行自动签名:

重新执行flutter run,一会后应用运行在手机上

