2023-06-21 17:44:28 +08:00
|
|
|
import 'dart:async';
|
|
|
|
|
|
|
|
import 'package:flutter/services.dart';
|
|
|
|
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|
|
|
|
2023-06-29 17:02:09 +08:00
|
|
|
/// Requesting permissions
|
2023-06-21 17:44:28 +08:00
|
|
|
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
|
|
|
|
FlutterLocalNotificationsPlugin();
|
|
|
|
|
|
|
|
/// Streams are created so that app can respond to notification-related events
|
|
|
|
/// since the plugin is initialised in the `main` function
|
|
|
|
final StreamController<ReceivedNotification?>
|
|
|
|
didReceiveLocalNotificationStream =
|
|
|
|
StreamController<ReceivedNotification>.broadcast();
|
|
|
|
|
|
|
|
final StreamController<String?> selectNotificationStream =
|
|
|
|
StreamController<String?>.broadcast();
|
|
|
|
|
|
|
|
const MethodChannel platform =
|
|
|
|
MethodChannel('dexterx.dev/flutter_local_notifications_example');
|
|
|
|
|
|
|
|
const String portName = 'notification_send_port';
|
|
|
|
|
|
|
|
class ReceivedNotification {
|
|
|
|
final int id;
|
|
|
|
final String? title;
|
|
|
|
final String? body;
|
|
|
|
final String? payload;
|
|
|
|
|
|
|
|
const ReceivedNotification({
|
|
|
|
required this.id,
|
|
|
|
required this.title,
|
|
|
|
required this.body,
|
|
|
|
required this.payload,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
String? selectedNotificationPayload;
|
|
|
|
|
|
|
|
/// A notification action which triggers a url launch event
|
|
|
|
const String urlLanunchActionId = 'id_1';
|
|
|
|
|
|
|
|
/// A notification action which triggers a App navigation event
|
|
|
|
const String navigationActionId = 'id-3';
|
|
|
|
|
|
|
|
/// Defines a iOS/MacOS notification category for text input actions.
|
|
|
|
const String darwinNotificationCategoryText = 'textCategory';
|
|
|
|
|
|
|
|
/// Defines a iOS/MacOS notification category for text input actions.
|
|
|
|
const String darwinNotificationCategoryPlain = 'plainCategory';
|
|
|
|
|
|
|
|
@pragma('vm:entry-point')
|
|
|
|
void notificationTapBackground(NotificationResponse notificationResponse) {
|
|
|
|
print('notification(${notificationResponse.id}) action tapped: '
|
|
|
|
'${notificationResponse.actionId} with'
|
|
|
|
' payload: ${notificationResponse.payload}');
|
|
|
|
|
|
|
|
if (notificationResponse.input?.isNotEmpty ?? false) {
|
|
|
|
print('notification action tapped with input: ${notificationResponse.input}');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|