completed the mobile app for he boss to review the stock report
This commit is contained in:
98
boss_app2/lib/controller/notification_api.dart
Normal file
98
boss_app2/lib/controller/notification_api.dart
Normal file
@ -0,0 +1,98 @@
|
||||
import 'package:boss_app2/page/login.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
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/tzdata.dart' as tz;
|
||||
|
||||
// ignore: avoid_classes_with_only_static_members
|
||||
class NotificationApi {
|
||||
// Below is the code for initializing the plugin using var _notificationPlugin
|
||||
static final _notifications = FlutterLocalNotificationsPlugin();
|
||||
static final onNotifications = BehaviorSubject<String?>();
|
||||
|
||||
static Future showNotification({
|
||||
int id = 0,
|
||||
String? title,
|
||||
String? body,
|
||||
String? payload,
|
||||
}) async =>
|
||||
_notifications.show(
|
||||
id,
|
||||
title,
|
||||
body,
|
||||
await _notificanDetails(),
|
||||
payload: payload,
|
||||
);
|
||||
|
||||
static Future showScheduleNotification() async =>
|
||||
_notifications.zonedSchedule(
|
||||
0,
|
||||
'Cek Laporan',
|
||||
"Laporan Baru Mungkin Ada, Sila Cek Di Aplikasi",
|
||||
// tz.TZDateTime.from(scheduledDate, tz.local),
|
||||
_scheduleDaily(const Time(18)),
|
||||
await _notificanDetails(),
|
||||
payload: "Laporan Baru Mungkin Ada, Sila Cek Di Aplikasi",
|
||||
androidAllowWhileIdle: true,
|
||||
uiLocalNotificationDateInterpretation:
|
||||
UILocalNotificationDateInterpretation.absoluteTime,
|
||||
matchDateTimeComponents: DateTimeComponents.time,
|
||||
);
|
||||
|
||||
static Future _notificanDetails() async {
|
||||
const AndroidNotificationDetails androidPlatformChannelSpecifics =
|
||||
AndroidNotificationDetails(
|
||||
'your channel id',
|
||||
'your channel name',
|
||||
channelDescription: 'your channel description',
|
||||
importance: Importance.max,
|
||||
// priority: Priority.high,
|
||||
// ticker: 'ticker',
|
||||
);
|
||||
return const NotificationDetails(
|
||||
android: androidPlatformChannelSpecifics,
|
||||
iOS: IOSNotificationDetails(),
|
||||
);
|
||||
}
|
||||
|
||||
static Future init(
|
||||
{bool initScheduled = false, BuildContext? context}) async {
|
||||
const android = AndroidInitializationSettings('app_icon');
|
||||
const iOS = IOSInitializationSettings();
|
||||
const settings = InitializationSettings(android: android, iOS: iOS);
|
||||
|
||||
final details = await _notifications.getNotificationAppLaunchDetails();
|
||||
if (details != null && details.didNotificationLaunchApp) {
|
||||
onNotifications.add(details.payload);
|
||||
}
|
||||
|
||||
await _notifications.initialize(
|
||||
settings,
|
||||
onSelectNotification: (payload) async {
|
||||
Navigator.push(
|
||||
context!,
|
||||
MaterialPageRoute(builder: (context) => Login()),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
if (initScheduled) {
|
||||
final locationName = await FlutterNativeTimezone.getLocalTimezone();
|
||||
tz.setLocalLocation(tz.getLocation(locationName));
|
||||
}
|
||||
}
|
||||
|
||||
static tz.TZDateTime _scheduleDaily(Time time) {
|
||||
final tz.TZDateTime now = tz.TZDateTime.now(tz.local);
|
||||
final scheduledDate = tz.TZDateTime(tz.local, now.year, now.month, now.day,
|
||||
time.hour, time.minute, time.second);
|
||||
// if (scheduledDate.isBefore(now)) {
|
||||
// scheduledDate = scheduledDate.add(const Duration(days: 1));
|
||||
// }
|
||||
return scheduledDate.isBefore(now)
|
||||
? scheduledDate.add(const Duration(days: 1))
|
||||
: scheduledDate;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user