Flutter Schedule Notification
Queria perguntar para os devs Flutter se estão tendo problemas ao agendar notificações com o plugin flutterLocalNotifications, vi vários tutoriais sobre o assunto mas simplesmente no meu código não funcionou (o tutorial mais recente que achei era de 1 ano atrás). Estou começando a acreditar que seja um problema no plugin e queria saber se alguém está encontrando problemas como eu.
O que você tentou até agora ? consegue mandar trechos do código?
Método para agendar a notificação
```Future scheduleNotification(
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:
```Future scheduleMeetingsNotifications() async {
//? Carregando as reuniões
MeetingsController controller = MeetingsController(context: context);
List 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 )
importante de falar que esqueci de colocar no post que minhas notificações locais normais funcionam, as do firebase também, mas as agendadas não aparecem
Caso alguém encontre o mesmo erro, no meu caso para resolver foi necessário colocar o seguinte trecho de código no meu AndroidManifest (dentro da tag ):
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ActionBroadcastReceiver" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
e Adicionar mais essa permissão:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>