You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
doctor_app_flutter/lib/screens/pharmacy_intervention/widgets/PharmacyInterventionDialog....

260 lines
7.9 KiB
Dart

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<PharmacyInterventionDialog> createState() =>
_PharmacyInterventionDialogState();
}
class _PharmacyInterventionDialogState
extends State<PharmacyInterventionDialog> {
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<String> splitedDate = dateTime.split('-');
DateTime now = DateTime(int.parse(splitedDate[0]),
int.parse(splitedDate[1]), int.parse(splitedDate[2]));
return now;
}
}