Executando verificação de segurança...
1

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.

Carregando publicação patrocinada...
1
1

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 )

1

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

0

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"/>