import 'dart:math'; import 'dart:typed_data'; import 'dart:ui'; import 'package:flutter/cupertino.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); class LocalNotification { Function(String payload)? _onNotificationClick; static LocalNotification? _instance; static LocalNotification? getInstance() { return _instance; } static init({required Function(String payload) onNotificationClick}) { if (_instance == null) { _instance = LocalNotification(); _instance?._onNotificationClick = onNotificationClick; _instance?._initialize(); } else { // assert(false,(){ // //TODO fix it // "LocalNotification Already Initialized"; // }); } } _initialize() async { try { var initializationSettingsAndroid = new AndroidInitializationSettings('app_icon'); var initializationSettingsIOS = DarwinInitializationSettings(onDidReceiveLocalNotification: null); var initializationSettings = InitializationSettings(android: initializationSettingsAndroid, iOS: initializationSettingsIOS); await flutterLocalNotificationsPlugin.initialize( initializationSettings, onDidReceiveNotificationResponse: (NotificationResponse notificationResponse) { switch (notificationResponse.notificationResponseType) { case NotificationResponseType.selectedNotification: // selectNotificationStream.add(notificationResponse.payload); break; case NotificationResponseType.selectedNotificationAction: // if (notificationResponse.actionId == navigationActionId) { // selectNotificationStream.add(notificationResponse.payload); // } break; } }, // onDidReceiveBackgroundNotificationResponse: notificationTapBackground, ); } catch (ex) { print(ex.toString()); } // flutterLocalNotificationsPlugin.initialize(initializationSettings, onDidReceiveNotificationResponse: (NotificationResponse notificationResponse) // { // switch (notificationResponse.notificationResponseType) { // case NotificationResponseType.selectedNotification: // // selectNotificationStream.add(notificationResponse.payload); // break; // case NotificationResponseType.selectedNotificationAction: // // if (notificationResponse.actionId == navigationActionId) { // // selectNotificationStream.add(notificationResponse.payload); // } // // break; // },} // // , // // ); } // void notificationTapBackground(NotificationResponse notificationResponse) { // // ignore: avoid_print // print('notification(${notificationResponse.id}) action tapped: ' // '${notificationResponse.actionId} with' // ' payload: ${notificationResponse.payload}'); // if (notificationResponse.input?.isNotEmpty ?? false) { // // ignore: avoid_print // print('notification action tapped with input: ${notificationResponse.input}'); // } // } var _random = new Random(); _randomNumber({int from = 100000}) { return _random.nextInt(from); } _vibrationPattern() { var vibrationPattern = Int64List(4); vibrationPattern[0] = 0; vibrationPattern[1] = 1000; vibrationPattern[2] = 5000; vibrationPattern[3] = 2000; return vibrationPattern; } Future? showNow({required String title, required String subtitle, required String payload}) { Future.delayed(Duration(seconds: 1)).then((result) async { var androidPlatformChannelSpecifics = AndroidNotificationDetails( 'com.hmg.local_notification', 'HMG', channelDescription: 'HMG', importance: Importance.max, priority: Priority.high, ticker: 'ticker', vibrationPattern: _vibrationPattern(), ongoing: true, autoCancel: false, usesChronometer: true, when: DateTime.now().millisecondsSinceEpoch - 120 * 1000, ); var iOSPlatformChannelSpecifics = DarwinNotificationDetails(); var platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics, iOS: iOSPlatformChannelSpecifics); await flutterLocalNotificationsPlugin.show(25613, title, subtitle, platformChannelSpecifics, payload: payload).catchError((err) { print(err); }); }); } Future scheduleNotification({required DateTime scheduledNotificationDateTime, required String title, required String description}) async { ///vibrationPattern var vibrationPattern = Int64List(4); vibrationPattern[0] = 0; vibrationPattern[1] = 1000; vibrationPattern[2] = 5000; vibrationPattern[3] = 2000; // var androidPlatformChannelSpecifics = AndroidNotificationDetails('active-prescriptions', 'ActivePrescriptions', // channelDescription: 'ActivePrescriptionsDescription', // // icon: 'secondary_icon', // sound: RawResourceAndroidNotificationSound('slow_spring_board'), // // ///change it to be as ionic // // largeIcon: DrawableResourceAndroidBitmap('sample_large_icon'),///change it to be as ionic // vibrationPattern: vibrationPattern, // enableLights: true, // color: const Color.fromARGB(255, 255, 0, 0), // ledColor: const Color.fromARGB(255, 255, 0, 0), // ledOnMs: 1000, // ledOffMs: 500); // var iOSPlatformChannelSpecifics = DarwinNotificationDetails(sound: 'slow_spring_board.aiff'); // /change it to be as ionic // var platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics, iOS: iOSPlatformChannelSpecifics); // await flutterLocalNotificationsPlugin.schedule(0, title, description, scheduledNotificationDateTime, platformChannelSpecifics); } ///Repeat notification every day at approximately 10:00:00 am Future showDailyAtTime() async { // var time = Time(10, 0, 0); // var androidPlatformChannelSpecifics = AndroidNotificationDetails('repeatDailyAtTime channel id', 'repeatDailyAtTime channel name', channelDescription: 'repeatDailyAtTime description'); // var iOSPlatformChannelSpecifics = DarwinNotificationDetails(); // var platformChannelSpecifics = NotificationDetails( // androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics); // await flutterLocalNotificationsPlugin.showDailyAtTime( // 0, // 'show daily title', // 'Daily notification shown at approximately ${_toTwoDigitString(time.hour)}:${_toTwoDigitString(time.minute)}:${_toTwoDigitString(time.second)}', // time, // platformChannelSpecifics); } ///Repeat notification weekly on Monday at approximately 10:00:00 am Future showWeeklyAtDayAndTime() async { // var time = Time(10, 0, 0); // var androidPlatformChannelSpecifics = AndroidNotificationDetails('show weekly channel id', 'show weekly channel name', channelDescription: 'show weekly description'); // var iOSPlatformChannelSpecifics = DarwinNotificationDetails(); // var platformChannelSpecifics = NotificationDetails( // androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics); // await flutterLocalNotificationsPlugin.showWeeklyAtDayAndTime( // 0, // 'show weekly title', // 'Weekly notification shown on Monday at approximately ${_toTwoDigitString(time.hour)}:${_toTwoDigitString(time.minute)}:${_toTwoDigitString(time.second)}', // Day.Monday, // time, // platformChannelSpecifics); } String _toTwoDigitString(int value) { return value.toString().padLeft(2, '0'); } Future cancelNotification() async { await flutterLocalNotificationsPlugin.cancel(0); } Future cancelAllNotifications() async { await flutterLocalNotificationsPlugin.cancelAll(); } }