我正在使用flutter_local_notifications包,并试图实现一个通知系统,我每天在不同的时间收到通知.
例如,有一天我可能在早上6:00收到通知,第二天在晚上7:00收到通知,第二天在上午8:30或下午4:00收到通知.但是,每天都会有通知.
我try 过使用定期通知和从flutter_local_notifications开始的计划通知,但我很难理解如何实现这一点.
这是我的通知代码
class LocalNotifications {
static final FlutterLocalNotificationsPlugin
_flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
static final onClickNotification = BehaviorSubject<String>();
static void onNotificationTap(NotificationResponse notificationResponse) {
onClickNotification.add(notificationResponse.payload!);
}
static Future init() async {
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('@mipmap/ic_launcher');
final DarwinInitializationSettings initializationSettingsDarwin =
DarwinInitializationSettings(
onDidReceiveLocalNotification: (id, title, body, payload) => null,
);
final LinuxInitializationSettings initializationSettingsLinux =
LinuxInitializationSettings(defaultActionName: 'Open notification');
final InitializationSettings initializationSettings =
InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsDarwin,
linux: initializationSettingsLinux);
_flutterLocalNotificationsPlugin.initialize(initializationSettings,
onDidReceiveNotificationResponse: onNotificationTap,
onDidReceiveBackgroundNotificationResponse: onNotificationTap);
}
static Future showPeriodicNotifications({
required String title,
required String body,
required String payload,
}) async {
const AndroidNotificationDetails androidNotificationDetails =
AndroidNotificationDetails('channel 2', 'your channel name',
channelDescription: 'your channel description',
importance: Importance.max,
priority: Priority.high,
ticker: 'ticker');
const NotificationDetails notificationDetails =
NotificationDetails(android: androidNotificationDetails);
await _flutterLocalNotificationsPlugin.periodicallyShow(
1,
title,
body,
RepeatInterval.everyMinute,
notificationDetails,
payload: payload,
androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle,
);
}
static Future showScheduleNotification({
required int id,
required String title,
required String body,
required String primeTimes,
required String payload,
}) async {
tz.initializeTimeZones();
tz.TZDateTime payloadDateTime = tz.TZDateTime.parse(tz.local, primeTimes);
await _flutterLocalNotificationsPlugin.zonedSchedule(
id,
title,
body,
payloadDateTime,
const NotificationDetails(
android: AndroidNotificationDetails(
'channel 3',
'your channel name',
channelDescription: 'your channel description',
importance: Importance.max,
priority: Priority.high,
ticker: 'ticker',
styleInformation: BigTextStyleInformation(''),
)),
androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle,
uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime,
payload: payload,
);
}
}