Método para agendar a notificação
CustomNotification notification,
DateTime scheduledDate,
) async {
// Verifica se payload é nulo antes de prosseguir
if (notification.payload == null) return;
// Detalhes da notificação para Android
const AndroidNotificationDetails androidDetails =
AndroidNotificationDetails(
'unyclubNotification2',
'Unyclub2',
channelDescription: "Este canal é para todas as notificações do unyclub",
importance: Importance.max,
priority: Priority.max,
enableVibration: true,
);
print('before zonedSchedule');
print('tz: ${tz.local}');
// Agendando a notificação
flutterLocalNotificationsPlugin.zonedSchedule(
notification.id,
notification.title,
notification.body,
tz.TZDateTime.now(tz.local).add(const Duration(seconds: 10)),
const NotificationDetails(android: androidDetails),
androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle,
payload: notification.payload,
uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime,
);
print('after zonedSchedule: $scheduledDate');
}
Chamada do método de agendamento da reunião:
//? Carregando as reuniões
MeetingsController controller = MeetingsController(context: context);
List<Meetings> meetingsList = [];
await controller.loadMeetings("1").then((value) {
setState(() {
meetingsList = controller.getMeetingsList;
});
});
//? Pegando a data da ultima reunião
Meetings meeting = meetingsList[0];
DateTime notificationDate = DateFormat("dd/MM/yyyy")
.parse(meeting.dtMeeting!)
.subtract(const Duration(hours: 12));
//? Agendando a Notificação
NotificationService notificationService = NotificationService();
DateTime time = DateTime.now().add(const Duration(seconds: 20));
print("@@@@@@@@@@@@@@@@ $time @@@@@@@@@@@@@@@@@@@");
/*
notificationService.showNotification(
CustomNotification(
id: int.parse(meeting.id!),
title: meeting.topic!,
body: "A começa",
payload: jsonEncode({"route": AppRoutes.meetingsScreen}),
),
);
*/
notificationService.scheduleNotification(
CustomNotification(
id: int.parse(meeting.id!),
title: meeting.topic!,
body: "A reunião começa",
payload: jsonEncode({"route": AppRoutes.meetingsScreen}),
),
time,
);
}
essa manipulação na data no método scheduleMeetingsNotifications não está sendo utilizado no momento já que ainda estava tentando fazer a notificação aparecer após 10 segundos, mas posteriormente iriam ser agendadas as notificaçõs 12 horas antes das reuniões e seria criado no LocalStorage um id da reunião e a data para que eu não agende a mesma notificação mais que uma vez já que esse método é chamado no initState da minha tela de reuniões (solicitação do cliente )