Flutter通知管理插件eazy_notification的使用
Flutter通知管理插件eazy_notification的使用
本文将介绍如何使用Flutter的通知管理插件eazy_notification来处理不同平台的通知。此插件通过桥接其他通知包(如Awesome Notifications、Local Notifier和Elegant Notifications)来为每个平台提供通知功能。
1. 定制基于平台的通知
注意:对于每个平台,都需要按照相应平台的要求进行必要的初始化。
2. 创建并初始化通知服务
该插件使用mplatform来确定当前运行的平台。
步骤:
1. 创建通知服务实例
根据当前平台选择不同的通知服务类。
final EazyNotificationService _service = switch (Mplatform.current) {
Mplatform.ios => MobileNotificationService(
channels: NotificationChannelEnum.values.map((e) => e.channel).toList(),
channelGroups: NotificationChannelEnum.values.map((e) => e.channelGroup).toList(),
),
Mplatform.android => MobileNotificationService(
channels: NotificationChannelEnum.values.map((e) => e.channel).toList(),
channelGroups: NotificationChannelEnum.values.map((e) => e.channelGroup).toList(),
),
Mplatform.web => WebNotificationService(),
Mplatform.fuchsia => WebNotificationService(),
Mplatform.linux => DesktopNotificationService(appName: AppConfig.appName),
Mplatform.windows => DesktopNotificationService(appName: AppConfig.appName),
Mplatform.macos => DesktopNotificationService(appName: AppConfig.appName),
};
2. 在main()函数中初始化服务
在应用启动时调用init()方法来初始化通知服务。
await _service.init();
3. 显示通知
使用pushNotification方法向用户发送通知。
bool sent = await _service.pushNotification(
context: context,
desktopOptions: desktopOptions,
mobileOptions: mobileOptions,
webOptions: webOptions,
);
3. Android 和 iOS 平台
Android 和 iOS 平台使用Awesome Notifications插件来实现通知功能。
创建通知选项
class MobileOptions {
NotificationChannel channel;
int notificationId;
String title;
String message;
bool requireInputText = false;
bool wakeUpScreen = false;
bool locked = false;
bool autoDismissible = true;
Duration? timeout;
Duration? chronometer;
ActionType actionType = ActionType.Default;
NotificationLayout notificationLayout = NotificationLayout.BigText;
NotificationCategory notificationCategory = NotificationCategory.Event;
String? bigPicture;
String? largeIcon;
String? icon;
Map<String, String?>? payload;
List<NotificationActionButton> actions = const [];
NotificationCalendar? schedule;
Future<bool> Function()? hasAllowedPermissionRational;
MobileOptions({
required this.channel,
required this.notificationId,
required this.title,
required this.message,
this.requireInputText = false,
this.wakeUpScreen = false,
this.locked = false,
this.autoDismissible = true,
this.timeout,
this.chronometer,
this.actionType = ActionType.Default,
this.notificationLayout = NotificationLayout.BigText,
this.notificationCategory = NotificationCategory.Event,
this.bigPicture,
this.largeIcon,
this.icon,
this.payload,
this.actions = const [],
this.schedule,
this.hasAllowedPermissionRational,
});
}
请求通知权限
在iOS和Android上请求通知权限时,可以使用以下代码:
Future<bool> hasAllowedPermissionRational(BuildContext context) async {
bool allowed = false;
await showGenericDialog(
context: context,
title: '允许通知',
brief: '我们希望通知您更新信息',
confirmButtonText: '允许',
onConfirm: (c) async {
Navigator.of(context).pop();
allowed = true;
},
denyButtonText: '稍后再说',
onDeny: (c) async {
Navigator.of(context).pop();
allowed = false;
},
);
return allowed;
}
4. Windows、Linux 和 macOS 平台
桌面端使用Local Notifier插件来实现通知功能。
创建通知选项
class DesktopOptions {
String notificationId;
String title;
String? subTitle;
String message;
bool silent;
Function(LocalNotification)? onShow;
Function(LocalNotificationCloseReason)? onClose;
Function(LocalNotification)? onClick;
Function(int)? onClickAction;
DesktopOptions({
required this.notificationId,
required this.title,
this.subTitle,
required this.message,
this.silent = true,
this.onShow,
this.onClose,
this.onClick,
this.onClickAction,
});
}
5. Web 平台
Web 端使用Elegant Notifications插件来实现通知功能。
创建通知选项
class WebOptions {
final Widget? title;
final Widget description;
final Widget icon;
final Function() onDismiss;
final ProgressIndicatorBar? progressIndicator;
final NotificationAction? notificationAction;
final NotificationCloseButton? notificationCloseButton;
final NotificationStyle? notificationStyle;
final bool autoDismiss;
WebOptions({
this.title,
required this.description,
required this.icon,
required this.onDismiss,
this.progressIndicator,
this.notificationAction,
this.notificationCloseButton,
this.notificationStyle,
this.autoDismiss = true,
});
}
更多关于Flutter通知管理插件eazy_notification的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter通知管理插件eazy_notification的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
eazy_notification 是一个用于 Flutter 的应用内通知管理插件,它允许开发者在应用程序中创建和管理通知,而无需依赖系统级别的通知。这个插件非常适合需要在应用内显示通知的场景,比如聊天应用中的消息提醒、任务提醒等。
安装 eazy_notification
首先,你需要在 pubspec.yaml 文件中添加 eazy_notification 依赖:
dependencies:
flutter:
sdk: flutter
eazy_notification: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get 来安装依赖。
基本用法
1. 初始化 EazyNotification
在使用 eazy_notification 之前,你需要在应用的启动阶段初始化它。通常在 main.dart 文件中进行初始化:
import 'package:eazy_notification/eazy_notification.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 EazyNotification
await EazyNotification.initialize();
runApp(MyApp());
}
2. 显示通知
你可以使用 EazyNotification.show 方法来显示一个应用内通知:
import 'package:eazy_notification/eazy_notification.dart';
void showNotification() {
EazyNotification.show(
title: '新消息',
message: '你有一条新的未读消息',
payload: 'message_id_123', // 可选,用于传递数据
);
}
3. 处理通知点击事件
当用户点击通知时,你可以通过监听 EazyNotification.onNotificationClicked 来处理点击事件:
import 'package:eazy_notification/eazy_notification.dart';
void handleNotificationClick() {
EazyNotification.onNotificationClicked.listen((payload) {
print('通知被点击,payload: $payload');
// 在这里处理通知点击后的逻辑
});
}
4. 自定义通知样式
eazy_notification 允许你自定义通知的样式。你可以通过 EazyNotification.show 方法的 style 参数来设置通知的样式:
import 'package:eazy_notification/eazy_notification.dart';
void showCustomNotification() {
EazyNotification.show(
title: '自定义通知',
message: '这是一个自定义样式的通知',
style: NotificationStyle(
backgroundColor: Colors.blue,
titleColor: Colors.white,
messageColor: Colors.white,
icon: Icons.notifications,
),
);
}
5. 取消通知
你可以通过 EazyNotification.cancel 方法来取消显示的通知:
import 'package:eazy_notification/eazy_notification.dart';
void cancelNotification() {
EazyNotification.cancel();
}
完整示例
以下是一个完整的示例,展示了如何使用 eazy_notification 来显示和处理通知:
import 'package:flutter/material.dart';
import 'package:eazy_notification/eazy_notification.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await EazyNotification.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: NotificationDemo(),
);
}
}
class NotificationDemo extends StatefulWidget {
[@override](/user/override)
_NotificationDemoState createState() => _NotificationDemoState();
}
class _NotificationDemoState extends State<NotificationDemo> {
[@override](/user/override)
void initState() {
super.initState();
handleNotificationClick();
}
void handleNotificationClick() {
EazyNotification.onNotificationClicked.listen((payload) {
print('通知被点击,payload: $payload');
// 在这里处理通知点击后的逻辑
});
}
void showNotification() {
EazyNotification.show(
title: '新消息',
message: '你有一条新的未读消息',
payload: 'message_id_123',
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('EazyNotification Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: showNotification,
child: Text('显示通知'),
),
),
);
}
}

