87 lines
2.5 KiB
Dart
87 lines
2.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:firebase_core/firebase_core.dart';
|
|
import 'package:firebase_database/firebase_database.dart';
|
|
import 'package:workmanager/workmanager.dart';
|
|
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|
import 'package:ta_kebakaran_aplikasi/pages/home_satpam.dart';
|
|
|
|
|
|
Future<void> firebaseDatabaseCheck() async {
|
|
final databaseReference = FirebaseDatabase.instance.ref();
|
|
final DatabaseEvent event = await databaseReference.once();
|
|
|
|
// Assuming your data structure
|
|
final Map<dynamic, dynamic> data = event.snapshot.value as Map<dynamic, dynamic>;
|
|
|
|
final flameValue = data['flameValue'];
|
|
final smokeDetected = data['smokeDetected'];
|
|
|
|
if (flameValue == 2 || smokeDetected == 2) {
|
|
_showNotification('Peringatan', 'Ada indikasi kebakaran');
|
|
}
|
|
}
|
|
|
|
void callbackDispatcher() {
|
|
Workmanager().executeTask((task, inputData) {
|
|
firebaseDatabaseCheck();
|
|
return Future.value(true);
|
|
});
|
|
}
|
|
|
|
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
|
|
|
|
void _showNotification(String title, String body) async {
|
|
const AndroidNotificationDetails androidPlatformChannelSpecifics =
|
|
AndroidNotificationDetails('your_channel_id', 'your_channel_name',
|
|
channelDescription: 'your_channel_description',
|
|
importance: Importance.max,
|
|
priority: Priority.high,
|
|
ticker: 'ticker');
|
|
const NotificationDetails platformChannelSpecifics =
|
|
NotificationDetails(android: androidPlatformChannelSpecifics);
|
|
await flutterLocalNotificationsPlugin.show(
|
|
0,
|
|
title,
|
|
body,
|
|
platformChannelSpecifics,
|
|
payload: 'item x',
|
|
);
|
|
}
|
|
|
|
void main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
await Firebase.initializeApp();
|
|
|
|
final initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher');
|
|
final initializationSettings = InitializationSettings(
|
|
android: initializationSettingsAndroid,
|
|
);
|
|
flutterLocalNotificationsPlugin.initialize(initializationSettings);
|
|
|
|
Workmanager().initialize(
|
|
callbackDispatcher,
|
|
isInDebugMode: true, // True untuk pengembangan, false untuk produksi
|
|
);
|
|
|
|
Workmanager().registerPeriodicTask(
|
|
"1",
|
|
"simplePeriodicTask",
|
|
frequency: Duration(minutes: 15),
|
|
);
|
|
|
|
runApp(MyApp());
|
|
}
|
|
|
|
class MyApp extends StatelessWidget {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
title: 'Flutter Demo',
|
|
theme: ThemeData(
|
|
primarySwatch: Colors.blue,
|
|
),
|
|
home: HomeSatpam(),
|
|
);
|
|
}
|
|
}
|