// lib/app/modules/home_patient/views/home_patient_view.dart import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../controllers/home_patient_controller.dart'; import '../../../widgets/banner_slider.dart'; import '../../../widgets/monitoring_patient_card.dart'; import '../../../widgets/history_grafik_card.dart'; import '../../../widgets/notification_patient_card.dart'; class HomePatientView extends GetView { const HomePatientView({super.key}); @override Widget build(BuildContext context) { Get.put(HomePatientController()); return Scaffold( backgroundColor: Colors.white, body: SafeArea( child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Header Padding( padding: const EdgeInsets.all(20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Obx( () => Text( 'Halo ${controller.patientName.value}', style: const TextStyle( fontSize: 24, fontWeight: FontWeight.bold, ), ), ), Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( border: Border.all(color: Colors.grey[300]!), borderRadius: BorderRadius.circular(10), ), child: const Icon( Icons.logout, color: Colors.red, ), ), ], ), ), // Banner Slider - Gunakan widget universal BannerSlider( bannerImages: controller.bannerImages, currentCarouselIndex: controller.currentCarouselIndex, onPageChanged: controller.updateCarouselIndex, ), const SizedBox(height: 15), // Monitoring Infus Section Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text( 'Monitoring Infus', style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, ), ), TextButton( onPressed: () {}, child: const Text( 'See all', style: TextStyle( color: Color(0xFF2196F3), fontWeight: FontWeight.w600, ), ), ), ], ), ), // Monitoring Card Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Obx( () => MonitoringPatientCard( dropsPerMinute: controller.currentInfusData.value.dropsPerMinute, room: controller.currentInfusData.value.room, deviceId: controller.currentInfusData.value.deviceId, updateTime: controller.currentInfusData.value.updateTime, onTap: () { // Handle bookmark tap }, ), ), ), const SizedBox(height: 15), // History Data Section Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text( 'History Data', style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, ), ), TextButton( onPressed: () {}, child: const Text( 'See all', style: TextStyle( color: Color(0xFF2196F3), fontWeight: FontWeight.w600, ), ), ), ], ), ), // Chart Card Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Obx( () => HistoryGrafikCard( dataPoints: controller.chartDataPoints.toList(), onBookmarkTap: () { // Handle bookmark tap }, ), ), ), const SizedBox(height: 15), // History Notifikasi Section Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text( 'History Notifikasi', style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, ), ), TextButton( onPressed: () {}, child: const Text( 'See all', style: TextStyle( color: Color(0xFF2196F3), fontWeight: FontWeight.w600, ), ), ), ], ), ), // Notifications List Obx( () => ListView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), padding: const EdgeInsets.symmetric(horizontal: 20), itemCount: controller.notificationsList.length, itemBuilder: (context, index) { final notification = controller.notificationsList[index]; return NotificationPatientCard( title: notification.title, message: notification.message, room: notification.room, deviceId: notification.deviceId, timeAgo: notification.timeAgo, onTap: () { // Handle notification tap }, ); }, ), ), const SizedBox(height: 20), ], ), ), ), // Floating Action Button - Call Nurse floatingActionButton: FloatingActionButton( onPressed: () => controller.showCallDialog(context), backgroundColor: const Color(0xFF2196F3), child: const Icon( Icons.phone, color: Colors.white, ), ), ); } }