import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:timezone/data/latest_all.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
class LocalNotificationsService {
int id = 0;
LocalNotificationsService._();
static final _instance = LocalNotificationsService._();
factory LocalNotificationsService() => _instance;
FlutterLocalNotificationsPlugin? _flutterLocalNotificationsPlugin;
Future selectNotification(String? payload) async {
// 处理通知点击事件
if (payload != null) {
debugPrint('notification payload: ' + payload);
}
}
Future<FlutterLocalNotificationsPlugin> initialize() async {
// 初始化插件
_flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
// 配置插件
// 配置Android初始化设置
const AndroidInitializationSettings androidInitializationSettings =
AndroidInitializationSettings('icon_notification');
// 配置iOS和macOS的初始化设置
const DarwinInitializationSettings darwinInitializationSettings =
DarwinInitializationSettings();
// 配置Linux的初始化设置
const LinuxInitializationSettings linuxInitializationSettings =
LinuxInitializationSettings(defaultActionName: 'default_action');
// 配置所有平台的初始化设置
const InitializationSettings initializationSettings =
InitializationSettings(
android: androidInitializationSettings,
iOS: darwinInitializationSettings,
macOS: darwinInitializationSettings,
linux: linuxInitializationSettings,
);
// 使用配置初始化插件
await _flutterLocalNotificationsPlugin!.initialize(
initializationSettings,
onDidReceiveNotificationResponse: (NotificationResponse response) {
// 处理通知点击事件
debugPrint('notification payload: ' + response.payload!);
},
);
return _flutterLocalNotificationsPlugin!;
}
Future<void> showNotification({
required String title,
required String body,
String? payload,
}) async {
id += 1;
// 显示通知
// 创建Android通知的详细设置
const AndroidNotificationDetails androidNotificationDetails =
AndroidNotificationDetails('your channel id', 'your channel name',
channelDescription: 'your channel description', // 频道的描述。
importance: Importance.max, // 通知的重要性。
priority: Priority.high, // 通知的优先级。
ticker: 'ticker'); // 通知的提示文本。
// 创建通知渠道
// const AndroidNotificationChannel channel = AndroidNotificationChannel(
// 'my_notification_channel', // id
// 'My Notifications', // title
// // 'This channel is used for my notifications.', // description
// importance: Importance.max,
// );
// 创建通知的详细设置
const NotificationDetails notificationDetails =
NotificationDetails(android: androidNotificationDetails); // 创建通知
// 显示通知
await _flutterLocalNotificationsPlugin!.show(
id, // 通知的 ID。
title, // 通知的标题。
body, // 通知的内容。
notificationDetails, // 通知的详细设置。
payload: payload, // 通知的数据。
);
}
Future<void> scheduleNotification({
required String title,
required String body,
required tz.TZDateTime scheduledDate,
}) async {
// 安排通知
// 定义本地通知的Android通知详细信息。
const AndroidNotificationDetails androidNotificationDetails =
AndroidNotificationDetails('your channel id', 'your channel name',
channelDescription: 'your channel description',
importance: Importance.max,
priority: Priority.high,
ticker: 'ticker');
// 定义本地通知的详细信息。
const NotificationDetails notificationDetails =
NotificationDetails(android: androidNotificationDetails);
// 使用Flutter Local Notifications插件安排本地通知。
await _flutterLocalNotificationsPlugin!.zonedSchedule(
0, // 通知的ID。
title, // 通知的标题。
body, // 通知的正文。
scheduledDate, // 应安排通知的日期和时间。
notificationDetails, // 通知的详细信息。
androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle, // 安排模式。
uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime, // 日期解释。
);
}
// 在这里添加更多不同类型的通知方法
// 例如:showImageNotification、showProgressNotification、showGroupNotification、addActionButtons等等
}
// // 安排通知
// final tz.TZDateTime scheduledDate =
// tz.TZDateTime.now(tz.local).add(Duration(seconds: 5));
// LocalNotificationsService().scheduleNotification(
// title: '安排通知标题',
// body: '安排通知内容',
// scheduledDate: scheduledDate,
// );
调用方式:
Future<FlutterLocalNotificationsPlugin> setupLocalNotifications() async {
// 初始化服务
FlutterLocalNotificationsPlugin localNoti =
await LocalNotificationsService().initialize();
developer.log('Local Notifications setup completed');
return localNoti;
}