Flutter - Where to call showScheduledNotification method to show daily random notification out of defined set

Viewed 21

I have created NotificationService class which contain method showScheduledNotification() as defined below. I want to call this method to show daily notification at 8 AM with some set of notification subjects but not sure where to call showScheduledNotification method. Here is the Notificaiton Service Class for your reference. Please let me know if additional details are needed.

import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:timezone/timezone.dart' as tz;
import 'package:timezone/data/latest.dart' as tz;
import 'package:rxdart/subjects.dart';

class NotificationService {
  static final NotificationService _notificationService =
      NotificationService._internal();

  final _localNotificationService = FlutterLocalNotificationsPlugin();

  final BehaviorSubject<String> onNotificationClick = BehaviorSubject();

  factory NotificationService() {
    return _notificationService;
  }

  final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
      FlutterLocalNotificationsPlugin();
  NotificationService._internal();

  Future<void> initNotification() async {
    final AndroidInitializationSettings initializationSettingsAndroid =
        AndroidInitializationSettings('@drawable/ic_launcher');

    final InitializationSettings initializationSettings =
        InitializationSettings(android: initializationSettingsAndroid);

        tz.initializeTimeZones();
    await flutterLocalNotificationsPlugin.initialize(
      initializationSettings,
      onSelectNotification: (payload) => {},
    );
  }

  Future<void> showNotificaiton(
      int id, String title, String body, int seconds) async {
    tz.setLocalLocation(tz.getLocation('Asia/Kolkata'));

    await flutterLocalNotificationsPlugin.zonedSchedule(
        id,
        title,
        body,
        tz.TZDateTime.now(tz.local).add(Duration(seconds: seconds)),
        const NotificationDetails(
            android: AndroidNotificationDetails('main_channel', 'main_channel',
                importance: Importance.max,
                priority: Priority.max,
                icon: '@drawable/ic_launcher')),
        uiLocalNotificationDateInterpretation:
            UILocalNotificationDateInterpretation.absoluteTime,
        androidAllowWhileIdle: true);
  }

//Show Scheduled LocalNotification
  Future<void> showScheduledNotificaitonV2(
    int id,
    String title,
    String body,
  ) async {
    tz.setLocalLocation(tz.getLocation('Asia/Kolkata'));

    await flutterLocalNotificationsPlugin.zonedSchedule(
        id,
        title,
        body,
        tz.TZDateTime.from(DateTime.now().add(Duration(days: 1)), tz.local),
        const NotificationDetails(
            android: AndroidNotificationDetails('main_channel', 'main_channel',
                importance: Importance.max,
                priority: Priority.max,
                icon: '@drawable/ic_launcher')),
        uiLocalNotificationDateInterpretation:
            UILocalNotificationDateInterpretation.absoluteTime,
        androidAllowWhileIdle: true);
  }

  Future<void> showScheduledNotification(
      {int id, String title, String body, int seconds}) async {
    final details = await _notificationDetails();
    await _localNotificationService.zonedSchedule(
      id,
      title,
      body,
      tz.TZDateTime.from(
        DateTime.now().add(Duration(seconds: seconds)),
        tz.local,
      ),
      details,
      androidAllowWhileIdle: true,
      uiLocalNotificationDateInterpretation:
          UILocalNotificationDateInterpretation.absoluteTime,
    );
  }

  Future<NotificationDetails> _notificationDetails() async {
    const AndroidNotificationDetails androidNotificationDetails =
        AndroidNotificationDetails('channel_id', 'channel_name',
            channelDescription: 'description',
            importance: Importance.max,
            priority: Priority.max,
            playSound: true);

    const IOSNotificationDetails iosNotificationDetails =
        IOSNotificationDetails();

    return const NotificationDetails(
      android: androidNotificationDetails,
      iOS: iosNotificationDetails,
    );
  }
}
0 Answers
Related