Browse Source

Refactor notification

master
Apalak Dutta 2 years ago
parent
commit
78b23af75a
2 changed files with 72 additions and 51 deletions
  1. +33
    -30
      lib/services/notification_service.dart
  2. +39
    -21
      lib/ui/my_home_screen.dart

+ 33
- 30
lib/services/notification_service.dart 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,
'scheduled title',
'theme changes 5 seconds ago',
tz.TZDateTime.now(tz.local).add(const Duration(seconds: 5)),
taskModel.id!.toInt(),
taskModel.title,
taskModel.note,
_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"));
} }


+ 39
- 21
lib/ui/my_home_screen.dart 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) {
_selectedDate = Date;
setState(() {
_selectedDate = Date;
});
}, },
), ),
); );
@ -148,29 +148,47 @@ class _MyHomeScreenState extends State<MyHomeScreen> {
return ListView.builder( return ListView.builder(
itemCount: _taskController.taskList.length, itemCount: _taskController.taskList.length,
itemBuilder: (_, index) { itemBuilder: (_, index) {
print(
"Task Count :" + _taskController.taskList.length.toString());
return AnimationConfiguration.staggeredList(
position: index,
child: SlideAnimation(
child: FadeInAnimation(
child: Row(
children: [
GestureDetector(
onTap: () {
_showBottomSheet(
context, _taskController.taskList[index]);
},
child: TaskTile(_taskController.taskList[index]),
)
],
)),
));
TaskModel taskModel = _taskController.taskList[index];
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(
position: index,
child: SlideAnimation(
child: FadeInAnimation(
child: Row(
children: [
GestureDetector(
onTap: () {
_showBottomSheet(context, taskModel);
},
child: TaskTile(taskModel),
)
],
)),
));
}
_showBottomSheet(BuildContext context, TaskModel taskModel) { _showBottomSheet(BuildContext context, TaskModel taskModel) {
Get.bottomSheet(Container( Get.bottomSheet(Container(
padding: const EdgeInsets.only(top: 4), padding: const EdgeInsets.only(top: 4),


Loading…
Cancel
Save