import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/core/viewModel/patient_view_model.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/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:intl/intl.dart'; import '../../../config/size_config.dart'; import '../../../util/dr_app_shared_pref.dart'; import '../../../util/extenstions.dart'; import '../../../widgets/shared/app_scaffold_widget.dart'; import '../../../widgets/shared/app_texts_widget.dart'; DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); /* *@author: ibrahim albitar *@Date:4/6/2020 *@param: *@return: *@desc: */ class ReferPatientScreen extends StatefulWidget { @override _ReferPatientState createState() => _ReferPatientState(); } class _ReferPatientState extends State { dynamic _selectedClinic; dynamic _selectedDoctor; final _extController = TextEditingController(); int _activePriority = 1; dynamic _selectedFrequency; final _remarksController = TextEditingController(); bool isValid; @override Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; return BaseView( onModelReady: (model) => model.getClinicsList(), builder: (_, model, w) => AppScaffold( baseViewModel: model, appBarTitle: TranslationBase.of(context).referralPatient, body: model.clinicsList == null ? DrAppEmbeddedError(error: 'Something Wrong!') : SingleChildScrollView( child: Container( margin: EdgeInsets.symmetric(vertical: 16, horizontal: 16), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( height: screenSize.height * 0.070, child: InkWell( onTap: model.clinicsList != null && model.clinicsList.length > 0 ? () { ListSelectDialog dialog = ListSelectDialog( list: model.clinicsList, attributeName: 'ClinicDescription', attributeValueId: 'ClinicID', okText: TranslationBase.of(context).ok, okFunction: (selectedValue) { setState(() { _selectedDoctor = null; _selectedClinic = selectedValue; model.getDoctorsList( _selectedClinic['ClinicID']); }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).clinicSelect, _selectedClinic != null ? _selectedClinic['ClinicDescription'] : null, true), enabled: false, ), ), ), SizedBox( height: 10, ), Container( height: screenSize.height * 0.070, child: InkWell( onTap: model.doctorsList != null && model.doctorsList.length > 0 ? () { ListSelectDialog dialog = ListSelectDialog( list: model.doctorsList, attributeName: 'DoctorName', attributeValueId: 'DoctorID', okText: TranslationBase.of(context).ok, okFunction: (selectedValue) { setState(() { _selectedDoctor = selectedValue; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).doctorSelect, _selectedDoctor != null ? _selectedDoctor['DoctorName'] : null, true), enabled: false, ), ), ), SizedBox( height: 10, ), Container( height: screenSize.height * 0.070, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).ext, null, false), enabled: true, controller: _extController, inputFormatters: [ FilteringTextInputFormatter.allow( RegExp(ONLY_NUMBERS)) ], keyboardType: TextInputType.number, )), SizedBox( height: 10, ), priorityBar(context, screenSize), SizedBox( height: 20, ), AppText( "${TranslationBase.of(context).referralFrequency} ${getPriority()}", fontWeight: FontWeight.bold, fontSize: 16, ), SizedBox( height: 20, ), Container( height: screenSize.height * 0.070, child: InkWell( onTap: model.referralFrequencyList != null && model.referralFrequencyList.length > 0 ? () { ListSelectDialog dialog = ListSelectDialog( list: model.referralFrequencyList, attributeName: 'Description', attributeValueId: 'ParameterCode', okText: TranslationBase.of(context).ok, okFunction: (selectedValue) { setState(() { _selectedFrequency = selectedValue; }); }, ); showDialog( barrierDismissible: false, context: context, builder: (BuildContext context) { return dialog; }, ); } : null, child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context) .selectReferralFrequency, _selectedFrequency != null ? _selectedFrequency['Description'] : null, true), enabled: false, ), ), ), SizedBox( height: 10, ), Container( child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).clinicDetailsandRemarks, null, false), enabled: true, controller: _remarksController, inputFormatters: [ FilteringTextInputFormatter.allow( RegExp(ONLY_LETTERS)) ], keyboardType: TextInputType.text, minLines: 4, maxLines: 6, )), SizedBox( height: 10, ), Container( child: Column( children: [ AppText( TranslationBase.of(context).pleaseFill, color: HexColor("#B8382B"), fontWeight: FontWeight.bold, margin: 10, visibility: isValid == null ? false : !isValid, ), // TODO replace AppButton with secondary button and add loading AppButton( title: TranslationBase.of(context).send, color: HexColor("#B8382B"), onPressed: () => {referToDoctor(context, model)}, ) ], ), ), ], ), ), ), ), ); } Widget priorityBar(BuildContext _context, Size screenSize) { List _priorities = [ TranslationBase.of(context).veryUrgent.toUpperCase(), TranslationBase.of(context).urgent.toUpperCase(), TranslationBase.of(context).routine.toUpperCase(), ]; return Container( height: screenSize.height * 0.070, decoration: containerBorderDecoration(Color(0Xffffffff), Color(0xFFCCCCCC)), child: Row( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.center, children: _priorities.map((item) { bool _isActive = _priorities[_activePriority] == item ? true : false; return Expanded( child: InkWell( child: Center( child: Container( height: screenSize.height * 0.070, decoration: containerBorderDecoration( _isActive ? HexColor("#B8382B") : Colors.white, _isActive ? HexColor("#B8382B") : Colors.white), child: Center( child: Text( item, style: TextStyle( fontSize: 12, color: _isActive ? Colors.white : Colors.black, //Colors.black, fontWeight: FontWeight.bold, ), ), )), ), onTap: () { print(_priorities.indexOf(item)); setState(() { _activePriority = _priorities.indexOf(item); }); }, ), ); }).toList(), ), ); } String getPriority() { DateTime date = DateTime.now(); switch (_activePriority) { case 0: date = date.add(new Duration(hours: 3)); break; case 1: date = date.add(new Duration(hours: 6)); break; case 2: date = date.add(new Duration(days: 1)); break; } var format = DateFormat('yyyy/mm/dd HH:mm a'); var time = format.format(date); print(time); return time; } referToDoctor(BuildContext context, PatientViewModel model) async { if (!validation()) { return; } final routeArgs = ModalRoute.of(context).settings.arguments as Map; PatiantInformtion patient = routeArgs['patient']; try { await model.referToDoctor( extension: _extController.value.text, admissionNo: int.parse(patient.admissionNo), referringDoctorRemarks: _remarksController.value.text, frequency: _selectedFrequency['ParameterCode'].toString(), patientID: patient.patientId, patientTypeID: patient.patientType, priority: (_activePriority + 1).toString(), roomID: patient.roomId, selectedClinicID: _selectedClinic['ClinicID'].toString(), selectedDoctorID: _selectedDoctor['DoctorID'].toString(), projectID: patient.projectId); // TODO: Add Translation DrAppToastMsg.showSuccesToast('Reply Successfully'); Navigator.pop(context); } catch (e) { DrAppToastMsg.showErrorToast(e); } } bool validation() { setState(() { isValid = !_extController.value.text.isNullOrEmpty() && !_remarksController.value.text.isNullOrEmpty() && _selectedClinic != null && _selectedDoctor != null && _selectedFrequency != null; }); return isValid; } InputDecoration textFieldSelectorDecoration( String hintText, String selectedText, bool isDropDown) { 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 ? Icon(Icons.arrow_drop_down) : null, hintStyle: TextStyle( fontSize: 14, color: Colors.grey.shade600, ), ); } BoxDecoration containerBorderDecoration( Color containerColor, Color borderColor) { return BoxDecoration( color: containerColor, shape: BoxShape.rectangle, borderRadius: BorderRadius.all(Radius.circular(6)), border: Border.fromBorderSide(BorderSide( color: borderColor, width: 2.0, )), ); } }