import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; class PharmacyInterventionDialog extends StatefulWidget { final Function( String, // dataFrom String, // dateTo String, // admissionNumber String, // patient ID String, // nursingStation ) onDispose; final String dateFrom; final String dateTo; final String admissionNumber; final String patientID; final String nursingStation; const PharmacyInterventionDialog({super.key, required this.onDispose, required this.dateFrom, required this.dateTo, required this.admissionNumber, required this.patientID, required this.nursingStation}); @override State createState() => _PharmacyInterventionDialogState(); } class _PharmacyInterventionDialogState extends State { final TextEditingController admissionNumber = TextEditingController(); final TextEditingController nursingStation = TextEditingController(); final TextEditingController patientId = TextEditingController(); String dateFrom = ''; String dateTo = ''; @override void initState() { initData(); super.initState(); } void initData() { admissionNumber.text = (widget.admissionNumber == '0')?'':widget.admissionNumber; nursingStation.text = (widget.nursingStation == '0')?'':widget.nursingStation; patientId.text = (widget.patientID == '0' )?'':widget.patientID; dateTo = getDateString(widget.dateTo); dateFrom = getDateString(widget.dateFrom); } @override Widget build(BuildContext context) { return Dialog( backgroundColor: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), child: Padding( padding: const EdgeInsets.all(24), child: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, children: [ IconButton( icon: Icon(Icons.close), onPressed: () { Navigator.pop(context); }, ), SizedBox(height: 8,), _titleAndTextField(TranslationBase .of(context) .nursingStation, nursingStation, TextInputType.number), SizedBox( height: 4, ), _titleAndTextField(TranslationBase .of(context) .admissionNumber, admissionNumber, TextInputType.number), SizedBox( height: 4, ), _titleAndTextField(TranslationBase .of(context) .patientID, patientId, TextInputType.number), SizedBox( height: 4, ), _dateSelection(TranslationBase .of(context) .dateFrom, (date) { DateTime? fromDate = getDate(date); DateTime? toDate =getDate(dateTo); if(toDate == null){ setState(() { dateFrom = date; }); return; } if(fromDate!.compareTo(toDate!) == 1){ setState(() { dateFrom = date; dateTo = ''; }); return; } setState(() { dateFrom = date; }); }, dateFrom, false), SizedBox( height: 4, ), _dateSelection(TranslationBase .of(context) .dateTo, (date) { setState(() { dateTo = date; }); }, dateTo, true, selectedFromDate: dateFrom), SizedBox( height: 8, ), Row(children: [ Expanded( child: AppButton( title: TranslationBase .of(context) .search, hasBorder: true, borderColor: Color(0xFFB8382B), color: AppGlobal.appRedColor, fontColor: Colors.white, onPressed: () async { //(dateFrom, dateTo, admissionNumber, patientId, nursingStation) widget.onDispose(dateFrom, dateTo, nursingStation.text, patientId.text, nursingStation.text); }, ), ), ]), ], ), ), ); } Widget _dateSelection(String title, Function(String) onDateSelected, String selectedDate, bool isToDateSelection,{String? selectedFromDate}) { return GestureDetector( onTap: () => _selectDate(onDateSelected,selectedDate, isToDateSelection , selectedFromDate: selectedFromDate), child: Row( mainAxisSize: MainAxisSize.min, children: [ Text(title), Expanded( child: ListTile( title: Text( selectedDate, ), trailing: Icon(Icons.arrow_drop_down_outlined), ), ) ], ), ); } Future _selectDate(Function(String) updateDate , String date, bool toDateSelection, {String? selectedFromDate}) async { DateTime? dateTime = getDate(date); DateTime? fromDate = getDate(selectedFromDate??''); final DateTime? picked = await showDatePicker( context: context, initialDate:date.isNotEmpty? getDate(date) :fromDate != null? fromDate: DateTime.now(), firstDate:(( date.isNotEmpty && dateTime != null ) ) ? dateTime: (toDateSelection && fromDate != null)?fromDate :DateTime(DateTime .now() .year - 150), lastDate: DateTime(DateTime .now() .year + 150), initialEntryMode: DatePickerEntryMode.calendar, builder: (_, child) { return Theme( data: ThemeData.light().copyWith( colorScheme: ColorScheme.fromSwatch( primarySwatch: Colors.red, accentColor: AppGlobal.appRedColor, ), dialogBackgroundColor: Colors.white, ), child: child!, ); }); if (picked != null) { updateDate(getFormattedDate(picked)); } // } } Widget _titleAndTextField(String title, TextEditingController controller, TextInputType? inputType) { return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisSize: MainAxisSize.min, children: [ Text(title), Expanded( child: TextFormField( keyboardType: inputType, decoration: InputDecoration( hintText: '', focusedBorder: InputBorder.none, enabledBorder: InputBorder.none, contentPadding: EdgeInsetsDirectional.only(start: 10.0), ), textAlign: TextAlign.end, controller: controller, ), ) ], ); } void initFromDate() { var time = DateTime.now(); dateFrom = getFormattedDate(time); } String getFormattedDate(DateTime time) { return DateFormat('yyyy-MM-dd').format(time); } String getDateString(String dateTime) { if (dateTime.isEmpty) return ''; DateTime? now = getDate(dateTime); if(now == null ) return ''; return DateFormat('yyyy-MM-dd').format(now); } DateTime? getDate(String dateTime){ if (dateTime.isEmpty) return null; List splitedDate = dateTime.split('-'); DateTime now = DateTime(int.parse(splitedDate[0]), int.parse(splitedDate[1]), int.parse(splitedDate[2])); return now; } }