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

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_local_notifications/flutter_local_notifications.dart';
  3. import 'package:flutter_native_timezone/flutter_native_timezone.dart';
  4. import 'package:get/get.dart';
  5. import 'package:sqflite_pust_local_notification/models/task_model.dart';
  6. import 'package:sqflite_pust_local_notification/ui/notified_screen.dart';
  7. import 'package:timezone/data/latest.dart' as tz;
  8. import 'package:timezone/timezone.dart' as tz;
  9. import '../utils/assets_string.dart';
  10. class NotifyHelper {
  11. FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
  12. FlutterLocalNotificationsPlugin(); //
  13. initializeNotification() async {
  14. _configureLocalTimezone();
  15. final IOSInitializationSettings initializationSettingsIOS =
  16. IOSInitializationSettings(
  17. requestSoundPermission: false,
  18. requestBadgePermission: false,
  19. requestAlertPermission: false,
  20. onDidReceiveLocalNotification: onDidReceiveLocalNotification);
  21. final AndroidInitializationSettings initializationSettingsAndroid =
  22. AndroidInitializationSettings("appicon");
  23. final InitializationSettings initializationSettings =
  24. InitializationSettings(
  25. iOS: initializationSettingsIOS,
  26. android: initializationSettingsAndroid,
  27. );
  28. await flutterLocalNotificationsPlugin.initialize(initializationSettings,
  29. onSelectNotification: selectNotification);
  30. }
  31. // Requeste Permission for IOS
  32. void requestIOSPermissions() {
  33. flutterLocalNotificationsPlugin
  34. .resolvePlatformSpecificImplementation<
  35. IOSFlutterLocalNotificationsPlugin>()
  36. ?.requestPermissions(
  37. alert: true,
  38. badge: true,
  39. sound: true,
  40. );
  41. }
  42. // displayNotification(
  43. // {required int id, required String title, required String body}) async {
  44. // print("doing test");
  45. // var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
  46. // 'your channel id',
  47. // 'your channel name',
  48. // channelDescription: '',
  49. // importance: Importance.max,
  50. // priority: Priority.high,
  51. // );
  52. // var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
  53. // var platformChannelSpecifics = new NotificationDetails(
  54. // android: androidPlatformChannelSpecifics,
  55. // iOS: iOSPlatformChannelSpecifics);
  56. // await flutterLocalNotificationsPlugin.show(
  57. // id, title, body, platformChannelSpecifics,
  58. // payload: "${title}|" + "${body}|");
  59. // }
  60. displayNotification({required String title, required String body}) async {
  61. print("doing test");
  62. var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
  63. 'your channel id', 'your channel name',
  64. channelDescription: '',
  65. importance: Importance.max,
  66. priority: Priority.high);
  67. var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
  68. var platformChannelSpecifics = new NotificationDetails(
  69. android: androidPlatformChannelSpecifics,
  70. iOS: iOSPlatformChannelSpecifics);
  71. await flutterLocalNotificationsPlugin.show(
  72. 0,
  73. title,
  74. body,
  75. platformChannelSpecifics,
  76. payload: title,
  77. );
  78. }
  79. scheduledNotification(int hours, int minutes, TaskModel taskModel) async {
  80. print("Call Notification");
  81. await flutterLocalNotificationsPlugin.zonedSchedule(
  82. taskModel.id!.toInt(),
  83. taskModel.title,
  84. taskModel.note,
  85. _convertTimeDeration(hours, minutes),
  86. //tz.TZDateTime.now(tz.local).add(const Duration(seconds: 5)),
  87. const NotificationDetails(
  88. android: AndroidNotificationDetails(
  89. 'your channel id', 'your channel name',
  90. channelDescription: '')),
  91. androidAllowWhileIdle: true,
  92. uiLocalNotificationDateInterpretation:
  93. UILocalNotificationDateInterpretation.absoluteTime,
  94. matchDateTimeComponents: DateTimeComponents.time,
  95. payload: "${taskModel.title}|" + "${taskModel.note}|");
  96. }
  97. tz.TZDateTime _convertTimeDeration(int hours, int minutes) {
  98. final tz.TZDateTime now = tz.TZDateTime.now(tz.local);
  99. print(now);
  100. tz.TZDateTime scheduleDate =
  101. tz.TZDateTime(tz.local, now.year, now.month, now.day, hours, minutes);
  102. if (scheduleDate.isBefore(now)) {
  103. scheduleDate = scheduleDate.add(const Duration(days: 1));
  104. }
  105. print(scheduleDate);
  106. return scheduleDate;
  107. }
  108. Future<void> _configureLocalTimezone() async {
  109. tz.initializeTimeZones();
  110. final String timeZone = await FlutterNativeTimezone.getLocalTimezone();
  111. tz.setLocalLocation(tz.getLocation(timeZone));
  112. }
  113. Future onDidReceiveLocalNotification(
  114. int id, String? title, String? body, String? payload) async {
  115. Get.dialog(Text("Welcome to Flutter"));
  116. }
  117. Future selectNotification(String? payload) async {
  118. if (payload != null) {
  119. print('notification payload: $payload');
  120. } else {
  121. print("Notification Done");
  122. }
  123. if (payload == "Theme Change" || payload == "Add Task") {
  124. } else {
  125. Get.to(() => NotifiedScreen(lable: payload));
  126. }
  127. }
  128. }