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/search_drug/get_medication_response_model.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/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/models/SOAP/GetAssessmentReqModel.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/prescription/drugtodrug.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/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/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; addPrescriptionForm(context, PrescriptionViewModel model, PatiantInformtion patient, prescription) { showModalBottomSheet( isScrollControlled: true, context: context, builder: (BuildContext bc) { return PrescriptionFormWidget(model, patient, prescription); }); } postPrescription( {String duration, String doseTimeIn, String dose, String drugId, String strength, String route, String frequency, String indication, String instruction, PrescriptionViewModel model, DateTime doseTime, String doseUnit, String icdCode, PatiantInformtion patient, String patientType}) async { PostPrescriptionReqModel postProcedureReqModel = new PostPrescriptionReqModel(); List prescriptionList = List(); postProcedureReqModel.appointmentNo = patient.appointmentNo; postProcedureReqModel.clinicID = patient.clinicId; postProcedureReqModel.episodeID = patient.episodeNo; postProcedureReqModel.patientMRN = patient.patientMRN; prescriptionList.add(PrescriptionRequestModel( covered: true, dose: double.parse(dose), itemId: drugId.isEmpty ? 1 : int.parse(drugId), doseUnitId: int.parse(doseUnit), route: route.isEmpty ? 1 : int.parse(route), frequency: frequency.isEmpty ? 1 : int.parse(frequency), remarks: instruction, approvalRequired: true, icdcode10Id: icdCode.toString(), doseTime: doseTimeIn.isEmpty ? 1 : int.parse(doseTimeIn), duration: duration.isEmpty ? 1 : int.parse(duration), doseStartDate: doseTime.toIso8601String())); postProcedureReqModel.prescriptionRequestModel = prescriptionList; await model.postPrescription(postProcedureReqModel, patient.patientMRN); if (model.state == ViewState.ErrorLocal) { Helpers.showErrorToast(model.error); } else if (model.state == ViewState.Idle) { model.getPrescriptions(patient); DrAppToastMsg.showSuccesToast('Medication has been added'); } } class PrescriptionFormWidget extends StatefulWidget { final PrescriptionViewModel model; final PatiantInformtion patient; final List prescriptionList; PrescriptionFormWidget(this.model, this.patient, this.prescriptionList); @override _PrescriptionFormWidgetState createState() => _PrescriptionFormWidgetState(); } class _PrescriptionFormWidgetState extends State { String routeError; String frequencyError; String doseTimeError; String durationError; String unitError; String strengthError; int selectedType; TextEditingController strengthController = TextEditingController(); TextEditingController indicationController = TextEditingController(); TextEditingController instructionController = TextEditingController(); bool visbiltyPrescriptionForm = false; bool visbiltySearch = true; final myController = TextEditingController(); DateTime selectedDate; int strengthChar; GetMedicationResponseModel _selectedMedication; GlobalKey key = new GlobalKey>(); TextEditingController drugIdController = TextEditingController(); TextEditingController doseController = TextEditingController(); final searchController = TextEditingController(); stt.SpeechToText speech = stt.SpeechToText(); var event = RobotProvider(); var reconizedWord; final GlobalKey formKey = GlobalKey(); final double spaceBetweenTextFileds = 12; dynamic route; dynamic frequency; dynamic duration; dynamic doseTime; dynamic indication; dynamic units; dynamic uom; dynamic box; dynamic x; @override void initState() { requestPermissions(); event.controller.stream.listen((p) { if (p['startPopUp'] == 'true') { if (this.mounted) { initSpeechState().then((value) => {onVoiceText()}); } } }); selectedType = 1; super.initState(); } setSelectedType(int val) { setState(() { selectedType = val; }); } onVoiceText() async { new SpeechToText(context: context).showAlertDialog(context); var lang = TranslationBase.of(AppGlobal.CONTEX).locale.languageCode; bool available = await speech.initialize(onStatus: statusListener, onError: errorListener); if (available) { speech.listen( onResult: resultListener, listenMode: stt.ListenMode.confirmation, localeId: lang == 'en' ? 'en-US' : 'ar-SA', ); } else { print("The user has denied the use of speech recognition."); } } void errorListener(SpeechRecognitionError error) { event.setValue({"searchText": 'null'}); print(error); } void statusListener(String status) { reconizedWord = status == 'listening' ? 'Lisening...' : 'Sorry....'; } void requestPermissions() async { Map statuses = await [ Permission.microphone, ].request(); } void resultListener(result) { reconizedWord = result.recognizedWords; event.setValue({"searchText": reconizedWord}); if (result.finalResult == true) { setState(() { SpeechToText.closeAlertDialog(context); speech.stop(); instructionController.text += reconizedWord + '\n'; }); } else { print(result.finalResult); } } Future initSpeechState() async { bool hasSpeech = await speech.initialize(onError: errorListener, onStatus: statusListener); print(hasSpeech); if (!mounted) return; } @override Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; ProjectViewModel projectViewModel = Provider.of(context); return BaseView( onModelReady: (model) async { x = model.patientAssessmentList.map((element) { return element.icdCode10ID; }); GetAssessmentReqModel getAssessmentReqModel = GetAssessmentReqModel( patientMRN: widget.patient.patientMRN, episodeID: widget.patient.episodeNo.toString(), editedBy: '', doctorID: '', appointmentNo: widget.patient.appointmentNo); if (model.medicationStrengthList.length == 0) { await model.getMedicationStrength(); } if (model.medicationDurationList.length == 0) { await model.getMedicationDuration(); } if (model.medicationDoseTimeList.length == 0) { await model.getMedicationDoseTime(); } await model.getPatientAssessment(getAssessmentReqModel); }, builder: ( BuildContext context, MedicineViewModel model, Widget child, ) => NetworkBaseView( baseViewModel: model, child: GestureDetector( onTap: () { FocusScope.of(context).requestFocus(new FocusNode()); }, child: DraggableScrollableSheet( initialChildSize: 0.98, maxChildSize: 0.98, minChildSize: 0.9, builder: (BuildContext context, ScrollController scrollController) { return SingleChildScrollView( child: Container( height: MediaQuery.of(context).size.height * 1.65, color: Color(0xffF8F8F8), child: Padding( padding: EdgeInsets.symmetric(horizontal: 12.0, vertical: 10.0), child: Column( children: [ Column( children: [ SizedBox( height: 60, ), ], ), SizedBox( height: spaceBetweenTextFileds, ), Container( child: Form( key: formKey, child: Column( children: [ FractionallySizedBox( widthFactor: 0.9, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all(width: 1.0, color: HexColor("#CCCCCC"))), padding: EdgeInsets.all(10), child: AppTextFormField( onTap: () { visbiltyPrescriptionForm = false; visbiltySearch = true; }, borderColor: Colors.white, hintText: TranslationBase.of(context).searchMedicineNameHere, controller: myController, onSaved: (value) {}, onFieldSubmitted: (value) { searchMedicine(context, model); }, inputFormatter: ONLY_LETTERS, ), ), ), SizedBox( height: 15.0, ), Visibility( visible: visbiltySearch, child: Container( child: Column( children: [ FractionallySizedBox( widthFactor: 0.8, child: Container( child: Wrap( alignment: WrapAlignment.center, children: [ // TODO change it secondary button and add loading AppButton( title: TranslationBase.of(context).search, 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); visbiltyPrescriptionForm = true; visbiltySearch = false; _selectedMedication = model.allMedicationList[index]; uom = _selectedMedication.uom; }, ); }, ), ), ], ), ), ), SizedBox( height: spaceBetweenTextFileds, ), Visibility( visible: visbiltyPrescriptionForm, child: Container( child: Column( children: [ AppText( _selectedMedication?.description ?? "", bold: true, ), Container( child: Row( children: [ AppText( TranslationBase.of(context).orderType, fontWeight: FontWeight.w600, ), Radio( activeColor: Color(0xFFB9382C), value: 1, groupValue: selectedType, onChanged: (value) { setSelectedType(value); }, ), Text(TranslationBase.of(context).regular), ], ), ), SizedBox(height: spaceBetweenTextFileds), Container( width: double.infinity, child: Row( children: [ Container( width: MediaQuery.of(context).size.width * 0.35, child: AppTextFieldCustom( height: 40, validationError: strengthError, hintText: 'Strength', isTextFieldHasSuffix: false, 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, ), PrescriptionTextFiled( width: MediaQuery.of(context).size.width * 0.517, element: model.itemMedicineListUnit.length == 1 ? model.itemMedicineListUnit[0] : units, elementError: unitError, keyName: 'description', keyId: 'parameterCode', hintText: 'Select', elementList: model.itemMedicineListUnit, okFunction: (selectedValue) { setState(() { units = selectedValue; units['isDefault'] = true; }); }, ), ], ), ), SizedBox(height: spaceBetweenTextFileds), PrescriptionTextFiled( elementList: model.itemMedicineListRoute, element: model.itemMedicineListRoute.length == 1 ? model.itemMedicineListRoute[0] : route, elementError: routeError, keyId: 'parameterCode', keyName: 'description', okFunction: (selectedValue) { setState(() { route = selectedValue; route['isDefault'] = true; }); }, hintText: TranslationBase.of(context).route, ), SizedBox(height: spaceBetweenTextFileds), PrescriptionTextFiled( hintText: TranslationBase.of(context).frequency, elementError: frequencyError, element: frequency, elementList: model.itemMedicineList, keyId: 'parameterCode', keyName: 'description', okFunction: (selectedValue) { setState(() { frequency = selectedValue; frequency['isDefault'] = true; if (_selectedMedication != null && duration != null && frequency != null && strengthController.text != null) { model.getBoxQuantity( freq: frequency['parameterCode'], duration: duration['id'], itemCode: _selectedMedication.itemId, strength: double.parse(strengthController.text)); return; } }); }), SizedBox(height: spaceBetweenTextFileds), PrescriptionTextFiled( hintText: TranslationBase.of(context).doseTime, elementError: doseTimeError, element: doseTime, elementList: model.medicationDoseTimeList, keyId: 'id', keyName: 'nameEn', okFunction: (selectedValue) { setState(() { doseTime = selectedValue; }); }), SizedBox(height: spaceBetweenTextFileds), if (model.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: TextField( decoration: textFieldSelectorDecoration( model.patientAssessmentList[0].icdCode10ID.toString(), indication != null ? indication['name'] : null, false), enabled: true, readOnly: true, ), ), Container( width: MediaQuery.of(context).size.width * 0.59, color: Colors.white, child: TextField( maxLines: 5, decoration: textFieldSelectorDecoration( model.patientAssessmentList[0].asciiDesc.toString(), indication != null ? indication['name'] : null, false), enabled: true, readOnly: true, ), ), ], ), ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, color: Colors.white, child: InkWell( onTap: () => selectDate(context, widget.model), child: 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: spaceBetweenTextFileds), PrescriptionTextFiled( element: duration, elementError: durationError, hintText: TranslationBase.of(context).duration, elementList: model.medicationDurationList, keyName: 'nameEn', keyId: 'id', okFunction: (selectedValue) { setState(() { duration = selectedValue; if (_selectedMedication != null && duration != null && frequency != null && strengthController.text != null) { model.getBoxQuantity( freq: frequency['parameterCode'], duration: duration['id'], itemCode: _selectedMedication.itemId, strength: double.parse(strengthController.text), ); box = model.boxQuintity; return; } }); }, ), SizedBox(height: spaceBetweenTextFileds), Container( color: Colors.white, child: AppTextFieldCustom( hintText: "UOM", isTextFieldHasSuffix: false, dropDownText: uom != null ? uom : null, enabled: false, ), ), SizedBox(height: spaceBetweenTextFileds), Container( color: Colors.white, child: AppTextFieldCustom( hintText: TranslationBase.of(context).boxQuantity, isTextFieldHasSuffix: false, dropDownText: box != null ? model.boxQuintity.toString() : null, enabled: false, ), ), SizedBox(height: spaceBetweenTextFileds), Container( decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all(width: 1.0, color: HexColor("#CCCCCC"))), child: Stack( children: [ TextFields( 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: spaceBetweenTextFileds), Container( margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), child: Wrap( alignment: WrapAlignment.center, children: [ AppButton( color: Color(0xff359846), title: TranslationBase.of(context).addMedication, fontWeight: FontWeight.w600, onPressed: () async { await locator().logEvent( eventCategory: "Add Prescription Form", eventAction: "Add Prescription", ); if (duration != null && doseTime != null && frequency != null && selectedDate != null && strengthController.text != "") { if (_selectedMedication.isNarcotic == true) { DrAppToastMsg.showErrorToast(TranslationBase.of(context) .narcoticMedicineCanOnlyBePrescribedFromVida); Navigator.pop(context); return; } if (double.parse(strengthController.text) > 1000.0) { DrAppToastMsg.showErrorToast( "1000 is the MAX for the strength"); return; } if (double.parse(strengthController.text) < 0.0) { DrAppToastMsg.showErrorToast("strength can't be zero"); return; } if (formKey.currentState.validate()) { Navigator.pop(context); openDrugToDrug(model); { // postProcedure( // icdCode: model // .patientAssessmentList // .isNotEmpty // ? model // .patientAssessmentList[ // 0] // .icdCode10ID // .isEmpty // ? "test" // : model // .patientAssessmentList[ // 0] // .icdCode10ID // .toString() // : "test", // // icdCode: model // // .patientAssessmentList // // .map((value) => value // // .icdCode10ID // // .trim()) // // .toList() // // .join(' '), // dose: strengthController // .text, // doseUnit: model // .itemMedicineListUnit // .length == // 1 // ? model // .itemMedicineListUnit[ // 0][ // 'parameterCode'] // .toString() // : units['parameterCode'] // .toString(), // patient: widget.patient, // doseTimeIn: // doseTime['id'] // .toString(), // model: widget.model, // duration: duration['id'] // .toString(), // frequency: model // .itemMedicineList // .length == // 1 // ? model // .itemMedicineList[ // 0][ // 'parameterCode'] // .toString() // : frequency[ // 'parameterCode'] // .toString(), // route: model.itemMedicineListRoute // .length == // 1 // ? model // .itemMedicineListRoute[ // 0][ // 'parameterCode'] // .toString() // : route['parameterCode'] // .toString(), // drugId: // _selectedMedication // .itemId // .toString(), // strength: // strengthController // .text, // indication: // indicationController // .text, // instruction: // instructionController // .text, // doseTime: selectedDate, // ); } } } else { setState(() { if (duration == null) { durationError = TranslationBase.of(context).fieldRequired; } else { durationError = null; } if (doseTime == null) { doseTimeError = TranslationBase.of(context).fieldRequired; } else { doseTimeError = null; } if (route == null) { routeError = TranslationBase.of(context).fieldRequired; } else { routeError = null; } if (frequency == null) { frequencyError = TranslationBase.of(context).fieldRequired; } else { frequencyError = null; } if (units == null) { unitError = TranslationBase.of(context).fieldRequired; } else { unitError = null; } if (strengthController.text == "") { strengthError = TranslationBase.of(context).fieldRequired; } else { strengthError = null; } }); } formKey.currentState.save(); }, ), ], ), ), ], ), ), ), ], ), ), ), ], ), ), ), ); }), ), ), ); } selectDate(BuildContext context, PrescriptionViewModel model) async { Helpers.hideKeyboard(context); DateTime selectedDate; selectedDate = DateTime.now(); final DateTime picked = await showDatePicker( context: context, initialDate: selectedDate, firstDate: DateTime.now(), lastDate: DateTime(2040), initialEntryMode: DatePickerEntryMode.calendar, ); if (picked != null && picked != selectedDate) { setState(() { this.selectedDate = picked; }); } } InputDecoration textFieldSelectorDecoration(String hintText, String selectedText, bool isDropDown, {Icon suffixIcon}) { return InputDecoration( focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), borderRadius: BorderRadius.circular(8), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: Color(0xFFEFEFEF), width: 2.0), borderRadius: BorderRadius.circular(8), ), disabledBorder: OutlineInputBorder( borderSide: BorderSide(color: Color(0xFFEFEFEF), width: 2.0), borderRadius: BorderRadius.circular(8), ), hintText: selectedText != null ? selectedText : hintText, suffixIcon: isDropDown ? suffixIcon != null ? suffixIcon : Icon( Icons.keyboard_arrow_down_sharp, color: Color(0xff2E303A), ) : null, hintStyle: TextStyle( fontSize: 13, color: Color(0xff2E303A), fontFamily: 'Poppins', fontWeight: FontWeight.w600, ), labelText: selectedText != null ? '$hintText\n$selectedText' : null, labelStyle: TextStyle( fontSize: 13, color: Color(0xff2E303A), fontFamily: 'Poppins', fontWeight: FontWeight.w600, ), ); } openDrugToDrug(model) { showModalBottomSheet( context: context, builder: (context) { return Container( height: SizeConfig.realScreenHeight * .8, width: SizeConfig.realScreenWidth, child: SingleChildScrollView( child: Column( // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ DrugToDrug(widget.patient, getPriscriptionforDrug(widget.prescriptionList, model), model.patientAssessmentList), Container( margin: EdgeInsets.all(SizeConfig.widthMultiplier * 3), child: AppButton( title: TranslationBase.of(context).addMedication, onPressed: () { Navigator.pop(context); postPrescription( icdCode: model.patientAssessmentList.isNotEmpty ? model.patientAssessmentList[0].icdCode10ID.isEmpty ? "test" : model.patientAssessmentList[0].icdCode10ID.toString() : "test", dose: strengthController.text, doseUnit: model.itemMedicineListUnit.length == 1 ? model.itemMedicineListUnit[0]['parameterCode'].toString() : units['parameterCode'].toString(), patient: widget.patient, doseTimeIn: doseTime['id'].toString(), model: widget.model, duration: duration['id'].toString(), frequency: model.itemMedicineList.length == 1 ? model.itemMedicineList[0]['parameterCode'].toString() : frequency['parameterCode'].toString(), route: model.itemMedicineListRoute.length == 1 ? model.itemMedicineListRoute[0]['parameterCode'].toString() : route['parameterCode'].toString(), drugId: _selectedMedication.itemId.toString(), strength: strengthController.text, indication: indicationController.text, instruction: instructionController.text, doseTime: selectedDate, ); }, )) ], )), //], //) ); }); } getPriscriptionforDrug(List prescriptionList, MedicineViewModel model) { var prescriptionDetails = []; if (prescriptionList.length > 0) { prescriptionList[0].entityList.forEach((element) { if (element.mediSpanGPICode != null) { prescriptionDetails.add({ 'DrugId': element.mediSpanGPICode, 'DrugName': element.medicationName, 'Dose': element.doseDailyQuantity, 'DoseType': element.doseDailyUnitID, 'Unit': element.uom, 'FrequencyType': element.frequencyID, 'Duration': element.doseDurationDays, 'RouteID': element.routeID, 'IsScreen': element.isSIG }); } }); } if (_selectedMedication.mediSpanGPICode != null) { prescriptionDetails.add({ 'DrugId': _selectedMedication.mediSpanGPICode, 'DrugName': _selectedMedication.description, 'Dose': strengthController.text, 'DoseType': model.itemMedicineListUnit.length == 1 ? model.itemMedicineListUnit[0]['parameterCode'].toString() : units['parameterCode'].toString(), 'Unit': model.itemMedicineListUnit.length == 1 ? model.itemMedicineListUnit[0]['description'] : units['description'], 'FrequencyType': model.itemMedicineList.length == 1 ? model.itemMedicineList[0]['parameterCode'].toString() : frequency['parameterCode'].toString(), 'Duration': duration['id'].toString(), 'RouteID': model.itemMedicineListRoute.length == 1 ? model.itemMedicineListRoute[0]['parameterCode'].toString() : route['parameterCode'].toString(), 'IsScreen': true }); } return prescriptionDetails; } searchMedicine(context, MedicineViewModel model) async { FocusScope.of(context).unfocus(); if (myController.text.length < 3) { Helpers.showErrorToast(TranslationBase.of(context).moreThan3Letter); return; } await model.getMedicationList(drug: myController.text); } }