Refactor add_prescription_form

merge-requests/967/head
RoaaGhali98 4 years ago
parent 2b38293d61
commit c1956aee9b

@ -1,54 +1,24 @@
import 'package:autocomplete_textfield/autocomplete_textfield.dart'; import 'package:autocomplete_textfield/autocomplete_textfield.dart';
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/Prescriptions/post_prescrition_req_model.dart';
import 'package:doctor_app_flutter/core/model/Prescriptions/prescription_model.dart'; import 'package:doctor_app_flutter/core/model/Prescriptions/prescription_model.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/model/search_drug/get_medication_response_model.dart'; import 'package:doctor_app_flutter/core/model/search_drug/get_medication_response_model.dart';
import 'package:doctor_app_flutter/core/provider/robot_provider.dart'; import 'package:doctor_app_flutter/core/provider/robot_provider.dart';
import 'package:doctor_app_flutter/core/service/AnalyticsService.dart';
import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/core/model/SOAP/GetAssessmentReqModel.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/prescription/add_prescription/drugtodrug.dart';
import 'package:doctor_app_flutter/screens/prescription/add_prescription/prescription_form_widget.dart'; import 'package:doctor_app_flutter/screens/prescription/add_prescription/prescription_form_widget.dart';
import 'package:doctor_app_flutter/screens/prescription/add_prescription/search_preescription_widget.dart'; import 'package:doctor_app_flutter/screens/prescription/add_prescription/search_preescription_widget.dart';
import 'package:doctor_app_flutter/screens/prescription/prescription_text_filed.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/medicine/medicine_item_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/TextFields.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:doctor_app_flutter/widgets/shared/speech-text-popup.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app_text_form_field.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:speech_to_text/speech_recognition_error.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt; import 'package:speech_to_text/speech_to_text.dart' as stt;
import 'add_drug_widget.dart';
class AddPrescriptionForm extends StatefulWidget { class AddPrescriptionForm extends StatefulWidget {
final PrescriptionViewModel prescriptionViewModel; final PrescriptionViewModel prescriptionViewModel;
final PatiantInformtion patient; final PatiantInformtion patient;
final List<PrescriptionModel> prescriptionList; final List<PrescriptionModel> prescriptionList;
AddPrescriptionForm(
AddPrescriptionForm(this.prescriptionViewModel, this.patient, this.prescriptionList, ); this.prescriptionViewModel, this.patient, this.prescriptionList);
@override @override
_AddPrescriptionFormState createState() => _AddPrescriptionFormState(); _AddPrescriptionFormState createState() => _AddPrescriptionFormState();
@ -61,9 +31,10 @@ class _AddPrescriptionFormState extends State<AddPrescriptionForm> {
String durationError; String durationError;
String unitError; String unitError;
String strengthError; String strengthError;
int selectedType; int selectedType;
bool visibilitySearch = true;
TextEditingController strengthController = TextEditingController(); TextEditingController strengthController = TextEditingController();
TextEditingController unitController = TextEditingController(); TextEditingController unitController = TextEditingController();
TextEditingController indicationController = TextEditingController(); TextEditingController indicationController = TextEditingController();
@ -107,21 +78,21 @@ class _AddPrescriptionFormState extends State<AddPrescriptionForm> {
onModelReady: (model) async { onModelReady: (model) async {
// // await getPatientAssessment(getAssessmentReqModel); // // await getPatientAssessment(getAssessmentReqModel);
// model.onInitiateAllPrescription(groupProcedures: widget.groupProcedures, patient: widget.patient); // model.onInitiateAllPrescription(groupProcedures: widget.groupProcedures, patient: widget.patient);
await model.getAssessmentList(patientInfo: widget.patient,isLocalBusy: true); await model.getAssessmentList(
patientInfo: widget.patient, isLocalBusy: true);
}, },
builder: ( builder: (
BuildContext context, BuildContext context,
MedicineViewModel model, MedicineViewModel model,
Widget child,) => Widget child,
) =>
NetworkBaseView( NetworkBaseView(
baseViewModel: model, baseViewModel: model,
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
FocusScope.of(context).requestFocus(new FocusNode()); FocusScope.of(context).requestFocus(new FocusNode());
}, },
child: DraggableScrollableSheet( child: DraggableScrollableSheet(
initialChildSize: 0.98, initialChildSize: 0.98,
maxChildSize: 0.98, maxChildSize: 0.98,
minChildSize: 0.9, minChildSize: 0.9,
@ -151,24 +122,42 @@ class _AddPrescriptionFormState extends State<AddPrescriptionForm> {
key: formKey, key: formKey,
child: Column( child: Column(
children: [ children: [
SearchPrescriptionWidget( Visibility(
spaceBetweenTextFields: spaceBetweenTextFields, visible: visibilitySearch,
medicineViewModel: model, child: SearchPrescriptionWidget(
prescriptionViewModel: widget.prescriptionViewModel, spaceBetweenTextFields:
spaceBetweenTextFields,
medicineViewModel: model,
prescriptionViewModel:
widget.prescriptionViewModel,
onItemSelected:
(GetMedicationResponseModel
medication) {
setState(() {
visibilitySearch = !visibilitySearch;
_selectedMedication = medication;
});
},
),
), ),
Visibility(
Container( visible: !visibilitySearch,
child: Container(
child: Column( child: Column(
children: [ children: [
PrescriptionFormWidget( PrescriptionFormWidget(
patient: widget.patient, patient: widget.patient,
prescriptionViewModel: widget.prescriptionViewModel, prescriptionViewModel:
widget.prescriptionViewModel,
medicineViewModel: model, medicineViewModel: model,
prescriptionList: widget.prescriptionList, prescriptionList:
widget.prescriptionList,
selectedMedication: _selectedMedication,
), ),
], ],
), ),
), ),
),
], ],
), ),
), ),

@ -2,6 +2,7 @@ import 'package:autocomplete_textfield/autocomplete_textfield.dart';
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/model/Prescriptions/prescription_model.dart'; import 'package:doctor_app_flutter/core/model/Prescriptions/prescription_model.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/model/search_drug/get_medication_response_model.dart'; import 'package:doctor_app_flutter/core/model/search_drug/get_medication_response_model.dart';
import 'package:doctor_app_flutter/core/provider/robot_provider.dart'; import 'package:doctor_app_flutter/core/provider/robot_provider.dart';
import 'package:doctor_app_flutter/core/service/AnalyticsService.dart'; import 'package:doctor_app_flutter/core/service/AnalyticsService.dart';
@ -9,7 +10,6 @@ import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/locator.dart'; import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/prescription/prescription_text_filed.dart'; import 'package:doctor_app_flutter/screens/prescription/prescription_text_filed.dart';
import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
@ -25,19 +25,23 @@ import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:speech_to_text/speech_recognition_error.dart'; import 'package:speech_to_text/speech_recognition_error.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt; import 'package:speech_to_text/speech_to_text.dart' as stt;
import 'add_drug_widget.dart';
import 'add_drug_widget.dart';
class PrescriptionFormWidget extends StatefulWidget { class PrescriptionFormWidget extends StatefulWidget {
final PatiantInformtion patient; final PatiantInformtion patient;
final List<PrescriptionModel> prescriptionList; final List<PrescriptionModel> prescriptionList;
final PrescriptionViewModel prescriptionViewModel; final PrescriptionViewModel prescriptionViewModel;
final MedicineViewModel medicineViewModel; final MedicineViewModel medicineViewModel;
final GetMedicationResponseModel selectedMedication;
const PrescriptionFormWidget(
const PrescriptionFormWidget({Key key, this.patient, this.prescriptionList, {Key key,
this.prescriptionViewModel, this.medicineViewModel,}); this.patient,
this.prescriptionList,
this.prescriptionViewModel,
this.medicineViewModel,
this.selectedMedication});
@override @override
_PrescriptionFormWidgetState createState() => _PrescriptionFormWidgetState(); _PrescriptionFormWidgetState createState() => _PrescriptionFormWidgetState();
@ -64,11 +68,10 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
final myController = TextEditingController(); final myController = TextEditingController();
DateTime selectedDate; DateTime selectedDate;
int strengthChar; int strengthChar;
GetMedicationResponseModel _selectedMedication;
PrescriptionViewModel prescriptionViewModel; PrescriptionViewModel prescriptionViewModel;
GlobalKey key = GlobalKey key =
new GlobalKey<AutoCompleteTextFieldState<GetMedicationResponseModel>>(); new GlobalKey<AutoCompleteTextFieldState<GetMedicationResponseModel>>();
TextEditingController drugIdController = TextEditingController(); TextEditingController drugIdController = TextEditingController();
TextEditingController doseController = TextEditingController(); TextEditingController doseController = TextEditingController();
@ -89,7 +92,6 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
dynamic box; dynamic box;
dynamic x; dynamic x;
setSelectedType(int val) { setSelectedType(int val) {
setState(() { setState(() {
selectedType = val; selectedType = val;
@ -153,445 +155,366 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size; final screenSize = MediaQuery.of(context).size;
return Visibility( return Column(
visible: visibilitySearch, children: [
child: Column( AppText(
children: [ widget.selectedMedication?.description ?? "",
AppText( fontWeight: FontWeight.w600,
_selectedMedication?.description ?? ),
"", SizedBox(
fontWeight: FontWeight.w600, height: 15.0,
), ),
SizedBox( Container(
height: 15.0, child: Row(
), mainAxisAlignment: MainAxisAlignment.start,
Container( children: [
child: Row( SizedBox(
mainAxisAlignment: MainAxisAlignment.start, width: 6,
children: [ ),
SizedBox(width: 6,), AppText(
AppText( TranslationBase.of(context).orderType,
TranslationBase.of(context) fontWeight: FontWeight.w500,
.orderType, ),
fontWeight: FontWeight.w500, SizedBox(
), width: 18,
SizedBox(width: 18,), ),
Radio( Radio(
activeColor: activeColor: AppGlobal.appRedColor,
AppGlobal.appRedColor, value: 1,
value: 1, groupValue: selectedType,
groupValue: selectedType, onChanged: (value) {
onChanged: (value) { setSelectedType(value);
setSelectedType(value); },
}, ),
), Text(TranslationBase.of(context).regular),
Text(TranslationBase.of(context) ],
.regular),
],
),
), ),
Container( ),
width: double.infinity, Container(
child: Row( width: double.infinity,
children: [ child: Row(
Container( children: [
width: MediaQuery.of(context) Container(
.size width: MediaQuery.of(context).size.width * 0.35,
.width * child: AppTextFieldCustom(
0.35, height: 38,
child: AppTextFieldCustom( validationError: strengthError,
height: 38, hintText: 'Strength',
validationError: isTextFieldHasSuffix: false,
strengthError, enabled: true,
hintText: 'Strength', controller: strengthController,
isTextFieldHasSuffix: false, onChanged: (String value) {
enabled: true,
controller:
strengthController,
onChanged: (String value) {
setState(() {
strengthChar =
value.length;
});
if (strengthChar >= 5) {
DrAppToastMsg
.showErrorToast(
TranslationBase.of(
context)
.only5DigitsAllowedForStrength,
);
}
},
inputType: TextInputType
.numberWithOptions(
decimal: true,
),
),
),
SizedBox(
width: 5.0,
),
// Container(
// width: MediaQuery.of(context)
// .size
// .width *
// 0.35,
// child: AppTextFieldCustom(
// height: 38,
// validationError:
// unitError,
// hintText: 'Unit',
// isTextFieldHasSuffix: false,
// enabled: true,
// controller:
// unitController,
// onChanged: (selectedValue) {
// setState(() {
// units = selectedValue;
// units['isDefault'] = true;
// });
// if (strengthChar >= 5) {
// DrAppToastMsg
// .showErrorToast(
// TranslationBase.of(
// context)
// .only5DigitsAllowedForStrength,
// );
// }
// },
// inputType: TextInputType
// .numberWithOptions(
// decimal: true,
// ),
// ),
// ),
PrescriptionTextFiled(
width: MediaQuery.of(context)
.size
.width *
0.510,
element: widget.medicineViewModel
.itemMedicineListUnit
.length ==
1
? widget.medicineViewModel
.itemMedicineListUnit[0]
: units,
elementError: unitError,
keyName: 'description',
keyId: 'parameterCode',
hintText: 'Unit',
elementList: widget.medicineViewModel
.itemMedicineListUnit,
okFunction: (selectedValue) {
setState(() { setState(() {
units = selectedValue; strengthChar = value.length;
units['isDefault'] = true;
}); });
if (strengthChar >= 5) {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.only5DigitsAllowedForStrength,
);
}
}, },
), inputType: TextInputType.numberWithOptions(
], decimal: true,
),
),
SizedBox(
height: spaceBetweenTextFields),
PrescriptionTextFiled(
elementList:
widget.medicineViewModel.itemMedicineListRoute,
element: widget.medicineViewModel.itemMedicineListRoute
.length ==
1
? route = widget.medicineViewModel.itemMedicineListRoute[0]
: route,
elementError: routeError,
keyId: 'parameterCode',
keyName: 'description',
okFunction: (selectedValue) {
setState(() {
route = selectedValue;
route['isDefault'] = true;
});
},
hintText:
TranslationBase.of(context)
.route,
),
SizedBox(
height: spaceBetweenTextFields),
PrescriptionTextFiled(
hintText: TranslationBase.of(context).frequency,
elementError: frequencyError,
// element: frequency,
element: widget.medicineViewModel.itemMedicineListRoute
.length ==
1
? frequency = widget.medicineViewModel.itemMedicineListRoute[0]
: frequency,
elementList: widget.medicineViewModel.itemMedicineList,
keyId: 'parameterCode',
keyName: 'description',
okFunction: (selectedValue) {
setState(() {
frequency = selectedValue;
frequency['isDefault'] = true;
if (_selectedMedication != null && duration != null && frequency != null && strengthController.text != null) {
widget.medicineViewModel.getBoxQuantity(
freq: frequency['parameterCode'],
duration: duration['id'],
itemCode: _selectedMedication.itemId,
strength: double.parse(strengthController.text)
);
return;
}
});
}),
SizedBox(
height: spaceBetweenTextFields),
PrescriptionTextFiled(
hintText:
TranslationBase.of(context)
.doseTime,
elementError: doseTimeError,
element: doseTime,
elementList:
widget.medicineViewModel.medicationDoseTimeList,
keyId: 'id',
keyName: 'nameEn',
okFunction: (selectedValue) {
setState(() {
doseTime = selectedValue;
});
}),
SizedBox(
height: spaceBetweenTextFields),
if (widget.medicineViewModel
.patientAssessmentList.isNotEmpty)
Container(
height: screenSize.height * 0.070,
width: double.infinity,
color: Colors.white,
child: Row(
children: [
Container(
width:
MediaQuery.of(context)
.size
.width *
0.29,
child: AppTextFieldCustom(
hintText:
widget.medicineViewModel
.patientAssessmentList[
0]
.icdCode10ID
.toString(),
// indication != null
// ? indication[
// 'name']
// : null,
enabled: true,
),
), ),
Container(
width:
MediaQuery.of(context)
.size
.width *
0.57,
color: Colors.white,
child: AppTextFieldCustom(
maxLines: 5,
hintText:
widget.medicineViewModel
.patientAssessmentList[
0]
.asciiDesc
.toString(),
// indication != null
// ? indication[
// 'name']
// : null,
enabled: true,
),
),
],
),
),
SizedBox(
height: spaceBetweenTextFields),
Container(
color: Colors.transparent,
child: InkWell(
onTap: () => selectDate(
context, widget.prescriptionViewModel),
child: AppTextFieldCustom(
validationError:
strengthError,
hintText: 'Date',
isTextFieldHasSuffix: true,
suffixIcon: IconButton(
icon: Icon(
Icons.calendar_today,
color: Colors.black,),
), ),
dropDownText: selectedDate != null
? "${AppDateUtils.convertStringToDateFormat(selectedDate.toString(), "yyyy-MM-dd")}"
: null,
enabled: false,
controller: strengthController,
), ),
SizedBox(
// TextField( width: 5.0,
// decoration: ),
// textFieldSelectorDecoration( // Container(
// width: MediaQuery.of(context)
// .size
// .width *
// 0.35,
// child: AppTextFieldCustom(
// height: 38,
// validationError:
// unitError,
// hintText: 'Unit',
// isTextFieldHasSuffix: false,
// enabled: true,
// controller:
// unitController,
// onChanged: (selectedValue) {
// setState(() {
// units = selectedValue;
// units['isDefault'] = true;
// });
// if (strengthChar >= 5) {
// DrAppToastMsg
// .showErrorToast(
// TranslationBase.of( // TranslationBase.of(
// context) // context)
// .date, // .only5DigitsAllowedForStrength,
// selectedDate != null // );
// ? "${AppDateUtils.convertStringToDateFormat(selectedDate.toString(), "yyyy-MM-dd")}" // }
// : null, // },
// true, // inputType: TextInputType
// suffixIcon: Icon( // .numberWithOptions(
// Icons.calendar_today, // decimal: true,
// color: Colors.black, // ),
// )), // ),
// enabled: false,
// ), // ),
), PrescriptionTextFiled(
width: MediaQuery.of(context).size.width * 0.510,
element:
widget.medicineViewModel.itemMedicineListUnit.length == 1
? widget.medicineViewModel.itemMedicineListUnit[0]
: units,
elementError: unitError,
keyName: 'description',
keyId: 'parameterCode',
hintText: 'Unit',
elementList: widget.medicineViewModel.itemMedicineListUnit,
okFunction: (selectedValue) {
setState(() {
units = selectedValue;
units['isDefault'] = true;
});
},
),
],
), ),
SizedBox( ),
height: spaceBetweenTextFields), SizedBox(height: spaceBetweenTextFields),
PrescriptionTextFiled( PrescriptionTextFiled(
element: duration, elementList: widget.medicineViewModel.itemMedicineListRoute,
elementError: durationError, element: widget.medicineViewModel.itemMedicineListRoute.length == 1
hintText: ? route = widget.medicineViewModel.itemMedicineListRoute[0]
TranslationBase.of(context) : route,
.duration, elementError: routeError,
elementList: keyId: 'parameterCode',
widget.medicineViewModel.medicationDurationList, keyName: 'description',
keyName: 'nameEn', okFunction: (selectedValue) {
keyId: 'id', setState(() {
route = selectedValue;
route['isDefault'] = true;
});
},
hintText: TranslationBase.of(context).route,
),
SizedBox(height: spaceBetweenTextFields),
PrescriptionTextFiled(
hintText: TranslationBase.of(context).frequency,
elementError: frequencyError,
// element: frequency,
element: widget.medicineViewModel.itemMedicineListRoute.length == 1
? frequency = widget.medicineViewModel.itemMedicineListRoute[0]
: frequency,
elementList: widget.medicineViewModel.itemMedicineList,
keyId: 'parameterCode',
keyName: 'description',
okFunction: (selectedValue) { okFunction: (selectedValue) {
setState(() { setState(() {
duration = selectedValue; frequency = selectedValue;
if (_selectedMedication != frequency['isDefault'] = true;
null && if (widget.selectedMedication != null &&
duration != null && duration != null &&
frequency != null && frequency != null &&
strengthController.text != strengthController.text != null) {
null) {
widget.medicineViewModel.getBoxQuantity( widget.medicineViewModel.getBoxQuantity(
freq: frequency[ freq: frequency['parameterCode'],
'parameterCode'], duration: duration['id'],
duration: duration['id'], itemCode: widget.selectedMedication.itemId,
itemCode: strength: double.parse(strengthController.text));
_selectedMedication
.itemId,
strength: double.parse(
strengthController
.text),
);
box = widget.medicineViewModel.boxQuintity;
return; return;
} }
}); });
}, }),
), SizedBox(height: spaceBetweenTextFields),
SizedBox( PrescriptionTextFiled(
height: spaceBetweenTextFields), hintText: TranslationBase.of(context).doseTime,
elementError: doseTimeError,
element: doseTime,
elementList: widget.medicineViewModel.medicationDoseTimeList,
keyId: 'id',
keyName: 'nameEn',
okFunction: (selectedValue) {
setState(() {
doseTime = selectedValue;
});
}),
SizedBox(height: spaceBetweenTextFields),
if (widget.medicineViewModel.patientAssessmentList.isNotEmpty)
Container( Container(
height: screenSize.height * 0.070,
width: double.infinity,
color: Colors.white, color: Colors.white,
child: AppTextFieldCustom( child: Row(
hintText: "UOM", children: [
isTextFieldHasSuffix: false, Container(
dropDownText: width: MediaQuery.of(context).size.width * 0.29,
uom != null ? uom : null, child: AppTextFieldCustom(
enabled: false, hintText: widget
.medicineViewModel.patientAssessmentList[0].icdCode10ID
.toString(),
// indication != null
// ? indication[
// 'name']
// : null,
enabled: true,
),
),
Container(
width: MediaQuery.of(context).size.width * 0.57,
color: Colors.white,
child: AppTextFieldCustom(
maxLines: 5,
hintText: widget
.medicineViewModel.patientAssessmentList[0].asciiDesc
.toString(),
// indication != null
// ? indication[
// 'name']
// : null,
enabled: true,
),
),
],
), ),
), ),
SizedBox( SizedBox(height: spaceBetweenTextFields),
height: spaceBetweenTextFields), Container(
Container( color: Colors.transparent,
color: Colors.white, child: InkWell(
onTap: () => selectDate(context, widget.prescriptionViewModel),
child: AppTextFieldCustom( child: AppTextFieldCustom(
hintText: validationError: strengthError,
TranslationBase.of(context) hintText: 'Date',
.boxQuantity, isTextFieldHasSuffix: true,
isTextFieldHasSuffix: false, suffixIcon: IconButton(
dropDownText: box != null icon: Icon(
? widget.medicineViewModel.boxQuintity.toString() Icons.calendar_today,
color: Colors.black,
),
),
dropDownText: selectedDate != null
? "${AppDateUtils.convertStringToDateFormat(selectedDate.toString(), "yyyy-MM-dd")}"
: null, : null,
enabled: false, enabled: false,
controller: strengthController,
), ),
// TextField(
// decoration:
// textFieldSelectorDecoration(
// TranslationBase.of(
// context)
// .date,
// selectedDate != null
// ? "${AppDateUtils.convertStringToDateFormat(selectedDate.toString(), "yyyy-MM-dd")}"
// : null,
// true,
// suffixIcon: Icon(
// Icons.calendar_today,
// color: Colors.black,
// )),
// enabled: false,
// ),
), ),
SizedBox( ),
height: spaceBetweenTextFields SizedBox(height: spaceBetweenTextFields),
PrescriptionTextFiled(
element: duration,
elementError: durationError,
hintText: TranslationBase.of(context).duration,
elementList: widget.medicineViewModel.medicationDurationList,
keyName: 'nameEn',
keyId: 'id',
okFunction: (selectedValue) {
setState(() {
duration = selectedValue;
if (widget.selectedMedication != null &&
duration != null &&
frequency != null &&
strengthController.text != null) {
widget.medicineViewModel.getBoxQuantity(
freq: frequency['parameterCode'],
duration: duration['id'],
itemCode: widget.selectedMedication.itemId,
strength: double.parse(strengthController.text),
);
box = widget.medicineViewModel.boxQuintity;
return;
}
});
},
),
SizedBox(height: spaceBetweenTextFields),
Container(
color: Colors.white,
child: AppTextFieldCustom(
hintText: "UOM",
isTextFieldHasSuffix: false,
dropDownText: uom != null ? uom : null,
enabled: false,
), ),
Container( ),
decoration: BoxDecoration( SizedBox(height: spaceBetweenTextFields),
borderRadius: BorderRadius.all( Container(
Radius.circular(6.0)), color: Colors.white,
border: Border.all( child: AppTextFieldCustom(
width: 1.0, hintText: TranslationBase.of(context).boxQuantity,
color: isTextFieldHasSuffix: false,
HexColor("#CCCCCC"))), dropDownText: box != null
child: Stack( ? widget.medicineViewModel.boxQuintity.toString()
children: [ : null,
TextFields( enabled: false,
maxLines: 6,
minLines: 4,
hintText: TranslationBase.of(
context)
.instruction,
controller:
instructionController,
//keyboardType: TextInputType.number,
),
Positioned(
top: 0,
right: 15,
child: IconButton(
icon: Icon(
DoctorApp.speechtotext,
color: Colors.black,
size: 35,
),
onPressed: () {
initSpeechState().then(
(value) =>
{onVoiceText()});
},
),
),
],
),
), ),
SizedBox( ),
height: spaceBetweenTextFields), SizedBox(height: spaceBetweenTextFields),
Container( Container(
margin: EdgeInsets.all( decoration: BoxDecoration(
SizeConfig.widthMultiplier * 5), borderRadius: BorderRadius.all(Radius.circular(6.0)),
child: Wrap( border: Border.all(width: 1.0, color: HexColor("#CCCCCC"))),
alignment: WrapAlignment.center, child: Stack(
children: <Widget>[ children: [
AppButton( TextFields(
color: Color(0xff359846), maxLines: 6,
title: TranslationBase.of( minLines: 4,
context) hintText: TranslationBase.of(context).instruction,
.addMedication, controller: instructionController,
fontWeight: FontWeight.w600, //keyboardType: TextInputType.number,
onPressed: () async { ),
addMedicationButton( widget.medicineViewModel); Positioned(
top: 0,
right: 15,
child: IconButton(
icon: Icon(
DoctorApp.speechtotext,
color: Colors.black,
size: 35,
),
onPressed: () {
initSpeechState().then((value) => {onVoiceText()});
}, },
), ),
], ),
), ],
),
),
SizedBox(height: spaceBetweenTextFields),
Container(
margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5),
child: Wrap(
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
color: Color(0xff359846),
title: TranslationBase.of(context).addMedication,
fontWeight: FontWeight.w600,
onPressed: () async {
addMedicationButton(widget.medicineViewModel);
},
),
],
), ),
], ),
), ],
); );
} }
@ -613,7 +536,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
} }
} }
openDrugToDrug(MedicineViewModel model, PrescriptionViewModel modelPrescription) { openDrugToDrug(
MedicineViewModel model, PrescriptionViewModel modelPrescription) {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
builder: (context) { builder: (context) {
@ -626,107 +550,65 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
}); });
} }
addMedicationButton(MedicineViewModel model) async { addMedicationButton(MedicineViewModel model) async {
await locator< await locator<AnalyticsService>().logEvent(
AnalyticsService>() eventCategory: "Add Prescription Form",
.logEvent( eventAction: "Add Prescription",
eventCategory:
"Add Prescription Form",
eventAction:
"Add Prescription",
); );
if (duration != null && if (duration != null &&
doseTime != null && doseTime != null &&
frequency != null && frequency != null &&
selectedDate != null && selectedDate != null &&
strengthController strengthController.text != "") {
.text != if (widget.selectedMedication.isNarcotic == true) {
"") { DrAppToastMsg.showErrorToast(TranslationBase.of(context)
if (_selectedMedication .narcoticMedicineCanOnlyBePrescribedFromVida);
.isNarcotic ==
true) {
DrAppToastMsg.showErrorToast(
TranslationBase.of(
context)
.narcoticMedicineCanOnlyBePrescribedFromVida);
Navigator.pop(context); Navigator.pop(context);
return; return;
} }
if (double.parse( if (double.parse(strengthController.text) > 1000.0) {
strengthController DrAppToastMsg.showErrorToast("1000 is the MAX for the strength");
.text) >
1000.0) {
DrAppToastMsg
.showErrorToast(
"1000 is the MAX for the strength");
return; return;
} }
if (double.parse( if (double.parse(strengthController.text) < 0.0) {
strengthController DrAppToastMsg.showErrorToast("strength can't be zero");
.text) <
0.0) {
DrAppToastMsg
.showErrorToast(
"strength can't be zero");
return; return;
} }
if (formKey.currentState if (formKey.currentState.validate()) {
.validate()) {
Navigator.pop(context); Navigator.pop(context);
openDrugToDrug(model, widget.prescriptionViewModel); openDrugToDrug(model, widget.prescriptionViewModel);
} }
} else { } else {
setState(() { setState(() {
if (duration == null) { if (duration == null) {
durationError = durationError = TranslationBase.of(context).fieldRequired;
TranslationBase.of(
context)
.fieldRequired;
} else { } else {
durationError = null; durationError = null;
} }
if (doseTime == null) { if (doseTime == null) {
doseTimeError = doseTimeError = TranslationBase.of(context).fieldRequired;
TranslationBase.of(
context)
.fieldRequired;
} else { } else {
doseTimeError = null; doseTimeError = null;
} }
if (route == null) { if (route == null) {
routeError = routeError = TranslationBase.of(context).fieldRequired;
TranslationBase.of(
context)
.fieldRequired;
} else { } else {
routeError = null; routeError = null;
} }
if (frequency == null) { if (frequency == null) {
frequencyError = frequencyError = TranslationBase.of(context).fieldRequired;
TranslationBase.of(
context)
.fieldRequired;
} else { } else {
frequencyError = null; frequencyError = null;
} }
if (units == null) { if (units == null) {
unitError = unitError = TranslationBase.of(context).fieldRequired;
TranslationBase.of(
context)
.fieldRequired;
} else { } else {
unitError = null; unitError = null;
} }
if (strengthController if (strengthController.text == "") {
.text == strengthError = TranslationBase.of(context).fieldRequired;
"") {
strengthError =
TranslationBase.of(
context)
.fieldRequired;
} else { } else {
strengthError = null; strengthError = null;
} }
@ -735,5 +617,3 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
formKey.currentState.save(); formKey.currentState.save();
} }
} }

@ -1,6 +1,7 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import '../../../config/config.dart'; import '../../../config/config.dart';
import '../../../core/model/search_drug/get_medication_response_model.dart'; import '../../../core/model/search_drug/get_medication_response_model.dart';
import '../../../core/viewModel/medicine_view_model.dart'; import '../../../core/viewModel/medicine_view_model.dart';
@ -15,127 +16,114 @@ import '../../../widgets/shared/text_fields/app_text_form_field.dart';
import '../../base/base_view.dart'; import '../../base/base_view.dart';
final myController = TextEditingController(); final myController = TextEditingController();
class SearchPrescriptionWidget extends StatelessWidget { class SearchPrescriptionWidget extends StatelessWidget {
final double spaceBetweenTextFields; final double spaceBetweenTextFields;
final MedicineViewModel medicineViewModel; final MedicineViewModel medicineViewModel;
final PrescriptionViewModel prescriptionViewModel; final PrescriptionViewModel prescriptionViewModel;
final Function(GetMedicationResponseModel) onItemSelected;
const SearchPrescriptionWidget(
{Key key,
this.spaceBetweenTextFields,
const SearchPrescriptionWidget({Key key, this.spaceBetweenTextFields, this.medicineViewModel, this.medicineViewModel,
this.prescriptionViewModel}) : super(key: key); this.prescriptionViewModel,
this.onItemSelected})
: super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
bool visibilityPrescriptionForm = false;
bool visibilitySearch = true;
GetMedicationResponseModel _selectedMedication;
return BaseView<MedicineViewModel>( return BaseView<MedicineViewModel>(
onModelReady: (model) async {}, onModelReady: (model) async {},
builder: ( builder: (
BuildContext context, BuildContext context,
MedicineViewModel model, MedicineViewModel model,
Widget child,) => Widget child,
NetworkBaseView( ) =>
baseViewModel: model, NetworkBaseView(
child: Visibility( baseViewModel: model,
visible: visibilityPrescriptionForm, child: Column(
child: Column( children: [
children: [ FractionallySizedBox(
FractionallySizedBox( widthFactor: 0.9,
widthFactor: 0.9, child: Container(
child: Container( decoration: BoxDecoration(
decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(6.0)),
borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all(width: 1.0, color: HexColor("#CCCCCC"))),
border: Border.all(width: 1.0, color: HexColor("#CCCCCC"))), padding: EdgeInsets.all(10),
padding: EdgeInsets.all(10), child: AppTextFormField(
child: AppTextFormField( borderColor: Colors.white,
onTap: () { hintText: TranslationBase.of(context).searchMedicineNameHere,
visibilityPrescriptionForm = false; controller: myController,
visibilitySearch = true; onSaved: (value) {},
}, onFieldSubmitted: (value) {
borderColor: Colors.white, searchMedicine(context, model);
hintText: TranslationBase.of(context).searchMedicineNameHere, },
controller: myController, inputFormatter: ONLY_LETTERS,
onSaved: (value) {},
onFieldSubmitted: (value) {
searchMedicine(context, model);
},
inputFormatter: ONLY_LETTERS,
),
),
),
SizedBox(
height: 15.0,
), ),
Visibility( ),
visible: visibilitySearch, ),
child: Container( SizedBox(
child: Column( height: 15.0,
children: [ ),
FractionallySizedBox( Container(
widthFactor: 0.8, child: Column(
child: Container( children: [
child: Wrap( FractionallySizedBox(
alignment: WrapAlignment.center, widthFactor: 0.8,
children: <Widget>[ child: Container(
AppButton( child: Wrap(
title: TranslationBase.of(context).search, alignment: WrapAlignment.center,
onPressed: () async { children: <Widget>[
await searchMedicine( AppButton(
context, title: TranslationBase.of(context).search,
model, onPressed: () async {
); await searchMedicine(
}, context,
), model,
], );
), },
),
),
if (myController.text != '')
Container(
height: MediaQuery.of(context).size.height * 0.5,
child: ListView.builder(
padding: const EdgeInsets.only(top: 20),
scrollDirection: Axis.vertical,
itemCount: model.allMedicationList == null
? 0
: model.allMedicationList.length,
itemBuilder: (BuildContext context, int index) {
return InkWell(
child: MedicineItemWidget(
label:
model.allMedicationList[index].description),
onTap: () {
model.getItem(
itemID: model.allMedicationList[index].itemId);
visibilityPrescriptionForm = true;
visibilitySearch = false;
_selectedMedication =
model.allMedicationList[index];
// uom = _selectedMedication.uom;
},
);
},
),
), ),
], ],
),
), ),
), ),
), if (myController.text != '')
SizedBox( Container(
height: spaceBetweenTextFields, height: MediaQuery.of(context).size.height * 0.5,
), child: ListView.builder(
], padding: const EdgeInsets.only(top: 20),
scrollDirection: Axis.vertical,
itemCount: model.allMedicationList == null
? 0
: model.allMedicationList.length,
itemBuilder: (BuildContext context, int index) {
return InkWell(
child: MedicineItemWidget(
label:
model.allMedicationList[index].description),
onTap: () {
model.getItem(
itemID:
model.allMedicationList[index].itemId);
onItemSelected(model.allMedicationList[index]);
// uom = _selectedMedication.uom;
},
);
},
),
),
],
),
), ),
), SizedBox(
height: spaceBetweenTextFields,
),
],
), ),
),
);} );
}
searchMedicine(context, MedicineViewModel model) async { searchMedicine(context, MedicineViewModel model) async {
FocusScope.of(context).unfocus(); FocusScope.of(context).unfocus();
@ -144,10 +132,7 @@ class SearchPrescriptionWidget extends StatelessWidget {
return; return;
} }
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(context);
await model.getMedicationList(drug: myController.text,isLocalBusy: true); await model.getMedicationList(drug: myController.text, isLocalBusy: true);
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
} }
} }

Loading…
Cancel
Save