62 lines
2.6 KiB
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
|
|
}
|
|
}
|