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<void> _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));
|
|
}
|
|
}
|
|
}
|