You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			262 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			262 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Dart
		
	
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
 | 
						|
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
 | 
						|
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
 | 
						|
import 'package:diplomaticquarterapp/models/Appointments/DoctorProfile.dart';
 | 
						|
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.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/ToDoList/ObGyne/ObGyne-TimeSlots.dart';
 | 
						|
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
 | 
						|
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
 | 
						|
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
 | 
						|
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
 | 
						|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
 | 
						|
import 'package:diplomaticquarterapp/widgets/avatar/large_avatar.dart';
 | 
						|
import 'package:diplomaticquarterapp/widgets/dragable_sheet.dart';
 | 
						|
import 'package:diplomaticquarterapp/widgets/my_rich_text.dart';
 | 
						|
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:provider/provider.dart';
 | 
						|
import 'package:rating_bar/rating_bar.dart';
 | 
						|
 | 
						|
import '../DoctorProfile.dart';
 | 
						|
 | 
						|
class DoctorView extends StatelessWidget {
 | 
						|
  final DoctorList doctor;
 | 
						|
  bool isLiveCareAppointment;
 | 
						|
  bool isObGyneAppointment;
 | 
						|
  bool isShowFlag;
 | 
						|
  bool isDoctorNameSearch;
 | 
						|
  bool isContinueDentalPlan;
 | 
						|
  OBGyneProcedureListResponse obGyneProcedureListResponse;
 | 
						|
  final VoidCallback onTap;
 | 
						|
  bool isShowDate;
 | 
						|
 | 
						|
  DoctorView(
 | 
						|
      {@required this.doctor,
 | 
						|
      @required this.isLiveCareAppointment,
 | 
						|
      this.isObGyneAppointment = false,
 | 
						|
      this.isDoctorNameSearch = false,
 | 
						|
      this.isContinueDentalPlan = false,
 | 
						|
      this.isShowFlag = true,
 | 
						|
      this.isShowDate = true,
 | 
						|
      this.onTap,
 | 
						|
      this.obGyneProcedureListResponse});
 | 
						|
 | 
						|
  ProjectViewModel projectViewModel;
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    projectViewModel = Provider.of(context);
 | 
						|
    return InkWell(
 | 
						|
      onTap: () {
 | 
						|
        if (isObGyneAppointment) {
 | 
						|
          next(context);
 | 
						|
        } else {
 | 
						|
          // if (doctor.clinicID == 17 && isDoctorNameSearch) {
 | 
						|
          //   showDentalChiefComplaintsList(context);
 | 
						|
          // } else
 | 
						|
          if (isShowFlag) {
 | 
						|
            getDoctorsProfile(context, doctor, isAppo: true, isContinueDentalPlan: isContinueDentalPlan);
 | 
						|
          }
 | 
						|
          (onTap ?? () {})(); // For log analytics of doctor click from book appointment
 | 
						|
        }
 | 
						|
      },
 | 
						|
      child: Container(
 | 
						|
        decoration: BoxDecoration(
 | 
						|
            borderRadius: BorderRadius.all(
 | 
						|
              Radius.circular(10.0),
 | 
						|
            ),
 | 
						|
            boxShadow: [
 | 
						|
              BoxShadow(
 | 
						|
                color: Color(0xff000000).withOpacity(.05),
 | 
						|
                //spreadRadius: 5,
 | 
						|
                blurRadius: 27,
 | 
						|
                offset: Offset(0, -3),
 | 
						|
              ),
 | 
						|
            ],
 | 
						|
            color: Colors.white),
 | 
						|
        child: Padding(
 | 
						|
          padding: const EdgeInsets.only(left: 12, right: 12, top: 12, bottom: 12),
 | 
						|
          child: Column(
 | 
						|
            mainAxisSize: MainAxisSize.min,
 | 
						|
            crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
            children: [
 | 
						|
              Row(
 | 
						|
                children: [
 | 
						|
                  Expanded(
 | 
						|
                    child: Text(
 | 
						|
                      doctor.name,
 | 
						|
                      style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.64, height: 25 / 16),
 | 
						|
                    ),
 | 
						|
                  ),
 | 
						|
                  isShowDate ? Text(
 | 
						|
                    DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(doctor.date)),
 | 
						|
                    style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.48, height: 18 / 12),
 | 
						|
                  ) : Container(),
 | 
						|
                ],
 | 
						|
              ),
 | 
						|
              if (doctor.doctorTitle != null) SizedBox(height: 6),
 | 
						|
              Row(
 | 
						|
                mainAxisSize: MainAxisSize.min,
 | 
						|
                children: <Widget>[
 | 
						|
                  LargeAvatar(
 | 
						|
                    name: doctor.name,
 | 
						|
                    url: doctor.doctorImageURL,
 | 
						|
                    width: 48,
 | 
						|
                    height: 48,
 | 
						|
                  ),
 | 
						|
                  SizedBox(width: 11),
 | 
						|
                  Expanded(
 | 
						|
                    child: Column(
 | 
						|
                      crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                      mainAxisSize: MainAxisSize.min,
 | 
						|
                      children: <Widget>[
 | 
						|
                        if (doctor.clinicName != null) MyRichText(TranslationBase.of(context).clinic + ":", doctor.clinicName, projectViewModel.isArabic),
 | 
						|
                        if (doctor.projectName != null) MyRichText(TranslationBase.of(context).branch, doctor.projectName, projectViewModel.isArabic),
 | 
						|
                        if (doctor.speciality != null && doctor.speciality.length > 0)
 | 
						|
                          Text(
 | 
						|
                            this.doctor.speciality[0].trim(),
 | 
						|
                            // getDoctorSpeciality(this.doctor.speciality).trim(),
 | 
						|
                            style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.48, height: 18 / 12),
 | 
						|
                          ),
 | 
						|
                        if (doctor.nearestFreeSlot != null)
 | 
						|
                          Text(
 | 
						|
                            getDate(doctor.nearestFreeSlot),
 | 
						|
                            style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff359846), letterSpacing: -0.48, height: 18 / 12),
 | 
						|
                          ),
 | 
						|
                        Row(
 | 
						|
                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | 
						|
                          mainAxisSize: MainAxisSize.max,
 | 
						|
                          children: <Widget>[
 | 
						|
                            RatingBar.readOnly(
 | 
						|
                              initialRating: this.doctor.actualDoctorRate.toDouble(),
 | 
						|
                              size: 16.0,
 | 
						|
                              filledColor: Color(0XFFD02127),
 | 
						|
                              emptyColor: Color(0XFFD02127),
 | 
						|
                              isHalfAllowed: true,
 | 
						|
                              halfFilledIcon: Icons.star_half,
 | 
						|
                              filledIcon: Icons.star,
 | 
						|
                              emptyIcon: Icons.star_border,
 | 
						|
                            ),
 | 
						|
                            if (isShowFlag)
 | 
						|
                              Icon(
 | 
						|
                                Icons.arrow_forward,
 | 
						|
                                color: Theme.of(context).primaryColor,
 | 
						|
                              ),
 | 
						|
                            //   if (isShowFlag) Image.network(this.doctor.nationalityFlagURL, width: 22.0, height: 22.0)
 | 
						|
                          ],
 | 
						|
                        ),
 | 
						|
                      ],
 | 
						|
                    ),
 | 
						|
                  ),
 | 
						|
                ],
 | 
						|
              ),
 | 
						|
            ],
 | 
						|
          ),
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  showDentalChiefComplaintsList(BuildContext context) {
 | 
						|
    HospitalsModel selectedHospital = new HospitalsModel();
 | 
						|
    selectedHospital.name = doctor.projectName;
 | 
						|
    ListClinicCentralized selectedClinic = new ListClinicCentralized();
 | 
						|
    selectedClinic.clinicDescription = doctor.clinicName;
 | 
						|
 | 
						|
    SearchInfo searchInfo = new SearchInfo();
 | 
						|
    searchInfo.ProjectID = doctor.projectID;
 | 
						|
    searchInfo.ClinicID = doctor.clinicID;
 | 
						|
    searchInfo.date = DateTime.now();
 | 
						|
    searchInfo.hospital = selectedHospital;
 | 
						|
    searchInfo.clinic = selectedClinic;
 | 
						|
 | 
						|
    showDraggableDialog(
 | 
						|
        context,
 | 
						|
        DentalComplaints(
 | 
						|
            isDoctorNameSearch: true,
 | 
						|
            onSelectedMethod: () {
 | 
						|
              Navigator.pop(context);
 | 
						|
            },
 | 
						|
            searchInfo: searchInfo));
 | 
						|
  }
 | 
						|
 | 
						|
  String getDoctorSpeciality(List<String> docSpecial) {
 | 
						|
    String docSpeciality = "";
 | 
						|
    docSpecial.forEach((v) {
 | 
						|
      docSpeciality = docSpeciality + v + "\n";
 | 
						|
    });
 | 
						|
    return docSpeciality;
 | 
						|
  }
 | 
						|
 | 
						|
  getDoctorsProfile(context, DoctorList docObject, {isAppo, bool isContinueDentalPlan = false}) {
 | 
						|
    int languageID = projectViewModel.isArabic ? 1 : 2;
 | 
						|
    GifLoaderDialogUtils.showMyDialog(context);
 | 
						|
    List<DoctorProfileList> docProfileList = [];
 | 
						|
    DoctorsListService service = new DoctorsListService();
 | 
						|
    service.getDoctorsProfile(docObject.doctorID, docObject.clinicID, docObject.projectID, languageID, context).then((res) {
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      if (res['MessageStatus'] == 1) {
 | 
						|
        if (res['DoctorProfileList'].length != 0) {
 | 
						|
          res['DoctorProfileList'].forEach((v) {
 | 
						|
            docProfileList.add(new DoctorProfileList.fromJson(v));
 | 
						|
          });
 | 
						|
        } else {}
 | 
						|
        navigateToDoctorProfile(context, docObject, docProfileList[0], isAppo: isAppo, isContinueDentalPlan: isContinueDentalPlan);
 | 
						|
      } else {
 | 
						|
        AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
 | 
						|
      }
 | 
						|
    }).catchError((err) {
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      AppToast.showErrorToast(message: err);
 | 
						|
      print(err);
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  String getDate(String date) {
 | 
						|
    DateTime dateObj = DateUtil.convertStringToDate(date);
 | 
						|
    return DateUtil.getWeekDay(dateObj.weekday) +
 | 
						|
        ", " +
 | 
						|
        dateObj.day.toString() +
 | 
						|
        " " +
 | 
						|
        DateUtil.getMonth(dateObj.month) +
 | 
						|
        " " +
 | 
						|
        dateObj.year.toString() +
 | 
						|
        " " +
 | 
						|
        dateObj.hour.toString() +
 | 
						|
        ":" +
 | 
						|
        getMinute(dateObj);
 | 
						|
  }
 | 
						|
 | 
						|
  String getMinute(DateTime dateObj) {
 | 
						|
    if (dateObj.minute == 0) {
 | 
						|
      return dateObj.minute.toString() + "0";
 | 
						|
    } else {
 | 
						|
      return dateObj.minute.toString();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  void next(BuildContext context) {
 | 
						|
    Navigator.push(context,
 | 
						|
        FadePage(page: ObGyneTimeSlots(projectID: doctor.projectID, selectedClinicID: doctor.clinicID, selectedDoctorID: doctor.doctorID, obGyneProcedureListResponse: obGyneProcedureListResponse)));
 | 
						|
  }
 | 
						|
 | 
						|
  Future navigateToDoctorProfile(context, docObject, docProfile, {isAppo, bool isContinueDentalPlan = false}) async {
 | 
						|
    Navigator.push(
 | 
						|
      context,
 | 
						|
      FadePage(
 | 
						|
        page: DoctorProfile(
 | 
						|
          doctor: docObject,
 | 
						|
          isLiveCareAppointment: isLiveCareAppointment,
 | 
						|
          docProfileList: docProfile,
 | 
						|
          isOpenAppt: isAppo,
 | 
						|
          isDoctorNameSearch: isDoctorNameSearch,
 | 
						|
          isContinueDentalPlan: isContinueDentalPlan,
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |