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 ( ) ;
}
}