This is flutter sqlite local notification project. User can add task.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

146 lines
5.0 KiB

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