import "dart:collection"; import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/SearchInfoModel.dart'; import 'package:diplomaticquarterapp/models/Clinics/ClinicListResponse.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/DentalComplaints.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/SearchResults.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/card/rounded_container.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; class SearchByClinic extends StatefulWidget { final List clnicIds; SearchByClinic({this.clnicIds}); @override _SearchByClinicState createState() => _SearchByClinicState(); } class _SearchByClinicState extends State { bool nearestAppo = false; String dropdownValue; String projectDropdownValue; // var event = RobotProvider(); List clinicsList = []; List projectsList = []; bool isMobileAppDentalAllow = false; bool isLoaded = false; bool isProjectLoaded = false; @override void initState() { WidgetsBinding.instance.addPostFrameCallback((_) => getClinicsList()); super.initState(); } @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.all(10.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Checkbox( activeColor: new Color(0xFF40ACC9), value: nearestAppo, onChanged: (bool value) { setState(() { nearestAppo = value; print(nearestAppo); if (nearestAppo) getProjectsList(); else isProjectLoaded = false; }); }, ), Text(TranslationBase.of(context).nearestAppo, style: TextStyle(fontSize: 16.0, letterSpacing: 0.9)), ], ), widget.clnicIds != null && widget.clnicIds.length > 1 && isLoaded == true ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: clinicsList.map((result) { return RoundedContainer( child: ListTile( onTap: () { // setState(() { dropdownValue = result.clinicID.toString(); setState(() { if (!isDentalSelectedAndSupported()) { projectDropdownValue = ""; getDoctorsList(context); } }); }, title: Text(result.clinicDescription, style: TextStyle( fontSize: 14.0, color: Colors.grey[700], letterSpacing: 1.0)))); }).toList()) : Container( height: 60.0, decoration: BoxDecoration( color: Colors.white, border: Border.all( color: Colors.grey[400], width: 1.0, ), borderRadius: BorderRadius.circular(10), ), // margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 20.0), padding: EdgeInsets.all(8.0), width: MediaQuery.of(context).size.width, child: DropdownButtonHideUnderline( child: DropdownButton( hint: new Text(TranslationBase.of(context).selectClinic), value: dropdownValue, items: clinicsList.map((item) { return new DropdownMenuItem( value: item.clinicID.toString(), child: new Text(item.clinicDescription), ); }).toList(), onChanged: (newValue) { setState(() { dropdownValue = newValue; if (!isDentalSelectedAndSupported() && !nearestAppo) { projectDropdownValue = ""; getDoctorsList(context); } }); }, ), )), isDentalSelectedAndSupported() == true || (nearestAppo && isProjectLoaded) ? Container( height: 60.0, decoration: BoxDecoration( color: Colors.white, border: Border.all( color: Colors.grey[400], width: 1.0, ), borderRadius: BorderRadius.circular(10), ), padding: EdgeInsets.all(8.0), width: MediaQuery.of(context).size.width, margin: EdgeInsets.only(top: 15.0), child: DropdownButtonHideUnderline( child: DropdownButton( hint: new Text("Select Project"), value: projectDropdownValue, items: projectsList.map((item) { return new DropdownMenuItem( value: item.mainProjectID.toString(), child: new Text(item.name), ); }).toList(), onChanged: (newValue) { setState(() { projectDropdownValue = newValue; getDoctorsList(context); }); }, ), )) : Container(), ], ), ); } bool isDentalSelectedAndSupported() { return dropdownValue != "" && (dropdownValue == "17") && isMobileAppDentalAllow; } getClinicsList() { GifLoaderDialogUtils.showMyDialog(context); ClinicListService service = new ClinicListService(); service.getClinicsList(context).then((res) { if (res['MessageStatus'] == 1) { setState(() { isMobileAppDentalAllow = res['ISMobileAppDentalAllow']; res['ListClinicCentralized'].forEach((v) { clinicsList.add(new ListClinicCentralized.fromJson(v)); }); }); getProjectsList(); GifLoaderDialogUtils.hideDialog(context); } else {} }).catchError((err) { print(err); GifLoaderDialogUtils.hideDialog(context); }); } getProjectsList() { ClinicListService service = new ClinicListService(); List projectsListLocal = []; service.getProjectsList(context).then((res) { if (res['MessageStatus'] == 1) { setState(() { res['ListProject'].forEach((v) { projectsListLocal.add(new HospitalsModel.fromJson(v)); }); projectsList = projectsListLocal; }); filterClinic(); isProjectLoaded = true; } else { isProjectLoaded = false; } }).catchError((err) { print(err); }); } // TODO Mosa_REMARk to come back later getDoctorsList(BuildContext context) { GifLoaderDialogUtils.showMyDialog(context); SearchInfo searchInfo = new SearchInfo(); if (dropdownValue == "17") { searchInfo.ProjectID = int.parse(projectDropdownValue); searchInfo.ClinicID = int.parse(dropdownValue); searchInfo.date = DateTime.now(); GifLoaderDialogUtils.hideDialog(context); navigateToDentalComplaints(context, searchInfo); } else { List doctorsList = []; List arr = []; List arrDistance = []; List result; int numAll; List _patientDoctorAppointmentListHospital = List(); DoctorsListService service = new DoctorsListService(); service .getDoctorsList( int.parse(dropdownValue), projectDropdownValue != "" ? int.parse(projectDropdownValue) : 0, nearestAppo, context) .then((res) { GifLoaderDialogUtils.hideDialog(context); if (res['MessageStatus'] == 1) { setState(() { if (res['DoctorList'].length != 0) { // print(res['DoctorList']); doctorsList.clear(); res['DoctorList'].forEach((v) { doctorsList.add(new DoctorList.fromJson(v)); }); doctorsList.forEach((element) { List doctorByHospital = _patientDoctorAppointmentListHospital .where( (elementClinic) => elementClinic.filterName == element.projectName, ) .toList(); if (doctorByHospital.length != 0) { _patientDoctorAppointmentListHospital[ _patientDoctorAppointmentListHospital .indexOf(doctorByHospital[0])] .patientDoctorAppointmentList .add(element); } else { _patientDoctorAppointmentListHospital.add( PatientDoctorAppointmentList( filterName: element.projectName, distanceInKMs: element.projectDistanceInKiloMeters.toString(), patientDoctorAppointment: element)); } }); } else {} }); result = LinkedHashSet.from(arr).toList(); numAll = result.length; navigateToSearchResults( context, doctorsList, _patientDoctorAppointmentListHospital); } else { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); } }).catchError((err) { GifLoaderDialogUtils.hideDialog(context); print(err); AppToast.showErrorToast(message: err); }); } } Future navigateToDentalComplaints( BuildContext context, SearchInfo searchInfo) async { Navigator.push( context, FadePage( page: DentalComplaints(searchInfo: searchInfo), ), ); } Future navigateToSearchResults( context, List docList, List patientDoctorAppointmentListHospital) async { isProjectLoaded = false; Navigator.push( context, FadePage( page: SearchResults( isLiveCareAppointment: false, doctorsList: docList, patientDoctorAppointmentListHospital: patientDoctorAppointmentListHospital))) .then((value) { getProjectsList(); }); } filterClinic() { setState(() { if (widget.clnicIds != null && widget.clnicIds.length > 0) { clinicsList = clinicsList .where((i) => widget.clnicIds.indexOf(i.clinicID) > -1) .toList(); isLoaded = true; } }); } }