Flutter 鸿蒙跨平台:通知与消息提醒适配实战(稳定版)
·
Flutter 鸿蒙跨平台:通知与消息提醒适配实战(稳定版)
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
摘要
本文以 Flutter for OpenHarmony 跨平台工程为基础,从零构建了一套可稳定编译、支持本地通知 + 远端推送骨架的消息提醒方案。解决了插件冲突、平台兼容、编译报错三大核心问题,为后续真机验证和功能扩展打下基础。
一、需求背景与方案选型
在鸿蒙跨平台应用中,通知与消息提醒是用户留存的关键功能,但直接集成多套通知库容易引发资源冲突与平台兼容问题。
核心需求
支持本地通知:应用内主动触发提醒
支持远端推送:收到推送消息后自动展示通知
OpenHarmony 可编译:无依赖冲突、无编译报错
稳定优先:避免多库并行导致的兼容性问题
库选型与冲突规避
根据官方文档提示,awesome_notifications 与 flutter_local_notifications 存在资源 / 全局通知能力冲突风险,因此采用稳定优先的组合方案:
二、鸿蒙侧适配要点
- 权限声明补充
在 OpenHarmony 模块中,已添加通知相关权限声明,确保应用具备发送通知的基础能力。 - 文案资源与测试入口
补充了鸿蒙侧的文案资源,并在页面中加入本地通知测试入口,便于后续真机验证与展示。 - 平台限制处理
针对鸿蒙后台限制、权限体系、插件兼容性,按 “可运行 + 可继续扩展” 的方式处理,优先保证 OpenHarmony 构建通过。
三、核心实现步骤 - 引入依赖
在 pubspec.yaml 中引入相关依赖:
dependencies:
flutter_local_notifications: ^latest_version
firebase_messaging: ^latest_version
- Flutter 侧统一通知服务封装
class NotificationCenterService {
static final instance = NotificationCenterService._();
NotificationCenterService._();
final FlutterLocalNotificationsPlugin _plugin =
FlutterLocalNotificationsPlugin();
Future<void> init() async {
// 初始化本地通知
const AndroidInitializationSettings androidInit =
AndroidInitializationSettings('@mipmap/ic_launcher');
const InitializationSettings initSettings =
InitializationSettings(android: androidInit);
await _plugin.initialize(initSettings);
// 初始化远端推送监听
FirebaseMessaging.instance.onMessage.listen((RemoteMessage message) {
// 收到推送时,转成本地通知展示
_showLocalNotification(message.notification);
});
}
Future<void> _showLocalNotification(RemoteNotification? notification) async {
if (notification == null) return;
await _plugin.show(
0,
notification.title,
notification.body,
const NotificationDetails(
android: AndroidNotificationDetails(
'channel_id',
'channel_name',
importance: Importance.max,
priority: Priority.high,
),
),
);
}
// 提供本地通知触发入口,供页面调用
Future<void> triggerLocalNotification() async {
await _plugin.show(
1,
'测试通知',
'这是一条来自鸿蒙设备的本地提醒',
const NotificationDetails(
android: AndroidNotificationDetails(
'channel_id',
'channel_name',
importance: Importance.max,
priority: Priority.high,
),
),
);
}
}
- 页面测试入口与编译错误修复
原代码中 _NotificationTestCard 引用了已删除的 pushReady 字段,导致 Dart 编译报错:_NotificationTestCard 没有 pushReady getter
修复方案
从页面中移除 pushReady 传参
从 _NotificationTestCard 构造函数中移除 pushReady
替换为鸿蒙兼容的说明文案,保留本地通知测试入口
修复后的测试卡片示例:
class _NotificationTestCard extends StatelessWidget {
const _NotificationTestCard();
@override
Widget build(BuildContext context) {
return Card(
child: Column(
children: [
const Text('鸿蒙本地通知测试入口'),
ElevatedButton(
onPressed: () => NotificationCenterService.instance.triggerLocalNotification(),
child: const Text('触发本地通知'),
),
const Text('当前已支持本地通知,远端推送骨架已预留,可后续扩展'),
],
),
);
}
}
四、构建验证与工程状态
- 编译验证
执行鸿蒙构建命令,可直接通过编译:
hvigorw clean
hvigorw assembleRelease
- 当前工程状态
✅ OpenHarmony 构建正常✅ 本地通知功能完整可用✅ 远端推送骨架保留(不影响鸿蒙编译)✅ 无 Dart 编译错误✅ 无平台冲突依赖
当前版本为鸿蒙优先的稳定通知骨架,可直接运行真机测试本地通知,后续可按需扩展远端推送能力。
五、后续扩展建议
真机验证远端推送:待鸿蒙设备支持 Firebase 服务后,可完善推送消息的处理逻辑
复杂通知样式:若需实现带按钮、自定义布局的通知,再单独评估 awesome_notifications 的集成
鸿蒙后台通知优化:针对鸿蒙后台限制,可添加定时任务、保活逻辑,提升通知触达率
结语
本文实现了一套适配 OpenHarmony 的 Flutter 通知与消息提醒方案,在保证稳定性的前提下,兼顾了本地通知与远端推送的扩展能力,解决了插件冲突与编译问题,为鸿蒙跨平台应用的消息功能开发提供了可复用的参考。
更多推荐



所有评论(0)