import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart'; import 'package:doctor_app_flutter/models/sickleave/add_sickleave_request.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/text_validator.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/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_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/rounded_container_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:intl/intl.dart'; import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.dart'; import 'package:provider/provider.dart'; Helpers helpers = Helpers(); class RescheduleLeaveScreen extends StatefulWidget { RescheduleLeaveScreen(); @override _RescheduleLeaveScreen createState() => _RescheduleLeaveScreen(); } class _RescheduleLeaveScreen extends State { DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); TextEditingController _toDateController = new TextEditingController(); ProjectViewModel projectsProvider; String _selectedClinic; Map profile = {}; AddSickLeaveRequest addSickLeave = AddSickLeaveRequest(); void _presentDatePicker(id) { showDatePicker( context: context, initialDate: DateTime.now(), firstDate: DateTime(2019), lastDate: DateTime.now(), ).then((pickedDate) { if (pickedDate == null) { return; } setState(() { // var selectedDate = DateFormat.yMd().format(pickedDate); final df = new DateFormat('yyyy-MM-dd'); addSickLeave.startDate = df.format(pickedDate); _toDateController.text = addSickLeave.startDate; //addSickLeave.startDate = selectedDate; }); }); } @override void initState() { getProfile(); super.initState(); } @override Widget build(BuildContext context) { projectsProvider = Provider.of(context); return BaseView( onModelReady: (model) => model.getClinicsList(), builder: (_, model, w) => BaseView( onModelReady: (model2) => { model2.getOffTime(), model2.getReasons(18), model2.getCoveringDoctors() }, builder: (_, model2, w) => AppScaffold( baseViewModel: model2, isShowAppBar: false, body: Center( child: Container( margin: EdgeInsets.only(top: 10), child: FractionallySizedBox( widthFactor: 0.9, child: ListView( children: [ Container( margin: EdgeInsets.all(8), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), 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: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( // add Expanded to have your dropdown button fill remaining space child: DropdownButtonHideUnderline( child: new IgnorePointer( ignoring: true, child: DropdownButton( focusColor: Colors.grey, isExpanded: true, value: getClinicName( model) ?? "", iconSize: 40, elevation: 16, selectedItemBuilder: (BuildContext context) { return model .getClinicNameList() .map((item) { return Row( mainAxisSize: MainAxisSize .max, children: [ AppText( item, fontSize: SizeConfig .textMultiplier * 2.1, color: Colors.grey, ), ], ); }).toList(); }, onChanged: (newValue) => {}, items: model .getClinicNameList() .map((item) { return DropdownMenuItem( value: item.toString(), child: Text( item, textAlign: TextAlign.end, ), ); }).toList(), ))), ), ], ) ], ), )), Container( margin: EdgeInsets.all(8), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), padding: EdgeInsets.all(5), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ new IgnorePointer( ignoring: true, child: AppTextFormField( readOnly: true, hintText: profile != null ? profile['DoctorName'] : "", borderColor: Colors.white, onSaved: (value) {}, inputFormatter: ONLY_NUMBERS)) ], ), ), Container( margin: EdgeInsets.all(8), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), 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: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ model2.allOffTime.length > 0 ? Expanded( // add Expanded to have your dropdown button fill remaining space child: DropdownButtonHideUnderline( child: DropdownButton( focusColor: Colors.grey, isExpanded: true, value: model2.allOffTime[0] ['code'], iconSize: 40, elevation: 16, selectedItemBuilder: (BuildContext context) { return model2.allOffTime .map((item) { return Row( mainAxisSize: MainAxisSize.max, children: [ AppText( item[ 'description'], fontSize: SizeConfig .textMultiplier * 2.1, color: Colors.grey, ), ], ); }).toList(); }, onChanged: (newValue) => {}, items: model2.allOffTime .map((item) { return DropdownMenuItem< String>( value: item['code'] .toString(), child: Text( item['description'], textAlign: TextAlign.end, ), ); }).toList(), )), ) : SizedBox(), ], ) ], ), )), Container( margin: EdgeInsets.all(8), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), padding: EdgeInsets.all(5), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ AppTextFormField( hintText: TranslationBase.of(context) .fromDate, borderColor: Colors.white, prefix: IconButton( icon: Icon(Icons.calendar_today)), textInputType: TextInputType.number, controller: _toDateController, onTap: () { _presentDatePicker('_selectedToDate'); }, inputFormatter: ONLY_DATE, onChanged: (value) { addSickLeave.startDate = value; }), ], )), Row( children: [ Expanded( child: Container( margin: EdgeInsets.all(8), decoration: BoxDecoration( borderRadius: BorderRadius.all( Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), padding: EdgeInsets.all(5), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ new AppTextFormField( readOnly: true, hintText: "", borderColor: Colors.white, onSaved: (value) {}, inputFormatter: ONLY_NUMBERS), ], ), ), ), Expanded( child: Container( margin: EdgeInsets.all(8), decoration: BoxDecoration( borderRadius: BorderRadius.all( Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), padding: EdgeInsets.all(5), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ new AppTextFormField( readOnly: true, hintText: "", borderColor: Colors.white, onSaved: (value) {}, inputFormatter: ONLY_NUMBERS), ], ), ), ) ], ), Container( margin: EdgeInsets.all(8), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), 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: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ model2.allReasons.length > 0 ? Expanded( // add Expanded to have your dropdown button fill remaining space child: DropdownButtonHideUnderline( child: DropdownButton( focusColor: Colors.grey, isExpanded: true, value: model2.allReasons[0] ['id'] .toString(), iconSize: 40, elevation: 16, selectedItemBuilder: (BuildContext context) { return model2.allReasons .map((item) { return Row( mainAxisSize: MainAxisSize.max, children: [ AppText( projectsProvider .isArabic ? item[ 'nameAr'] : item[ 'nameEn'], fontSize: SizeConfig .textMultiplier * 2.1, color: Colors.grey, ), ], ); }).toList(); }, onChanged: (newValue) => {}, items: model2.allReasons .map((item) { return DropdownMenuItem< String>( value: item['id'] .toString(), child: Text( projectsProvider .isArabic ? item['nameAr'] : item['nameEn'], textAlign: TextAlign.end, ), ); }).toList(), )), ) : SizedBox(), ], ) ], ), )), Container( margin: EdgeInsets.all(8), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all( width: 1.0, color: HexColor("#CCCCCC"))), 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: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ model2.coveringDoctors.length > 0 ? Expanded( // add Expanded to have your dropdown button fill remaining space child: DropdownButtonHideUnderline( child: DropdownButton( focusColor: Colors.grey, isExpanded: true, value: model2 .coveringDoctors[0] ['doctorID'] .toString(), iconSize: 40, elevation: 16, selectedItemBuilder: (BuildContext context) { return model2 .coveringDoctors .map((item) { return Row( mainAxisSize: MainAxisSize.max, children: [ AppText( projectsProvider .isArabic ? item[ 'doctorNameN'] : item[ 'doctorName'], fontSize: SizeConfig .textMultiplier * 2.1, color: Colors.grey, ), ], ); }).toList(); }, onChanged: (newValue) => {}, items: model2 .coveringDoctors .map((item) { return DropdownMenuItem< String>( value: item['doctorID'] .toString(), child: Text( projectsProvider .isArabic ? item[ 'doctorNameN'] : item[ 'doctorName'], textAlign: TextAlign.start, ), ); }).toList(), )), ) : SizedBox(), ], ) ], ), )), Container( margin: EdgeInsets.all( SizeConfig.widthMultiplier * 5), child: Wrap( alignment: WrapAlignment.center, children: [ AppButton( title: TranslationBase.of(context).add, onPressed: () {}, ), ], ), ), // Column( // children: [ // Texts(TranslationBase.of(context) // .previousSickLeaveIssue + // ' ') // ], // ) ], ), ), ), ), ))); } getProfile() async { Map p = await sharedPref.getObj(DOCTOR_PROFILE); setState(() { this.profile = p; }); } getClinicName(model) { var clinicID = this.profile != null ? this.profile['ClinicID'] : 1; var clinicInfo = model.clinicsList.where((i) => i['ClinicID'] == clinicID).toList(); return clinicInfo.length > 0 ? clinicInfo[0]['ClinicDescription'] : ""; } }