TKK_E32221196/lib/app/modules/jadwal/controllers/jadwal_controller.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)),
),
],
),
);
}
}