Refactor notification
This commit is contained in:
parent
13fb26be6d
commit
78b23af75a
@ -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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user