158 lines
4.3 KiB
Dart
158 lines
4.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:google_fonts/google_fonts.dart';
|
|
import 'package:firebase_database/firebase_database.dart';
|
|
import '../../../routes/app_pages.dart';
|
|
|
|
class JadwalItem {
|
|
String key;
|
|
String jam;
|
|
int takar;
|
|
int intervalSet;
|
|
|
|
JadwalItem({
|
|
required this.key,
|
|
required this.jam,
|
|
required this.takar,
|
|
required this.intervalSet,
|
|
});
|
|
|
|
factory JadwalItem.fromMap(String key, Map<dynamic, dynamic> map) {
|
|
return JadwalItem(
|
|
key: key,
|
|
jam: map['jam'] ?? '',
|
|
takar: map['takar'] ?? 0,
|
|
intervalSet: map['interval_set'] ?? 0,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'jam': jam,
|
|
'takar': takar,
|
|
'interval_set': intervalSet,
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
class JadwalController extends GetxController {
|
|
final DatabaseReference _jadwalRef =
|
|
FirebaseDatabase.instance.ref().child('jadwal_pakan');
|
|
final DatabaseReference _settingRef =
|
|
FirebaseDatabase.instance.ref().child('setting'); // Update path
|
|
|
|
var jadwalList = <JadwalItem>[].obs;
|
|
var intervalPembersih = 60.obs;
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
fetchJadwal();
|
|
fetchIntervalPembersih();
|
|
}
|
|
|
|
void fetchJadwal() {
|
|
_jadwalRef.onValue.listen((event) {
|
|
final data = event.snapshot.value as Map<dynamic, dynamic>?;
|
|
if (data != null) {
|
|
final items = <JadwalItem>[];
|
|
data.forEach((key, value) {
|
|
items.add(JadwalItem.fromMap(key, value));
|
|
});
|
|
jadwalList.value = items;
|
|
} else {
|
|
jadwalList.clear();
|
|
}
|
|
});
|
|
}
|
|
|
|
void fetchIntervalPembersih() {
|
|
_settingRef.child('interval_pembersih').onValue.listen((event) {
|
|
final value = event.snapshot.value;
|
|
if (value != null) {
|
|
intervalPembersih.value = int.tryParse(value.toString()) ?? 60;
|
|
}
|
|
});
|
|
}
|
|
|
|
Future<void> setIntervalPembersih(int interval) async {
|
|
await _settingRef.update({'interval_pembersih': interval});
|
|
}
|
|
|
|
Future<void> addJadwal(String jam, int takar, int intervalSet) async {
|
|
final newRef = _jadwalRef.push();
|
|
await newRef.set({
|
|
'jam': jam,
|
|
'takar': takar,
|
|
'interval_set': intervalSet,
|
|
});
|
|
}
|
|
|
|
Future<void> updateJadwal(String key, String jam, int takar, int intervalSet) async {
|
|
await _jadwalRef.child(key).update({
|
|
'jam': jam,
|
|
'takar': takar,
|
|
'interval_set': intervalSet,
|
|
});
|
|
}
|
|
|
|
Future<void> deleteJadwal(String key) async {
|
|
await _jadwalRef.child(key).remove();
|
|
}
|
|
|
|
void keNotifikasi() => Get.toNamed(Routes.NOTIFIKASI);
|
|
|
|
void showEditIntervalDialog(BuildContext context, int currentInterval) {
|
|
final intervalController =
|
|
TextEditingController(text: currentInterval.toString());
|
|
|
|
Get.dialog(
|
|
AlertDialog(
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
|
|
title: Text("Edit Interval",
|
|
style: GoogleFonts.poppins(fontWeight: FontWeight.bold)),
|
|
content: TextField(
|
|
controller: intervalController,
|
|
keyboardType: TextInputType.number,
|
|
decoration: InputDecoration(
|
|
labelText: 'Interval (menit)',
|
|
labelStyle: GoogleFonts.poppins(),
|
|
),
|
|
),
|
|
actions: [
|
|
ElevatedButton(
|
|
onPressed: () => Get.back(),
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: Colors.red,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(12),
|
|
),
|
|
),
|
|
child: Text('Batal',
|
|
style: GoogleFonts.poppins(color: Colors.white)),
|
|
),
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
final input = int.tryParse(intervalController.text.trim());
|
|
if (input == null || input <= 0) {
|
|
Get.snackbar('Error', 'Interval harus berupa angka lebih dari 0');
|
|
return;
|
|
}
|
|
setIntervalPembersih(input);
|
|
Get.back();
|
|
},
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: Colors.blue,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(10)),
|
|
),
|
|
child:
|
|
Text("Simpan", style: GoogleFonts.poppins(color: Colors.white)),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|