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....

315 lines
9.8 KiB
Dart

import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/model/pharmacy-intervention-model/nursing_station.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';
import '../../../widgets/shared/app_texts_widget.dart';
import '../../patients/profile/soap_update_vida_plus/assessment/widget/empty_dropdown.dart';
class PharmacyInterventionDialog extends StatefulWidget {
final Function(
String, // dataFrom
String, // dateTo
String, // admissionNumber
String, // patient ID
NursingStationEntity?, // nursingStation
) onDispose;
final String dateFrom;
final String dateTo;
final String admissionNumber;
final String patientID;
final NursingStationEntity? nursingStation;
final NursingStation? station;
const PharmacyInterventionDialog({super.key,
required this.onDispose,
required this.dateFrom,
required this.dateTo,
required this.admissionNumber,
required this.patientID,
required this.nursingStation,
required this.station,
});
@override
State<PharmacyInterventionDialog> createState() =>
_PharmacyInterventionDialogState();
}
class _PharmacyInterventionDialogState
extends State<PharmacyInterventionDialog> {
final TextEditingController admissionNumber = TextEditingController();
NursingStationEntity? nursingStation = null;
final TextEditingController patientId = TextEditingController();
String dateFrom = '';
String dateTo = '';
@override
void initState() {
initData();
super.initState();
}
void initData() {
admissionNumber.text = (widget.admissionNumber == '0')?'':widget.admissionNumber;
nursingStation = 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: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
IconButton(
icon: Icon(Icons.close),
onPressed: () {
Navigator.pop(context);
},
),
SizedBox(height: 8,),
nursingStationView,
SizedBox(
height: 4,
),
_titleAndTextField(TranslationBase
.of(context)
.admissionNumber,
admissionNumber, TextInputType.text),
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, admissionNumber.text,
patientId.text, nursingStation);
},
),
),
]),
],
),
),
),
);
}
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: (toDateSelection && fromDate != null) ? fromDate : ((date
.isNotEmpty && dateTime != null)) ? dateTime : 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;
}
Widget get nursingStationView =>
Row(
children: [
Text(TranslationBase
.of(context)
.nursingStation,),
SizedBox(width: 10,),
widget.station?.entityList?.isEmpty == true ? Expanded(
child: EmptyDropDown())
: Expanded(
child: DropdownButtonHideUnderline(
child: DropdownButton(
dropdownColor: Colors.white,
iconEnabledColor: Colors.black,
icon: Icon(Icons.keyboard_arrow_down),
isExpanded: true,
value: nursingStation == null
? widget.station?.entityList?.first
: nursingStation,
iconSize: 25,
elevation: 16,
onChanged: (newValue) async {
if (newValue != null)
setState(() {
nursingStation = newValue ;
});
},
items:
widget.station?.entityList?.map((item) {
return DropdownMenuItem(
child: AppText(
item.description ?? '',
fontSize: 14,
letterSpacing: -0.96,
color: AppGlobal.appTextColor,
fontWeight: FontWeight.normal,
textAlign: TextAlign.left,
),
value: item,
);
}).toList(),
),
),
)
]);
}