import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_native_timezone/flutter_native_timezone.dart'; import 'package:get/get.dart'; import 'package:sqflite_pust_local_notification/models/task_model.dart'; import 'package:timezone/data/latest.dart' as tz; import 'package:timezone/timezone.dart' as tz; class NotifyHelper { FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); // initializeNotification() async { _configureLocalTimezone(); final IOSInitializationSettings initializationSettingsIOS = IOSInitializationSettings( requestSoundPermission: false, requestBadgePermission: false, requestAlertPermission: false, onDidReceiveLocalNotification: onDidReceiveLocalNotification); final AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings("appicon"); final InitializationSettings initializationSettings = InitializationSettings( iOS: initializationSettingsIOS, android: initializationSettingsAndroid, ); await flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: selectNotification); } // Requeste Permission for IOS void requestIOSPermissions() { flutterLocalNotificationsPlugin .resolvePlatformSpecificImplementation< IOSFlutterLocalNotificationsPlugin>() ?.requestPermissions( alert: true, badge: true, sound: true, ); } displayNotification({required String title, required String body}) async { print("doing test"); var androidPlatformChannelSpecifics = new AndroidNotificationDetails( 'your channel id', 'your channel name', channelDescription: '', importance: Importance.max, priority: Priority.high); var iOSPlatformChannelSpecifics = new IOSNotificationDetails(); var platformChannelSpecifics = new NotificationDetails( android: androidPlatformChannelSpecifics, iOS: iOSPlatformChannelSpecifics); await flutterLocalNotificationsPlugin.show( 0, title, body, platformChannelSpecifics, payload: 'Default_Sound', ); } scheduledNotification(int hours, int minutes, TaskModel taskModel) async { print("Call Notification"); await flutterLocalNotificationsPlugin.zonedSchedule( taskModel.id!.toInt(), taskModel.title, taskModel.note, _convertTimeDeration(hours, minutes), //tz.TZDateTime.now(tz.local).add(const Duration(seconds: 5)), const NotificationDetails( android: AndroidNotificationDetails( 'your channel id', 'your channel name', channelDescription: '')), androidAllowWhileIdle: true, uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime, matchDateTimeComponents: DateTimeComponents.time); } tz.TZDateTime _convertTimeDeration(int hours, int minutes) { final tz.TZDateTime now = tz.TZDateTime.now(tz.local); print(now); tz.TZDateTime scheduleDate = tz.TZDateTime(tz.local, now.year, now.month, now.day, hours, minutes); if (scheduleDate.isBefore(now)) { scheduleDate = scheduleDate.add(const Duration(days: 1)); } print(scheduleDate); return scheduleDate; } Future _configureLocalTimezone() async { tz.initializeTimeZones(); final String timeZone = await FlutterNativeTimezone.getLocalTimezone(); tz.setLocalLocation(tz.getLocation(timeZone)); } Future onDidReceiveLocalNotification( int id, String? title, String? body, String? payload) async { Get.dialog(Text("Welcome to Flutter")); } Future selectNotification(String? payload) async { if (payload != null) { print('notification payload: $payload'); } else { print("Notification Done"); } Get.to(() => Container( color: Colors.white, )); } }