Refactor notification

This commit is contained in:
Apalak Dutta 2022-06-26 22:50:40 +05:30
parent 13fb26be6d
commit 78b23af75a
2 changed files with 72 additions and 51 deletions

View File

@ -1,6 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.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:get/get.dart';
import 'package:sqflite_pust_local_notification/models/task_model.dart';
import 'package:timezone/data/latest.dart' as tz; import 'package:timezone/data/latest.dart' as tz;
import 'package:timezone/timezone.dart' as tz; import 'package:timezone/timezone.dart' as tz;
@ -9,7 +11,7 @@ class NotifyHelper {
FlutterLocalNotificationsPlugin(); // FlutterLocalNotificationsPlugin(); //
initializeNotification() async { initializeNotification() async {
tz.initializeTimeZones(); _configureLocalTimezone();
final IOSInitializationSettings initializationSettingsIOS = final IOSInitializationSettings initializationSettingsIOS =
IOSInitializationSettings( IOSInitializationSettings(
requestSoundPermission: false, requestSoundPermission: false,
@ -48,10 +50,12 @@ class NotifyHelper {
channelDescription: '', channelDescription: '',
importance: Importance.max, importance: Importance.max,
priority: Priority.high); priority: Priority.high);
var iOSPlatformChannelSpecifics = new IOSNotificationDetails(); var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
var platformChannelSpecifics = new NotificationDetails( var platformChannelSpecifics = new NotificationDetails(
android: androidPlatformChannelSpecifics, android: androidPlatformChannelSpecifics,
iOS: iOSPlatformChannelSpecifics); iOS: iOSPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.show( await flutterLocalNotificationsPlugin.show(
0, 0,
title, title,
@ -61,46 +65,45 @@ class NotifyHelper {
); );
} }
scheduledNotification() async { scheduledNotification(int hours, int minutes, TaskModel taskModel) async {
print("Call Notification");
await flutterLocalNotificationsPlugin.zonedSchedule( await flutterLocalNotificationsPlugin.zonedSchedule(
0, taskModel.id!.toInt(),
'scheduled title', taskModel.title,
'theme changes 5 seconds ago', taskModel.note,
tz.TZDateTime.now(tz.local).add(const Duration(seconds: 5)), _convertTimeDeration(hours, minutes),
//tz.TZDateTime.now(tz.local).add(const Duration(seconds: 5)),
const NotificationDetails( const NotificationDetails(
android: AndroidNotificationDetails( android: AndroidNotificationDetails(
'your channel id', 'your channel name', 'your channel id', 'your channel name',
channelDescription: '')), channelDescription: '')),
androidAllowWhileIdle: true, androidAllowWhileIdle: true,
uiLocalNotificationDateInterpretation: uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime); 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<void> _configureLocalTimezone() async {
tz.initializeTimeZones();
final String timeZone = await FlutterNativeTimezone.getLocalTimezone();
tz.setLocalLocation(tz.getLocation(timeZone));
} }
Future onDidReceiveLocalNotification( Future onDidReceiveLocalNotification(
int id, String? title, String? body, String? payload) async { int id, String? title, String? body, String? payload) async {
// display a dialog with the notification details, tap ok to go to another page
// showDialog(
// //context: context,
// builder: (BuildContext context) => CupertinoAlertDialog(
// title: Text(title),
// content: Text(body),
// actions: [
// CupertinoDialogAction(
// isDefaultAction: true,
// child: Text('Ok'),
// onPressed: () async {
// Navigator.of(context, rootNavigator: true).pop();
// await Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => SecondScreen(payload),
// ),
// );
// },
// )
// ],
// ),
// );
Get.dialog(Text("Welcome to Flutter")); Get.dialog(Text("Welcome to Flutter"));
} }

View File

@ -70,8 +70,6 @@ class _MyHomeScreenState extends State<MyHomeScreen> {
body: Get.isDarkMode body: Get.isDarkMode
? "Activated Light Mode" ? "Activated Light Mode"
: "Activated Dark Mode"); : "Activated Dark Mode");
notifyHelper.scheduledNotification();
}, },
child: Icon( child: Icon(
Get.isDarkMode ? Icons.wb_sunny_outlined : Icons.nightlight_round, Get.isDarkMode ? Icons.wb_sunny_outlined : Icons.nightlight_round,
@ -136,7 +134,9 @@ class _MyHomeScreenState extends State<MyHomeScreen> {
dayTextStyle: datePickerTextStyle, dayTextStyle: datePickerTextStyle,
monthTextStyle: datePickerTextStyle, monthTextStyle: datePickerTextStyle,
onDateChange: (Date) { onDateChange: (Date) {
setState(() {
_selectedDate = Date; _selectedDate = Date;
});
}, },
), ),
); );
@ -148,8 +148,30 @@ class _MyHomeScreenState extends State<MyHomeScreen> {
return ListView.builder( return ListView.builder(
itemCount: _taskController.taskList.length, itemCount: _taskController.taskList.length,
itemBuilder: (_, index) { itemBuilder: (_, index) {
print( TaskModel taskModel = _taskController.taskList[index];
"Task Count :" + _taskController.taskList.length.toString()); print(taskModel.toJson());
if (taskModel.repeat == "Daily") {
DateTime date =
DateFormat.jm().parse(taskModel.startTime.toString());
var myTime = DateFormat("HH:mm").format(date);
print(myTime);
notifyHelper.scheduledNotification(
int.parse(myTime.toString().split(":")[0]),
int.parse(myTime.toString().split(":")[1]),
taskModel);
return _setTAskView(index, taskModel);
}
if (taskModel.date == DateFormat.yMd().format(_selectedDate)) {
return _setTAskView(index, taskModel);
} else {
return Container();
}
});
},
));
}
_setTAskView(int index, TaskModel taskModel) {
return AnimationConfiguration.staggeredList( return AnimationConfiguration.staggeredList(
position: index, position: index,
child: SlideAnimation( child: SlideAnimation(
@ -158,17 +180,13 @@ class _MyHomeScreenState extends State<MyHomeScreen> {
children: [ children: [
GestureDetector( GestureDetector(
onTap: () { onTap: () {
_showBottomSheet( _showBottomSheet(context, taskModel);
context, _taskController.taskList[index]);
}, },
child: TaskTile(_taskController.taskList[index]), child: TaskTile(taskModel),
) )
], ],
)), )),
)); ));
});
},
));
} }
_showBottomSheet(BuildContext context, TaskModel taskModel) { _showBottomSheet(BuildContext context, TaskModel taskModel) {