Flutter通知管理插件eazy_notification的使用

Flutter通知管理插件eazy_notification的使用

本文将介绍如何使用Flutter的通知管理插件eazy_notification来处理不同平台的通知。此插件通过桥接其他通知包(如Awesome NotificationsLocal NotifierElegant 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

1 回复

更多关于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('显示通知'),
        ),
      ),
    );
  }
}
回到顶部