import 'package:autocomplete_textfield/autocomplete_textfield.dart'; import 'package:doctor_app_flutter/client/base_app_client.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/get_medication_response_model.dart'; import 'package:doctor_app_flutter/core/model/post_prescrition_req_model.dart'; import 'package:doctor_app_flutter/core/model/Prescription_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/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/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/shared/Text.dart'; import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:flutter/services.dart'; addPrescriptionForm(context, PrescriptionViewModel model, PatiantInformtion patient, prescription) { showModalBottomSheet( isScrollControlled: true, context: context, builder: (BuildContext bc) { return PrescriptionFormWidget(model, patient, prescription); }); } postProcedure( {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}) async { PostPrescriptionReqModel postProcedureReqModel = new PostPrescriptionReqModel(); List sss = List(); postProcedureReqModel.appointmentNo = patient.appointmentNo; postProcedureReqModel.clinicID = patient.clinicId; postProcedureReqModel.episodeID = patient.episodeNo; postProcedureReqModel.patientMRN = patient.patientMRN; sss.add(PrescriptionRequestModel( covered: true, dose: int.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 = sss; //postProcedureReqModel.procedures = controlsProcedure; await model.postPrescription(postProcedureReqModel, patient.patientMRN); if (model.state == ViewState.ErrorLocal) { helpers.showErrorToast(model.error); } else if (model.state == ViewState.Idle) { DrAppToastMsg.showSuccesToast('Medication has been added'); } } class PrescriptionFormWidget extends StatefulWidget { final PrescriptionViewModel model; PatiantInformtion patient; List prescriptionList; PrescriptionFormWidget(this.model, this.patient, this.prescriptionList); @override _PrescriptionFormWidgetState createState() => _PrescriptionFormWidgetState(); } class _PrescriptionFormWidgetState extends State { int selectedType; TextEditingController durationController = TextEditingController(); TextEditingController strengthController = TextEditingController(); TextEditingController routeController = TextEditingController(); TextEditingController frequencyController = TextEditingController(); TextEditingController indicationController = TextEditingController(); TextEditingController instructionController = TextEditingController(); DateTime selectedDate; dynamic selectedDrug; int strengthChar; GetMedicationResponseModel _selectedMedication; GlobalKey key = new GlobalKey>(); TextEditingController drugIdController = TextEditingController(); TextEditingController doseController = TextEditingController(); final searchController = TextEditingController(); var notesList; var filteredNotesList; String textSeartch = "Amoxicillin"; final GlobalKey formKey = GlobalKey(); final double spaceBetweenTextFileds = 12; List referToList; dynamic type; dynamic strength; dynamic route; dynamic frequency; dynamic duration; dynamic doseTime; dynamic indication; dynamic units; dynamic x; List indicationList; String routeInatial = 'By Mouth'; //PatiantInformtion patient; @override void initState() { super.initState(); selectedType = 1; referToList = List(); indicationList = List(); dynamic indication1 = {"id": 545, "name": "Gingival Hyperplasia"}; dynamic indication2 = {"id": 546, "name": "Mild Drowsiness"}; dynamic indication3 = {"id": 547, "name": "Hypertrichosis"}; dynamic indication4 = {"id": 548, "name": "Mild Dizziness"}; dynamic indication5 = {"id": 549, "name": "Enlargement of Facial Features"}; dynamic indication6 = { "id": 550, "name": "Phenytoin Hypersensitivity Syndrome" }; dynamic indication7 = {"id": 551, "name": "Asterixis"}; dynamic indication8 = {"id": 552, "name": "Bullous Dermatitis"}; dynamic indication9 = {"id": 554, "name": "Purpuric Dermatitis"}; dynamic indication10 = {"id": 555, "name": "Systemic Lupus Erythematosus"}; indicationList.add(indication1); indicationList.add(indication2); indicationList.add(indication3); indicationList.add(indication4); indicationList.add(indication5); indicationList.add(indication6); indicationList.add(indication7); indicationList.add(indication8); indicationList.add(indication9); indicationList.add(indication10); } setSelectedType(int val) { setState(() { selectedType = val; }); } @override Widget build(BuildContext context) { ListSelectDialog drugDialog; final screenSize = MediaQuery.of(context).size; // final routeArgs = ModalRoute.of(context).settings.arguments as Map; // patient = routeArgs['patient']; 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); await model.getMedicationList(); await model.getMedicationStrength(); await model.getMedicationDuration(); await model.getMedicationRoute(); await model.getMedicationFrequency(); await model.getMedicationDoseTime(); //await model.getMedicationIndications(); 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.90, maxChildSize: 0.90, minChildSize: 0.9, builder: (BuildContext context, ScrollController scrollController) { return SingleChildScrollView( child: Container( height: 1010, child: Padding( padding: EdgeInsets.symmetric(horizontal: 12.0, vertical: 10.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, //mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ AppText( TranslationBase.of(context).medicines.toUpperCase(), fontWeight: FontWeight.w900, ), SizedBox( height: spaceBetweenTextFileds, ), Container( child: Form( key: formKey, child: Column( //mainAxisAlignment: MainAxisAlignment.end, children: [ Container( height: MediaQuery.of(context).size.height * 0.070, child: InkWell( onTap: model.allMedicationList != null ? () { Helpers.hideKeyboard(context); setState(() { _selectedMedication = null; }); } : null, child: _selectedMedication == null ? AutoCompleteTextField< GetMedicationResponseModel>( decoration: textFieldSelectorDecoration( TranslationBase.of(context) .searchMedicineNameHere, _selectedMedication != null ? _selectedMedication .genericName : null, true, ), itemSubmitted: (item) => setState( () => _selectedMedication = item), key: key, suggestions: model.allMedicationList, itemBuilder: (context, suggestion) => new Padding( child: Texts(suggestion .description + '/' + suggestion.genericName), padding: EdgeInsets.all(8.0)), itemSorter: (a, b) => 1, itemFilter: (suggestion, input) => suggestion.genericName .toLowerCase() .startsWith( input.toLowerCase()) || suggestion.description .toLowerCase() .startsWith( input.toLowerCase()) || suggestion.keywords .toLowerCase() .startsWith( input.toLowerCase()), ) : TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context) .searchMedicineNameHere, _selectedMedication != null ? _selectedMedication .description + ('${_selectedMedication.genericName}') : null, true, ), enabled: false, ), ), ), SizedBox( height: spaceBetweenTextFileds, ), Container( child: Row( children: [ AppText('Order Type'), Radio( activeColor: Color(0xFFB9382C), value: 1, groupValue: selectedType, onChanged: (value) { setSelectedType(value); }, ), Text('Regular'), ], ), ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, width: double.infinity, child: Row( children: [ Container( width: MediaQuery.of(context).size.width * 0.550, child: TextFields( inputFormatters: [ LengthLimitingTextInputFormatter(4), WhitelistingTextInputFormatter .digitsOnly ], hintText: TranslationBase.of(context) .strength, controller: strengthController, keyboardType: TextInputType.number, onChanged: (String value) { setState(() { strengthChar = value.length; }); if (strengthChar >= 4) { DrAppToastMsg.showErrorToast( "Only 4 Digits allowed for strength"); } }, // validator: (value) { // if (value.isEmpty && // strengthController.text.length > // 4) // return TranslationBase.of(context) // .emptyMessage; // else // return null; // }, ), ), SizedBox( width: 10.0, ), Container( width: MediaQuery.of(context).size.width * 0.350, child: InkWell( onTap: model.medicationStrengthList != null ? () { Helpers.hideKeyboard(context); ListSelectDialog dialog = ListSelectDialog( list: model .medicationStrengthList, attributeName: 'nameEn', attributeValueId: 'id', okText: TranslationBase.of( context) .ok, okFunction: (selectedValue) { setState(() { units = selectedValue; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( 'UNIT Type', units != null ? units['nameEn'] : null, true), enabled: false, ), ), ), ], ), ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, child: InkWell( onTap: model.medicationRouteList != null ? () { Helpers.hideKeyboard(context); ListSelectDialog dialog = ListSelectDialog( list: model.medicationRouteList, attributeName: 'nameEn', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { route = selectedValue; }); if (route == null) { helpers.showErrorToast( 'plase fill'); } }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).route, route != null ? route['nameEn'] : null, true), enabled: false, ), ), ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, child: InkWell( onTap: model.medicationFrequencyList != null ? () { Helpers.hideKeyboard(context); ListSelectDialog dialog = ListSelectDialog( list: model.medicationFrequencyList, attributeName: 'nameEn', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { frequency = selectedValue; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).frequency, frequency != null ? frequency['nameEn'] : null, true), enabled: false, ), ), ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, child: InkWell( onTap: model.medicationDoseTimeList != null ? () { Helpers.hideKeyboard(context); ListSelectDialog dialog = ListSelectDialog( list: model.medicationDoseTimeList, attributeName: 'nameEn', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { doseTime = selectedValue; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).doseTime, doseTime != null ? doseTime['nameEn'] : null, true), enabled: false, ), ), ), SizedBox(height: spaceBetweenTextFileds), if (model.patientAssessmentList.isNotEmpty) Container( height: screenSize.height * 0.070, child: InkWell( onTap: indicationList != null ? () { Helpers.hideKeyboard(context); ListSelectDialog dialog = ListSelectDialog( list: indicationList, attributeName: 'name', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { indication = selectedValue; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( model.patientAssessmentList[0] .icdCode10ID .toString(), indication != null ? indication['name'] : null, true), enabled: true, readOnly: true, ), ), ), //model.patientAssessmentList.forEach((element) { }). // Column( // children: model.patientAssessmentList // .map((element) { // return Container( // height: screenSize.height * 0.070, // child: InkWell( // onTap: indicationList != null // ? () { // ListSelectDialog dialog = // ListSelectDialog( // list: indicationList, // attributeName: 'name', // attributeValueId: 'id', // okText: TranslationBase.of( // context) // .ok, // okFunction: (selectedValue) { // setState(() { // indication = // selectedValue; // }); // }, // ); // showDialog( // barrierDismissible: false, // context: context, // builder: // (BuildContext context) { // return dialog; // }, // ); // } // : null, // child: TextField( // decoration: // textFieldSelectorDecoration( // element.icdCode10ID // .toString(), // indication != null // ? indication['name'] // : null, // true), // enabled: true, // readOnly: true, // ), // ), // ); // }).toList(), // ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, child: InkWell( onTap: () => selectDate(context, widget.model), child: TextField( decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context).date, selectedDate != null ? "${DateUtils.convertStringToDateFormat(selectedDate.toString(), "yyyy-MM-dd")}" : null, true, suffixIcon: Icon( Icons.calendar_today, color: Colors.black, )), enabled: false, ), ), ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, child: InkWell( onTap: model.medicationDurationList != null ? () { Helpers.hideKeyboard(context); ListSelectDialog dialog = ListSelectDialog( list: model.medicationDurationList, attributeName: 'nameEn', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { duration = selectedValue; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).duration, duration != null ? duration['nameEn'] : null, true), 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: TextFields( maxLines: 6, minLines: 4, hintText: TranslationBase.of(context).instruction, controller: instructionController, //keyboardType: TextInputType.number, validator: (value) { if (value.isEmpty) return TranslationBase.of(context) .emptyMessage; else return null; }, ), ), SizedBox(height: spaceBetweenTextFileds), Container( margin: EdgeInsets.all( SizeConfig.widthMultiplier * 5), child: Wrap( alignment: WrapAlignment.center, children: [ AppButton( title: TranslationBase.of(context) .addMedication, onPressed: () { // formKey.currentState.save(); // Navigator.pop(context); // openDrugToDrug(); if (route == null || frequency == null || doseTime == null || duration == null || selectedDate == null || units == null) { DrAppToastMsg.showErrorToast( "Please Fill All Fields"); return; } if (formKey.currentState.validate()) { Navigator.pop(context); { // var x = model // .patientAssessmentList // .map((value) => // value.icdCode10ID) // .toList() // .join(','); postProcedure( icdCode: model .patientAssessmentList[ 0] .icdCode10ID .isEmpty ? "test" : model .patientAssessmentList[ 0] .icdCode10ID .toString(), // icdCode: model // .patientAssessmentList // .map((value) => value // .icdCode10ID // .trim()) // .toList() // .join(' '), dose: strengthController.text, doseUnit: units['id'].toString(), patient: widget.patient, doseTimeIn: doseTime['id'].toString(), model: widget.model, duration: duration['id'].toString(), frequency: frequency['id'].toString(), route: route['id'].toString(), drugId: _selectedMedication .itemId .toString(), strength: strengthController.text, indication: indicationController.text, instruction: instructionController.text, doseTime: selectedDate, ); } } { // Navigator.push( // context, // MaterialPageRoute( // builder: (context) => // NewPrescriptionScreen()), // ); } }, ), ], ), ), ], ), ), ), ], ), ), ), ); }), ), ), ); } 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(0xFFCCCCCC), width: 2.0), borderRadius: BorderRadius.circular(8), ), disabledBorder: OutlineInputBorder( borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), borderRadius: BorderRadius.circular(8), ), hintText: selectedText != null ? selectedText : hintText, suffixIcon: isDropDown ? suffixIcon != null ? suffixIcon : Icon( Icons.arrow_drop_down, color: Colors.black, ) : null, hintStyle: TextStyle( fontSize: 14, color: Colors.grey.shade600, ), ); } openDrugToDrug() { showModalBottomSheet( context: context, builder: (context) { return Container( height: SizeConfig.realScreenHeight * .5, width: SizeConfig.realScreenWidth, child: SingleChildScrollView( child: Column( // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ DrugToDrug(widget.patient, widget.prescriptionList), Container( margin: EdgeInsets.all(SizeConfig.widthMultiplier * 3), child: AppButton( title: TranslationBase.of(context).addMedication, onPressed: () { postProcedure( dose: strengthController.text, doseUnit: units['id'].toString(), patient: widget.patient, doseTimeIn: doseTime['id'].toString(), model: widget.model, duration: duration['id'].toString(), frequency: frequency['id'].toString(), route: route['id'].toString(), drugId: selectedDrug['ItemId'].toString(), strength: strengthController.text, indication: indicationController.text, instruction: instructionController.text, doseTime: selectedDate); }, )) ], )), //], //) ); }); } }