flutter_local_notifications is NOT working - zonedSchedule

62 Views Asked by At

I want the notifications to be delivered 2 days earlier than the selected date e.g., if the selectedDay is 2024.03.10, notifications should be delivered on notificationTime = 2024.03.08 20:30.

But it's not working.

My code is executing properly e.g., can see the print statement print('scheduleAlarm completed') executing, scheduleAlarm is working, permissions and print('tz.local') are also ok.. Not sure where's the issue. Can someone look into the below shared code and point me in the right direction.

class ShuttleBusState extends State<ShuttleBus> {
  CalendarFormat calendarFormat = CalendarFormat.month;
  DateTime focusedDay = DateTime.now();
  DateTime? selectedDay;
  List<DateTime> markedDays = [];

  @override
  void initState() {
    super.initState();
    tz.initializeTimeZones();
    var seoul = tz.getLocation('Asia/Seoul');
    tz.setLocalLocation(seoul);

    AndroidInitializationSettings androidInitializationSettings = const AndroidInitializationSettings('mipmap/ic_launcher');
    DarwinInitializationSettings iosInitializationSettings = const DarwinInitializationSettings(
      requestAlertPermission: false,
      requestBadgePermission: false,
      requestSoundPermission: false,
    );
    
    InitializationSettings initializationSettings = InitializationSettings(
      android: androidInitializationSettings,
      iOS: iosInitializationSettings,
    );

    flutterLocalNotificationsPlugin.initialize(initializationSettings);
    loadMarkedDays();
  }



  //**Notitication */
  Future<void> scheduleAlarm(DateTime scheduledNotificationDateTime) async {
    var androidNotificationDetails = const AndroidNotificationDetails(
      '1 channel id',
      '2 channel name',
      priority: Priority.high,
      importance: Importance.max,
    );

    var notificationDetails = NotificationDetails(
        android: androidNotificationDetails,
        iOS: const DarwinNotificationDetails(badgeNumber: 1));

    //**Before 2 days, 20:30 */
    var notificationTime = DateTime.now().add(const Duration(days: 2, hours: 20, minutes: 30));

    //**TZDateTime */
    tz.TZDateTime scheduledTimeZoneDateTime =
        tz.TZDateTime.from(notificationTime, tz.local);
    print(tz.TZDateTime.now(tz.local));
    print(notificationTime);
    print(scheduledNotificationDateTime);
    
    //**Contents */
    await flutterLocalNotificationsPlugin.zonedSchedule(
        0, 'test title', 'test body', scheduledTimeZoneDateTime, notificationDetails,
        androidScheduleMode: AndroidScheduleMode.inexactAllowWhileIdle,
        uiLocalNotificationDateInterpretation:
            UILocalNotificationDateInterpretation.absoluteTime);
    print('scheduleAlarm completed');
  }

//**Exception */
else {
 DateTime now = DateTime.now();
                     DateTime notificationTime = selectedDay.subtract(const Duration(days: 2)).add(const Duration(hours: 20, minutes: 30));
                     if (notificationTime.isBefore(now) || notificationTime.isAtSameMomentAs(now)) {
                       showDialog(
0

There are 0 best solutions below