import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.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/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/scheduler.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import '../../../config/size_config.dart'; import '../../../providers/patients_provider.dart'; import '../../../util/dr_app_shared_pref.dart'; import '../../../widgets/shared/app_scaffold_widget.dart'; import '../../../widgets/shared/app_texts_widget.dart'; import '../../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; import '../../../util/extenstions.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.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 { PatientsProvider patientsProv; var doctorsList; final _remarksController = TextEditingController(); final _extController = TextEditingController(); var _isInit = true; bool isValid; var clinicId; var doctorId; var freqId; String _selectedClinic; String _selectedDoctor; String _selectedReferralFrequancy; int _activePriority = 1; FocusNode myFocusNode; @override void didChangeDependencies() { super.didChangeDependencies(); if (_isInit) { myFocusNode = FocusNode(); doctorsList = null; patientsProv = Provider.of(context); patientsProv.getClinicsList(); patientsProv.getReferralFrequancyList(); } _isInit = false; } @override Widget build(BuildContext context) { return AppScaffold( appBarTitle: TranslationBase.of(context).myReferralPatient, body: patientsProv.isLoading ? DrAppCircularProgressIndeicator() : patientsProv.isError ? DrAppEmbeddedError(error: patientsProv.error) : patientsProv.clinicsList == null ? DrAppEmbeddedError(error: 'Something Wrong!') : SingleChildScrollView( child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ AppText( TranslationBase.of(context).clinic, fontSize: 18, fontWeight: FontWeight.bold, marginLeft: 15, marginTop: 15, ), RoundedContainer( margin: 10, showBorder: true, raduis: 30, borderColor: Color(0xff707070), width: double.infinity, child: Padding( padding: EdgeInsets.only( top: SizeConfig.widthMultiplier * 0.9, bottom: SizeConfig.widthMultiplier * 0.9, right: SizeConfig.widthMultiplier * 3, left: SizeConfig.widthMultiplier * 3), child: Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( // add Expanded to have your dropdown button fill remaining space child: DropdownButton( isExpanded: true, value: _selectedClinic, iconSize: 40, elevation: 16, selectedItemBuilder: (BuildContext context) { return patientsProv .getClinicNameList() .map((item) { return Row( mainAxisSize: MainAxisSize.max, children: [ AppText( item, fontSize: SizeConfig.textMultiplier * 2.1, ), ], ); }).toList(); }, onChanged: (newValue) => { setState(() { _selectedDoctor = null; _selectedClinic = newValue; var clinicInfo = patientsProv .clinicsList .where((i) => i['ClinicDescription'] .toString() .contains( _selectedClinic)) .toList(); clinicId = clinicInfo[0]['ClinicID'] .toString(); patientsProv.getDoctorsList(clinicId); }) }, items: patientsProv .getClinicNameList() .map((item) { return DropdownMenuItem( value: item.toString(), child: Text( item, textAlign: TextAlign.end, ), ); }).toList(), ), ), ], ), ), ), //--------------------------------------------------------------------// AppText( TranslationBase.of(context).doctor, fontSize: 18, fontWeight: FontWeight.bold, marginLeft: 15, marginTop: 15, ), RoundedContainer( margin: 10, showBorder: true, raduis: 30, borderColor: Color(0xff707070), width: double.infinity, child: Padding( padding: EdgeInsets.only( top: SizeConfig.widthMultiplier * 0.9, bottom: SizeConfig.widthMultiplier * 0.9, right: SizeConfig.widthMultiplier * 3, left: SizeConfig.widthMultiplier * 3), child: Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( // add Expanded to have your dropdown button fill remaining space child: DropdownButton( isExpanded: true, value: _selectedDoctor, iconSize: 40, elevation: 16, selectedItemBuilder: (BuildContext context) { return patientsProv .getDoctorNameList() .map((item) { return Row( mainAxisSize: MainAxisSize.max, children: [ AppText( item, fontSize: SizeConfig.textMultiplier * 2.1, ), ], ); }).toList(); }, onChanged: (newValue) => { setState(() { _selectedDoctor = newValue; doctorsList = patientsProv.doctorsList; var doctorInfo = doctorsList .where((i) => i['DoctorName'] .toString() .contains(_selectedDoctor)) .toList(); doctorId = doctorInfo[0]['DoctorID'] .toString(); }) }, items: patientsProv .getDoctorNameList() .map((item) { return DropdownMenuItem( value: item.toString(), child: Text( item, textAlign: TextAlign.end, ), ); }).toList(), ), ), ], ), ), ), //-----------------------------/// AppText( TranslationBase.of(context).ext, fontSize: 18, fontWeight: FontWeight.bold, marginLeft: 15, marginTop: 15, ), Padding( padding: const EdgeInsets.all(10.0), child: AppTextFormField( hintText: TranslationBase.of(context).ext, controller: _extController, inputFormatter: ONLY_NUMBERS, textInputType: TextInputType.number, onChanged: (value) => {}, ), ), AppText( TranslationBase.of(context).priority, fontSize: 18, fontWeight: FontWeight.bold, marginLeft: 15, marginTop: 15, ), priorityBar(context), AppText( TranslationBase.of(context).referralFrequency + getPriority(), fontWeight: FontWeight.bold, marginLeft: 15, marginTop: 15, ), AppText( TranslationBase.of(context).referralFrequency, fontSize: 18, fontWeight: FontWeight.bold, marginLeft: 15, marginTop: 15, ), RoundedContainer( margin: 10, showBorder: true, raduis: 30, borderColor: Color(0xff707070), width: double.infinity, child: Padding( padding: EdgeInsets.only( top: SizeConfig.widthMultiplier * 0.9, bottom: SizeConfig.widthMultiplier * 0.9, right: SizeConfig.widthMultiplier * 3, left: SizeConfig.widthMultiplier * 3), child: Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( // add Expanded to have your dropdown button fill remaining space child: DropdownButton( isExpanded: true, value: _selectedReferralFrequancy, iconSize: 40, elevation: 16, selectedItemBuilder: (BuildContext context) { return patientsProv .getReferralNamesList() .map((item) { return Row( mainAxisSize: MainAxisSize.max, children: [ AppText( item, fontSize: SizeConfig.textMultiplier * 2.1, ), ], ); }).toList(); }, onChanged: (newValue) => { setState(() { _selectedReferralFrequancy = newValue; var freqInfo = patientsProv .referalFrequancyList .singleWhere((i) => i[ 'Description'] .toString() .contains( _selectedReferralFrequancy)); freqId = freqInfo['ParameterCode'] .toString(); myFocusNode.requestFocus(); }) }, items: patientsProv .getReferralNamesList() .map((item) { return DropdownMenuItem( value: item.toString(), child: Text( item, textAlign: TextAlign.end, ), ); }).toList(), ), ), ], ), ), ), AppText( TranslationBase.of(context).clinicDetailsandRemarks, fontSize: 18, fontWeight: FontWeight.bold, marginLeft: 15, marginTop: 15, ), Padding( padding: const EdgeInsets.all(10.0), child: AppTextFormField( hintText: TranslationBase.of(context).remarks, focusNode: myFocusNode, controller: _remarksController, inputFormatter: ONLY_LETTERS, textInputType: TextInputType.text, onChanged: (value) => {}, ), ), Padding( padding: const EdgeInsets.all(20.0), child: Column( children: [ AppText( TranslationBase.of(context).pleaseFill, color: Colors.red, fontWeight: FontWeight.bold, margin: 10, visibility: isValid == null ? false : !isValid, ), AppButton( title: TranslationBase.of(context).send, color: Color(PRIMARY_COLOR), onPressed: () => {referToDoctor(context)}, ) ], )) ], ), ), ); } Widget priorityBar(BuildContext _context) { List _priorities = [ TranslationBase.of(context).veryUrgent, TranslationBase.of(context).urgent, TranslationBase.of(context).routine, ]; return Container( height: MediaQuery.of(context).size.height * 0.065, width: SizeConfig.screenWidth * 0.9, margin: EdgeInsets.only(top: 10), decoration: BoxDecoration( color: Color(0Xffffffff), borderRadius: BorderRadius.circular(20)), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.center, children: _priorities.map((item) { bool _isActive = _priorities[_activePriority] == item ? true : false; return Column(mainAxisSize: MainAxisSize.min, children: [ InkWell( child: Center( child: Container( height: 40, width: 90, decoration: BoxDecoration( borderRadius: BorderRadius.circular(50), color: _isActive ? Hexcolor("#B8382B") : Colors.white, ), child: Center( child: Text( item, style: TextStyle( fontSize: 12, color: _isActive ? Colors.white : Colors.black, //Colors.black, // backgroundColor:_isActive // ? Hexcolor("#B8382B") // : Colors.white,//sideColor, fontWeight: FontWeight.bold, ), ), )), ), onTap: () { print(_priorities.indexOf(item)); setState(() { _activePriority = _priorities.indexOf(item); }); }), _isActive ? Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: Colors.white), alignment: Alignment.center, height: 3, width: 90, ) : Container() ]); }).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; } void referToDoctor(context) { if (!validation()) { return; } final routeArgs = ModalRoute.of(context).settings.arguments as Map; PatiantInformtion patient = routeArgs['patient']; patientsProv.referToDoctor(context, extension: _extController.value.text, admissionNo: int.parse(patient.admissionNo), referringDoctorRemarks: _remarksController.value.text, frequency: freqId, patientID: patient.patientId, patientTypeID: patient.patientType, priority: (_activePriority + 1).toString(), roomID: patient.roomId, selectedClinicID: clinicId.toString(), selectedDoctorID: doctorId.toString(), projectID: patient.projectId); } bool validation() { setState(() { isValid = !_extController.value.text.isNullOrEmpty() && !_remarksController.value.text.isNullOrEmpty() && freqId != null && clinicId != null && doctorId != null; }); return isValid; } }