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:sqflite_pust_local_notification/ui/notified_screen.dart'; import 'package:timezone/data/latest.dart' as tz; import 'package:timezone/timezone.dart' as tz; import '../utils/assets_string.dart'; 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 int id, 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( // id, title, body, platformChannelSpecifics, // payload: "${title}|" + "${body}|"); // } 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: title, ); } 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, payload: "${taskModel.title}|" + "${taskModel.note}|"); } 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"); } if (payload == "Theme Change" || payload == "Add Task") { } else { Get.to(() => NotifiedScreen(lable: payload)); } } }