116 lines
3.3 KiB
Dart
116 lines
3.3 KiB
Dart
// lib/app/modules/home/controllers/home_controller.dart
|
|
import 'package:get/get.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
class InfusMonitoring {
|
|
final String id;
|
|
final String patientName;
|
|
final String deviceId;
|
|
final String room;
|
|
final String dropsPerMinute;
|
|
final DateTime lastUpdate;
|
|
final DateTime createdAt; // Tambahkan properti createdAt
|
|
|
|
InfusMonitoring({
|
|
required this.id,
|
|
required this.patientName,
|
|
required this.deviceId,
|
|
required this.room,
|
|
required this.dropsPerMinute,
|
|
required this.lastUpdate,
|
|
required this.createdAt, // Pastikan ini diisi saat pembuatan objek
|
|
});
|
|
}
|
|
|
|
class HomeController extends GetxController {
|
|
final searchController = TextEditingController();
|
|
|
|
// Banner carousel
|
|
final currentCarouselIndex = 0.obs;
|
|
final bannerImages = [
|
|
'assets/images/banner-slider1.png',
|
|
'assets/images/banner-slider2.png',
|
|
];
|
|
|
|
final monitoringList = <InfusMonitoring>[
|
|
InfusMonitoring(
|
|
id: '1',
|
|
patientName: 'Mrs. Shinta',
|
|
deviceId: 'SI001',
|
|
room: 'MAWAR 002',
|
|
dropsPerMinute: '30 tetes per menit',
|
|
lastUpdate: DateTime.now().subtract(const Duration(minutes: 5)),
|
|
createdAt: DateTime.now(), // Menambahkan createdAt
|
|
),
|
|
InfusMonitoring(
|
|
id: '2',
|
|
patientName: 'Mr. Suparjo',
|
|
deviceId: 'SI001',
|
|
room: 'MELATI 001',
|
|
dropsPerMinute: '30 tetes per menit',
|
|
lastUpdate: DateTime.now().subtract(const Duration(minutes: 5)),
|
|
createdAt: DateTime.now(), // Menambahkan createdAt
|
|
),
|
|
].obs;
|
|
|
|
@override
|
|
void onClose() {
|
|
searchController.dispose();
|
|
super.onClose();
|
|
}
|
|
|
|
void updateCarouselIndex(int index) {
|
|
currentCarouselIndex.value = index;
|
|
}
|
|
|
|
void showLogoutDialog(BuildContext context) {
|
|
showDialog(
|
|
context: context,
|
|
builder: (BuildContext context) {
|
|
return AlertDialog(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(15),
|
|
),
|
|
title: const Text(
|
|
'Konfirmasi Logout',
|
|
style: TextStyle(fontWeight: FontWeight.bold),
|
|
),
|
|
content: const Text('Apakah Anda yakin ingin keluar?'),
|
|
actions: [
|
|
TextButton(
|
|
onPressed: () => Navigator.of(context).pop(),
|
|
child: Text('Batal', style: TextStyle(color: Colors.grey[600])),
|
|
),
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
Navigator.of(context).pop();
|
|
// Navigasi ke halaman login
|
|
Get.offAllNamed('/login');
|
|
},
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: Colors.red,
|
|
foregroundColor: Colors.white,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(8),
|
|
),
|
|
),
|
|
child: const Text('Logout'),
|
|
),
|
|
],
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
String getLastUpdateText(DateTime lastUpdate) {
|
|
final difference = DateTime.now().difference(lastUpdate);
|
|
if (difference.inMinutes < 60) {
|
|
return '${difference.inMinutes}min ago';
|
|
} else if (difference.inHours < 24) {
|
|
return '${difference.inHours}h ago';
|
|
} else {
|
|
return '${difference.inDays}d ago';
|
|
}
|
|
}
|
|
}
|