import 'package:flutter/material.dart'; import '../modules/schedule/controllers/schedule_controller.dart'; class ScheduleCard extends StatelessWidget { final PatientSchedule schedule; final VoidCallback? onEditTap; final VoidCallback? onDeleteTap; const ScheduleCard({ super.key, required this.schedule, 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: [ _buildHeader(), const SizedBox(height: 12), Container(height: 1, color: Colors.grey.shade200), const SizedBox(height: 16), _buildMedicineAndFluid(), ], ), ); } Widget _buildHeader() { return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( schedule.name, style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 16, color: Color(0xFF424242), ), ), const SizedBox(height: 6), Row( children: [ Container( padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 4), decoration: BoxDecoration( color: const Color(0xFFE3F2FD), borderRadius: BorderRadius.circular(6), ), child: Text( schedule.room, style: const TextStyle( fontSize: 11, color: Color(0xFF2196F3), fontWeight: FontWeight.w600, ), ), ), const SizedBox(width: 8), Container( padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 4), decoration: BoxDecoration( color: Colors.grey[100], borderRadius: BorderRadius.circular(6), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Container( width: 6, height: 6, decoration: const BoxDecoration( color: Color(0xFF4CAF50), shape: BoxShape.circle, ), ), const SizedBox(width: 6), Text( schedule.deviceId, style: TextStyle( fontSize: 11, color: Colors.grey[700], fontWeight: FontWeight.w600, ), ), ], ), ), ], ), ], ), ), Row( children: [ InkWell( onTap: onEditTap, borderRadius: BorderRadius.circular(8), child: Container( padding: const EdgeInsets.all(6), 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), InkWell( onTap: onDeleteTap, borderRadius: BorderRadius.circular(8), child: Container( padding: const EdgeInsets.all(6), decoration: BoxDecoration( color: Colors.redAccent.withOpacity(0.15), borderRadius: BorderRadius.circular(8), ), child: const Icon(Icons.delete, size: 18, color: Colors.redAccent), ), ), ], ), ], ); } Widget _buildMedicineAndFluid() { return Row( children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Container( padding: const EdgeInsets.all(6), decoration: BoxDecoration( color: const Color(0xFF2196F3).withOpacity(0.1), borderRadius: BorderRadius.circular(6), ), child: const Icon(Icons.medication, size: 16, color: Color(0xFF2196F3)), ), const SizedBox(width: 8), Text( 'Obat & Dosis', style: TextStyle( color: Colors.grey[600], fontSize: 11, fontWeight: FontWeight.w500, ), ), ], ), const SizedBox(height: 8), Padding( padding: const EdgeInsets.only(left: 4), child: Text( schedule.medicineTime, style: const TextStyle( color: Color(0xFF424242), fontSize: 13, fontWeight: FontWeight.w600, ), ), ), ], ), ), const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Container( padding: const EdgeInsets.all(6), decoration: BoxDecoration( color: const Color(0xFF00BCD4).withOpacity(0.1), borderRadius: BorderRadius.circular(6), ), child: const Icon(Icons.water_drop, size: 16, color: Color(0xFF00BCD4)), ), const SizedBox(width: 8), Text( 'Cairan & Tetes', style: TextStyle( color: Colors.grey[600], fontSize: 11, fontWeight: FontWeight.w500, ), ), ], ), const SizedBox(height: 8), Padding( padding: const EdgeInsets.only(left: 4), child: Text( schedule.fluidTime, style: const TextStyle( color: Color(0xFF424242), fontSize: 13, fontWeight: FontWeight.w600, ), ), ), ], ), ), ], ); } }