feat:更新消息通知功能

This commit is contained in:
2026-06-20 16:11:57 +08:00
parent 5d12377606
commit 5e0864d3ac
16 changed files with 332 additions and 24 deletions

View File

@@ -0,0 +1,100 @@
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class NotifyService {
static final NotifyService _instance = NotifyService._internal();
factory NotifyService() => _instance;
NotifyService._internal();
late FlutterLocalNotificationsPlugin _notifications;
// Android特殊模式即使设备处于省电模式也能准时触发。
final scheduleMode = AndroidScheduleMode.exactAllowWhileIdle;
// 初始化通知服务
Future<void> initialize() async {
_notifications = FlutterLocalNotificationsPlugin();
// 设置Android平台的初始化配置 使用应用图标作为通知图标
const AndroidInitializationSettings androidSettings =
AndroidInitializationSettings('@mipmap/ic_launcher');
// 设置iOS平台的初始化配置
const DarwinInitializationSettings iosSettings =
DarwinInitializationSettings(
requestAlertPermission: true,
requestBadgePermission: true,
requestSoundPermission: true,
);
// 初始化设置
const InitializationSettings settings = InitializationSettings(
android: androidSettings,
iOS: iosSettings,
);
await _notifications.initialize(settings: settings);
}
// 创建Android通知详情
AndroidNotificationDetails _androidNotificationDetails() {
const channelId = 'com.cxx.sweet_chat_app';
const channelName = '亲聊';
const channelDescription = '亲聊通知';
return const AndroidNotificationDetails(
channelId,
channelName,
channelDescription: channelDescription,
importance: Importance.high,
priority: Priority.high,
playSound: true,
enableVibration: true,
);
}
// 创建iOS通知详情
DarwinNotificationDetails _iosNotificationDetails() {
return const DarwinNotificationDetails(
presentAlert: true,
presentBadge: true,
presentSound: true,
);
}
NotificationDetails get _details {
return NotificationDetails(
android: _androidNotificationDetails(),
iOS: _iosNotificationDetails(),
);
}
// 立即显示通知
Future<void> showInstantNotification({
required String title,
required String body,
int id = 0,
}) async {
await _notifications.show(id: id, title: title, body: body, notificationDetails: _details);
}
// 检查通知权限
Future<bool> checkPermission() async {
final bool? result =
await _notifications
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin
>()
?.areNotificationsEnabled();
return result ?? false;
}
// 请求权限
Future<void> requestPermission() async {
await _notifications
.resolvePlatformSpecificImplementation<
IOSFlutterLocalNotificationsPlugin
>()
?.requestPermissions(alert: true, badge: true, sound: true);
}
}