// lib/app/widgets/patient_card.dart import 'package:flutter/material.dart'; import '../modules/profile/controllers/profile_controller.dart'; class PatientCard extends StatelessWidget { final Patient patient; final VoidCallback? onEditTap; final VoidCallback? onDeleteTap; const PatientCard({ super.key, required this.patient, this.onEditTap, this.onDeleteTap, }); @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.only(bottom: 12), padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), border: Border.all( color: Colors.grey.shade200, width: 1.5, ), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.08), blurRadius: 12, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Header: Nama & Actions Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Row( children: [ Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: const Color(0xFF0091EA).withOpacity(0.1), borderRadius: BorderRadius.circular(10), ), child: const Icon( Icons.person, color: Color(0xFF0091EA), size: 24, ), ), const SizedBox(width: 12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( patient.name, style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 16, color: Color(0xFF424242), ), ), const SizedBox(height: 2), Text( patient.room, style: TextStyle( color: Colors.grey[600], fontSize: 13, ), ), ], ), ), ], ), ), Row( children: [ // Edit Button InkWell( onTap: onEditTap, borderRadius: BorderRadius.circular(8), child: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.amber.withOpacity(0.15), borderRadius: BorderRadius.circular(8), ), child: const Icon( Icons.edit, size: 18, color: Colors.amber, ), ), ), const SizedBox(width: 8), // Delete Button InkWell( onTap: onDeleteTap, borderRadius: BorderRadius.circular(8), child: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.redAccent.withOpacity(0.15), borderRadius: BorderRadius.circular(8), ), child: const Icon( Icons.delete, size: 18, color: Colors.redAccent, ), ), ), ], ), ], ), const SizedBox(height: 16), // Divider Container( height: 1, color: Colors.grey.shade200, ), const SizedBox(height: 16), // Device ID & Guardian Row( children: [ // Device ID Expanded( child: Row( children: [ Container( width: 8, height: 8, decoration: const BoxDecoration( color: Color(0xFF4CAF50), shape: BoxShape.circle, ), ), const SizedBox(width: 8), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Device ID', style: TextStyle( color: Colors.grey[500], fontSize: 11, fontWeight: FontWeight.w500, ), ), const SizedBox(height: 2), Text( patient.deviceId, style: const TextStyle( color: Color(0xFF424242), fontSize: 13, fontWeight: FontWeight.w600, ), ), ], ), ], ), ), const SizedBox(width: 16), // Guardian Expanded( child: Row( children: [ Icon( Icons.family_restroom, size: 16, color: Colors.grey[600], ), const SizedBox(width: 8), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Wali Pasien', style: TextStyle( color: Colors.grey[500], fontSize: 11, fontWeight: FontWeight.w500, ), ), const SizedBox(height: 2), Text( patient.guardian, style: const TextStyle( color: Color(0xFF424242), fontSize: 13, fontWeight: FontWeight.w600, ), overflow: TextOverflow.ellipsis, ), ], ), ), ], ), ), ], ), ], ), ); } }