TKK_E32210095/lib/api/firebase_api.dart

62 lines
2.6 KiB
Dart

import 'package:firebase_database/firebase_database.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class FirebaseApi {
final FirebaseDatabase _database = FirebaseDatabase.instance;
final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
FirebaseApi() {
_initNotifications();
}
Future<void> init() async {
await _monitorData();
}
void _initNotifications() {
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('app_icon');
final InitializationSettings initializationSettings =
InitializationSettings(android: initializationSettingsAndroid);
_flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
Future<void> _monitorData() async {
_database.reference().child('sensorData').onValue.listen((event) {
final data = event.snapshot.value as Map<dynamic, dynamic>;
print("Data changed: $data"); // Debugging
String flameStatus = data['flameStatus'].toString();
String smokeDetected = data['smokeDetected'].toString();
if (flameStatus == '2' && smokeDetected == '2') {
print("Condition met, showing notification..."); // Debugging
_showNotification('Peringatan!', 'Asap dan api terdeteksi di rumah ${data['nomorRumah']}');
}
});
_database.reference().child('sensorData2').onValue.listen((event) {
final data = event.snapshot.value as Map<dynamic, dynamic>;
print("Data2 changed: $data"); // Debugging
String flameStatus = data['flameStatus'].toString();
String smokeDetected = data['smokeDetected'].toString();
if (flameStatus == '2' && smokeDetected == '2') {
print("Condition met for data2, showing notification..."); // Debugging
_showNotification('Peringatan!', 'Asap dan api terdeteksi di rumah ${data['nomorRumah']}');
}
});
}
void _showNotification(String title, String body) async {
const AndroidNotificationDetails androidPlatformChannelSpecifics =
AndroidNotificationDetails('default_channel_id', 'Default Channel',
channelDescription: 'Default Channel Description',
importance: Importance.max,
priority: Priority.high,
showWhen: false);
const NotificationDetails platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics);
await _flutterLocalNotificationsPlugin.show(0, title, body, platformChannelSpecifics, payload: 'item x');
print("Notification shown: $title - $body"); // Debugging
}
}