import 'package:doctor_app_flutter/client/base_app_client.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/post_prescrition_req_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; import 'package:doctor_app_flutter/models/livecare/transfer_to_admin.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/prescription_screen.dart'; import 'package:doctor_app_flutter/screens/prescription/prescription_warnings.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/patients/dynamic_elements.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_text_form_field.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:intl/intl.dart'; addPrescriptionForm( context, PrescriptionViewModel model, PatiantInformtion patient) { showModalBottomSheet( isScrollControlled: true, context: context, builder: (BuildContext bc) { return PrescriptionFormWidget(model, patient); }); } postProcedure( {String duration, String doseTimeIn, String dose, String drugId, String strength, String route, String frequency, String indication, String instruction, PrescriptionViewModel model, DateTime doseTime, PatiantInformtion patient}) async { PostPrescriptionReqModel postProcedureReqModel = new PostPrescriptionReqModel(); List sss = List(); postProcedureReqModel.appointmentNo = 2016055159; postProcedureReqModel.clinicID = 17; postProcedureReqModel.episodeID = 200012330; postProcedureReqModel.patientMRN = 3120877; postProcedureReqModel.vidaAuthTokenID = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAyIiwianRpIjoiOGFjNDRjZGQtOWE0Mi00M2YxLWE2YTQtMWQ4NzBmZmYwNTUyIiwiZW1haWwiOiIiLCJpZCI6IjEwMDIiLCJOYW1lIjoiVEVNUCAtIERPQ1RPUiIsIkVtcGxveWVlSWQiOiI0NzA5IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiI0NzA5IiwiU0VTU0lPTklEIjoiMjE1OTU2NDkiLCJDbGluaWNJZCI6IjEiLCJyb2xlIjpbIkRPQ1RPUlMiLCJIRUFEIERPQ1RPUlMiLCJBRE1JTklTVFJBVE9SUyIsIlJFQ0VQVElPTklTVCIsIkVSIE5VUlNFIiwiRVIgUkVDRVBUSU9OSVNUIiwiUEhBUk1BQ1kgQUNDT1VOVCBTVEFGRiIsIlBIQVJNQUNZIE5VUlNFIiwiSU5QQVRJRU5UIFBIQVJNQUNJU1QiLCJBRE1JU1NJT04gU1RBRkYiLCJBUFBST1ZBTCBTVEFGRiIsIkNPTlNFTlQgIiwiTUVESUNBTCBSRVBPUlQgLSBTSUNLIExFQVZFIE1BTkFHRVIiXSwibmJmIjoxNjA4NzM2NjY5LCJleHAiOjE2MDk2MDA2NjksImlhdCI6MTYwODczNjY2OX0.9EDgYrbe5fQA2CvgLdFT4s_PL7hD5R_Qggfpv4lDtUY"; sss.add(PrescriptionRequestModel( covered: true, dose: 1, itemId: int.parse(drugId), doseUnitId: 1, route: int.parse(route), frequency: int.parse(frequency), remarks: instruction, approvalRequired: true, icdcode10Id: "test2", doseTime: int.parse(doseTimeIn), duration: 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; PrescriptionFormWidget(this.model, this.patient); @override _PrescriptionFormWidgetState createState() => _PrescriptionFormWidgetState(); } class _PrescriptionFormWidgetState extends State { TextEditingController durationController = TextEditingController(); TextEditingController strengthController = TextEditingController(); TextEditingController routeController = TextEditingController(); TextEditingController frequencyController = TextEditingController(); TextEditingController indicationController = TextEditingController(); TextEditingController instructionController = TextEditingController(); DateTime selectedDate; dynamic selectedDrug; TextEditingController drugIdController = TextEditingController(); TextEditingController doseController = TextEditingController(); final GlobalKey formKey = GlobalKey(); final double spaceBetweenTextFileds = 12; List referToList; dynamic type; dynamic strength; dynamic route; dynamic frequency; dynamic duration; dynamic doseTime; List strengthList; List routeList; List frequencyList; List durationList; List doseTimeList; //PatiantInformtion patient; dynamic _strength; dynamic _selectedBranch; @override void initState() { super.initState(); referToList = List(); strengthList = List(); routeList = List(); frequencyList = List(); durationList = List(); doseTimeList = List(); dynamic regularOrder = {"id": 1, "name": "regular Order"}; dynamic urgentOrder = {"id": 2, "name": "urgent Order"}; dynamic strength1 = {"id": 1, "name": "1"}; dynamic strength2 = {"id": 2, "name": "2"}; dynamic strength3 = {"id": 3, "name": "3"}; dynamic route1 = {"id": 7, "name": "By Mouth"}; dynamic route2 = {"id": 10, "name": "Inhale by Mouth"}; dynamic route3 = {"id": 15, "name": "for INJECTION"}; dynamic route4 = {"id": 17, "name": "Drops"}; dynamic route5 = {"id": 18, "name": "Rub On"}; dynamic route6 = {"id": 20, "name": "Spary"}; dynamic route7 = {"id": 27, "name": "In Both EYES"}; dynamic route8 = {"id": 28, "name": "In Both Ears"}; dynamic route9 = {"id": 32, "name": "Intramuscular"}; dynamic frequency1 = {"id": 1, "name": "2 Times a day"}; dynamic frequency2 = {"id": 2, "name": "3 Times a day"}; dynamic frequency3 = {"id": 3, "name": "4 Times a day"}; dynamic frequency4 = {"id": 8, "name": "As Needed"}; dynamic frequency5 = {"id": 9, "name": "Bed Time"}; dynamic frequency6 = {"id": 11, "name": "Every Other Day"}; dynamic frequency7 = {"id": 29, "name": "Every Eight Hours"}; dynamic frequency8 = {"id": 34, "name": "As Directed"}; dynamic duration1 = {"id": 1, "name": "For 1 Day"}; dynamic duration2 = {"id": 2, "name": "For 2 Days"}; dynamic duration3 = {"id": 3, "name": "For 3 Days"}; dynamic duration4 = {"id": 4, "name": "For 4 Days"}; dynamic duration5 = {"id": 5, "name": "For 5 Days"}; dynamic duration6 = {"id": 6, "name": "For 6 Days"}; dynamic duration7 = {"id": 7, "name": "For 7 Days"}; dynamic duration8 = {"id": 8, "name": "For 8 Days"}; dynamic duration9 = {"id": 9, "name": "For 9 Days"}; dynamic duration10 = {"id": 10, "name": "For 10 Days"}; dynamic duration11 = {"id": 14, "name": "For 14 Days"}; dynamic doseTime1 = {"id": 1, "name": "Before Meals"}; dynamic doseTime2 = {"id": 2, "name": "After Meals"}; dynamic doseTime3 = {"id": 3, "name": "With Meals"}; dynamic doseTime4 = {"id": 4, "name": "In The Morning"}; dynamic doseTime5 = {"id": 5, "name": "In the Evening"}; dynamic doseTime6 = {"id": 6, "name": "After Supper"}; dynamic doseTime7 = {"id": 7, "name": "With Supper"}; dynamic doseTime8 = {"id": 8, "name": "Before Breakfast"}; dynamic doseTime9 = {"id": 9, "name": "In the Afternoon"}; dynamic doseTime10 = {"id": 10, "name": "While wake"}; dynamic doseTime11 = {"id": 12, "name": "Any Time"}; dynamic doseTime12 = {"id": 21, "name": "Bed Time"}; doseTimeList.add(doseTime1); doseTimeList.add(doseTime2); doseTimeList.add(doseTime3); doseTimeList.add(doseTime4); doseTimeList.add(doseTime5); doseTimeList.add(doseTime6); doseTimeList.add(doseTime7); doseTimeList.add(doseTime8); doseTimeList.add(doseTime9); doseTimeList.add(doseTime10); doseTimeList.add(doseTime11); doseTimeList.add(doseTime12); frequencyList.add(frequency1); frequencyList.add(frequency2); frequencyList.add(frequency3); frequencyList.add(frequency4); frequencyList.add(frequency5); frequencyList.add(frequency6); frequencyList.add(frequency7); frequencyList.add(frequency8); routeList.add(route1); routeList.add(route2); routeList.add(route3); routeList.add(route4); routeList.add(route5); routeList.add(route6); routeList.add(route7); routeList.add(route8); routeList.add(route9); strengthList.add(strength1); strengthList.add(strength2); strengthList.add(strength3); durationList.add(duration1); durationList.add(duration2); durationList.add(duration3); durationList.add(duration4); durationList.add(duration5); durationList.add(duration6); durationList.add(duration7); durationList.add(duration8); durationList.add(duration9); durationList.add(duration10); durationList.add(duration11); referToList.add(regularOrder); referToList.add(urgentOrder); } @override Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; // final routeArgs = ModalRoute.of(context).settings.arguments as Map; // patient = routeArgs['patient']; return BaseView( onModelReady: (model) => model.getDrugs(), builder: (BuildContext context, PrescriptionViewModel model, Widget child) => DraggableScrollableSheet( initialChildSize: 0.90, maxChildSize: 0.90, minChildSize: 0.9, builder: (BuildContext context, ScrollController scrollController) { return SingleChildScrollView( child: Container( height: 980, 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: screenSize.height * 0.070, child: InkWell( onTap: model.drugsList != null && model.drugsList.length > 0 ? () { ListSelectDialog dialog = ListSelectDialog( list: model.drugsList, attributeName: 'GenericName', attributeValueId: 'ItemId', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { selectedDrug = selectedValue; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).search, selectedDrug != null ? selectedDrug['GenericName'] : null, true), enabled: false, ), ), ), SizedBox( height: spaceBetweenTextFileds, ), Container( height: screenSize.height * 0.070, child: InkWell( onTap: referToList != null ? () { ListSelectDialog dialog = ListSelectDialog( list: referToList, attributeName: 'name', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { type = selectedValue; _selectedBranch = null; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context) .orderType, type != null ? type['name'] : null, true), enabled: false, ), ), ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, child: InkWell( onTap: strengthList != null ? () { ListSelectDialog dialog = ListSelectDialog( list: strengthList, attributeName: 'name', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { strength = selectedValue; _selectedBranch = null; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context) .strength, strength != null ? strength['name'] : null, true), enabled: false, ), ), ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, child: InkWell( onTap: routeList != null ? () { ListSelectDialog dialog = ListSelectDialog( list: routeList, attributeName: 'name', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { route = selectedValue; _selectedBranch = null; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).route, route != null ? route['name'] : null, true), enabled: false, ), ), ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, child: InkWell( onTap: frequencyList != null ? () { ListSelectDialog dialog = ListSelectDialog( list: frequencyList, attributeName: 'name', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { frequency = selectedValue; _selectedBranch = null; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context) .frequency, frequency != null ? frequency['name'] : null, true), enabled: false, ), ), ), SizedBox(height: spaceBetweenTextFileds), Container( height: screenSize.height * 0.070, child: InkWell( onTap: doseTimeList != null ? () { ListSelectDialog dialog = ListSelectDialog( list: doseTimeList, attributeName: 'name', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { doseTime = selectedValue; _selectedBranch = null; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context) .doseTime, doseTime != null ? doseTime['name'] : 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( hintText: TranslationBase.of(context) .indication, controller: indicationController, keyboardType: TextInputType.number, validator: (value) { if (value.isEmpty) return TranslationBase.of(context) .emptyMessage; else return null; }, ), ), 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: durationList != null ? () { ListSelectDialog dialog = ListSelectDialog( list: durationList, attributeName: 'name', attributeValueId: 'id', okText: TranslationBase.of(context) .ok, okFunction: (selectedValue) { setState(() { duration = selectedValue; _selectedBranch = null; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context) .duration, duration != null ? duration['name'] : 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(); if (formKey.currentState .validate()) { postProcedure( 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: strength['id'].toString(), indication: indicationController.text, instruction: instructionController .text, doseTime: selectedDate); Navigator.pop(context); } { // Navigator.push( // context, // MaterialPageRoute( // builder: (context) => // NewPrescriptionScreen()), // ); } }, ), ], ), ), ], ), ), ), ], ), ), ), ); }), ); } selectDate(BuildContext context, PrescriptionViewModel model) async { DateTime selectedDate; selectedDate = DateTime.now().add(Duration(hours: 10)); final DateTime picked = await showDatePicker( context: context, initialDate: selectedDate, firstDate: DateTime.now().add(Duration(hours: 15)), 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, ), ); } }