Created
April 19, 2022 14:24
-
-
Save FlutterWiz/6864ddb021229c45f846abdc31867660 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; | |
import 'package:flutter_native_timezone/flutter_native_timezone.dart'; | |
import 'package:rxdart/rxdart.dart'; | |
import 'package:timezone/timezone.dart' as tz; | |
import 'package:timezone/data/latest.dart' as time_zone; | |
class NotificationApi { | |
static const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('timer.png'); | |
static final notifications = FlutterLocalNotificationsPlugin(); | |
static final onNotifications = BehaviorSubject<String?>(); | |
static Future _notificationDetails() async { | |
return const NotificationDetails( | |
android: AndroidNotificationDetails( | |
"channelId", | |
"channelName", | |
channelDescription: "channelDescription", | |
importance: Importance.max, | |
), | |
iOS: IOSNotificationDetails()); | |
} | |
static Future init({bool initScheduled = false}) async { | |
const iOS = IOSInitializationSettings(); | |
const android = AndroidInitializationSettings("@mipmap/ic_launcher"); | |
const settings = InitializationSettings(android: android, iOS: iOS); | |
const String timerPagePayload = "TimerPagePayload"; | |
await notifications.initialize(settings, onSelectNotification: (String? payload) async { | |
onNotifications.add(timerPagePayload); | |
}); | |
if (initScheduled) { | |
time_zone.initializeTimeZones(); | |
final locationName = await FlutterNativeTimezone.getLocalTimezone(); | |
tz.setLocalLocation(tz.getLocation(locationName)); | |
} | |
} | |
static Future zonedScheduleNotification({ | |
int id = 0, | |
required String? title, | |
required String? body, | |
String? payload, | |
required int microSeconds, | |
}) async => | |
await notifications.zonedSchedule( | |
id, | |
title, | |
body, | |
tz.TZDateTime.now(tz.local).add(Duration(microseconds: microSeconds, milliseconds: 500)), | |
await _notificationDetails(), | |
androidAllowWhileIdle: true, | |
uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime, | |
); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment