53 lines
1.9 KiB
Dart
53 lines
1.9 KiB
Dart
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|
|
|
class NotifService {
|
|
static final FlutterLocalNotificationsPlugin _notif =
|
|
FlutterLocalNotificationsPlugin();
|
|
|
|
static Future<void> init() async {
|
|
const android = AndroidInitializationSettings('@mipmap/ic_launcher');
|
|
const settings = InitializationSettings(android: android);
|
|
|
|
await _notif.initialize(settings);
|
|
|
|
// Mendaftarkan pintu gerbang utama channel melayang ke OS Android
|
|
final androidImplementation = _notif
|
|
.resolvePlatformSpecificImplementation<
|
|
AndroidFlutterLocalNotificationsPlugin
|
|
>();
|
|
|
|
if (androidImplementation != null) {
|
|
// Meminta izin notifikasi langsung ke layar HP saat aplikasi dibuka
|
|
await androidImplementation.requestNotificationsPermission();
|
|
|
|
const channel = AndroidNotificationChannel(
|
|
'channel_kebun_id', // Wajib sama persis dengan yang ada di AndroidManifest.xml
|
|
'Notifikasi Burung',
|
|
description: 'Mendeteksi pergerakan hama burung kebun',
|
|
importance: Importance.max, // Memaksa spanduk muncul di atas layar
|
|
playSound: true,
|
|
enableVibration: true,
|
|
);
|
|
|
|
await androidImplementation.createNotificationChannel(channel);
|
|
}
|
|
}
|
|
|
|
static Future<void> showNotif(String title, String body) async {
|
|
const androidDetails = AndroidNotificationDetails(
|
|
'channel_kebun_id', // Disamakan dengan manifest & init channel di atas
|
|
'Notifikasi Burung',
|
|
importance: Importance.max,
|
|
priority: Priority.high,
|
|
ticker: 'ticker',
|
|
icon: '@mipmap/ic_launcher',
|
|
);
|
|
|
|
const details = NotificationDetails(android: androidDetails);
|
|
|
|
// Membuat ID Notifikasi acak berbasis waktu agar setiap notifikasi baru tidak saling menimpa
|
|
int idUnik = DateTime.now().millisecondsSinceEpoch ~/ 1000;
|
|
await _notif.show(idUnik, title, body, details);
|
|
}
|
|
}
|