// lib/app/modules/profile/views/profile_view.dart import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../controllers/profile_controller.dart'; import '../../../widgets/patient_card.dart'; import '../../../widgets/modal_patient_add_edit.dart'; class ProfileView extends GetView { const ProfileView({super.key}); @override Widget build(BuildContext context) { Get.put(ProfileController()); return Scaffold( backgroundColor: Colors.white, body: SafeArea( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Header Section Container( color: Colors.white, padding: const EdgeInsets.all(20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text( 'Akun Pasien', style: TextStyle( fontSize: 24, fontWeight: FontWeight.bold, color: Color(0xFF424242), ), ), Container( decoration: BoxDecoration( gradient: const LinearGradient( colors: [ Color(0xFF0091EA), Color(0xFF0277BD), ], ), borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: const Color(0xFF0091EA).withOpacity(0.3), blurRadius: 8, offset: const Offset(0, 2), ), ], ), child: ElevatedButton( onPressed: () { Get.dialog( const ModalPatientAddEdit(isEdit: false), barrierDismissible: true, ); }, style: ElevatedButton.styleFrom( backgroundColor: Colors.transparent, shadowColor: Colors.transparent, padding: const EdgeInsets.symmetric( horizontal: 20, vertical: 12, ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), child: const Row( mainAxisSize: MainAxisSize.min, children: [ Icon(Icons.add, color: Colors.white, size: 20), SizedBox(width: 8), Text( 'Tambah', style: TextStyle( color: Colors.white, fontWeight: FontWeight.w600, fontSize: 15, ), ), ], ), ), ), ], ), ), // Patient List Expanded( child: Obx( () { if (controller.patients.isEmpty) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( Icons.people_outline, size: 80, color: Colors.grey[400], ), const SizedBox(height: 16), Text( 'Belum ada data pasien', style: TextStyle( fontSize: 16, color: Colors.grey[600], ), ), ], ), ); } return ListView.builder( padding: const EdgeInsets.symmetric( horizontal: 20, vertical: 8, ), itemCount: controller.patients.length, itemBuilder: (context, index) { final patient = controller.patients[index]; return PatientCard( patient: patient, onEditTap: () { Get.dialog( ModalPatientAddEdit( patient: patient, isEdit: true, ), barrierDismissible: true, ); }, onDeleteTap: () { Get.dialog( AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), title: const Text('Hapus Pasien'), content: Text( 'Apakah Anda yakin ingin menghapus ${patient.name}?', ), actions: [ TextButton( onPressed: () => Get.back(), child: Text( 'Batal', style: TextStyle(color: Colors.grey[700]), ), ), TextButton( onPressed: () { controller.deletePatient(patient.id); Get.back(); Get.snackbar( 'Berhasil', 'Pasien berhasil dihapus', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.redAccent, colorText: Colors.white, margin: const EdgeInsets.all(16), icon: const Icon( Icons.delete, color: Colors.white, ), ); }, child: const Text( 'Hapus', style: TextStyle(color: Colors.red), ), ), ], ), ); }, ); }, ); }, ), ), ], ), ), ); } }