CR Fixes Search By Clinic & Search By Doctor List Reload Issue

dev_v3.13.6_PenguinIn
Aamir.Muhammad 3 months ago
parent 31aa09e35b
commit 4c5ba6048f

@ -28,14 +28,14 @@ class _SearchState extends State<Search> with TickerProviderStateMixin {
@override
void initState() {
_tabController = new TabController(length: 2, vsync: this, initialIndex: widget.type);
_tabController = new TabController(length: 2, vsync: this, initialIndex: widget.type, );
super.initState();
}
@override
Widget build(BuildContext context) {
AppGlobal.context = context;
ProjectViewModel projectViewModel = Provider.of(context);
// ProjectViewModel projectViewModel = Provider.of(context);
GAnalytics.TREATMENT_TYPE = null; // reset treatment type on start new booking
return AppScaffold(
@ -56,13 +56,13 @@ class _SearchState extends State<Search> with TickerProviderStateMixin {
unselectedLabelColor: Color(0xff575757),
labelPadding: EdgeInsets.only(top: 15, bottom: 13, left: 20, right: 20),
labelStyle: TextStyle(
fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins',
fontFamily: context.read<ProjectViewModel>().isArabic ? 'Cairo' : 'Poppins',
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.48,
),
unselectedLabelStyle: TextStyle(
fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins',
fontFamily: context.read<ProjectViewModel>().isArabic ? 'Cairo' : 'Poppins',
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.48,
@ -70,13 +70,14 @@ class _SearchState extends State<Search> with TickerProviderStateMixin {
tabs: [Text(TranslationBase.of(context).clinicName), Text(TranslationBase.of(context).doctorName)],
onTap: (idx) {
if (idx == 0)
projectViewModel.analytics.appointment.book_appointment_by_clinic();
context.read<ProjectViewModel>().analytics.appointment.book_appointment_by_clinic();
else
projectViewModel.analytics.appointment.book_appointment_by_doctor();
context.read<ProjectViewModel>().analytics.appointment.book_appointment_by_doctor();
},
),
Expanded(
child: TabBarView(
physics: NeverScrollableScrollPhysics(),
children: [
SearchByClinic(clnicIds: widget.clnicIds),

@ -10,7 +10,7 @@ import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class SearchResults extends StatefulWidget {
class SearchResults extends StatelessWidget {
List<DoctorList> doctorsList = [];
List<PatientDoctorAppointmentList> patientDoctorAppointmentListHospital;
bool isLiveCareAppointment;
@ -18,19 +18,16 @@ class SearchResults extends StatefulWidget {
bool isDoctorNameSearch;
OBGyneProcedureListResponse? obGyneProcedureListResponse;
SearchResults({required this.doctorsList, required this.patientDoctorAppointmentListHospital, this.isObGyneAppointment = false, this.isDoctorNameSearch = false, required this.isLiveCareAppointment, this.obGyneProcedureListResponse});
@override
_SearchResultsState createState() => _SearchResultsState();
}
class _SearchResultsState extends State<SearchResults> {
List<DoctorList> tempList = [];
late ProjectViewModel projectViewModel;
SearchResults(
{required this.doctorsList,
required this.patientDoctorAppointmentListHospital,
this.isObGyneAppointment = false,
this.isDoctorNameSearch = false,
required this.isLiveCareAppointment,
this.obGyneProcedureListResponse});
@override
Widget build(BuildContext context) {
projectViewModel = Provider.of(context);
return AppScaffold(
appBarTitle: TranslationBase.of(context).bookAppo,
isShowDecPage: false,
@ -38,44 +35,47 @@ class _SearchResultsState extends State<SearchResults> {
showNewAppBarTitle: true,
showNewAppBar: true,
backgroundColor: CustomColors.appBackgroudGrey2Color,
body: widget.patientDoctorAppointmentListHospital.isNotEmpty ? ListView.separated(
physics: BouncingScrollPhysics(),
separatorBuilder: (context, index) {
return Container(
height: 12,
margin: EdgeInsets.only(left: 21, right: 21),
);
},
itemBuilder: (context, index) {
return AppExpandableNotifier(
title: (widget.patientDoctorAppointmentListHospital[index].distanceInKMs != "0")
? widget.patientDoctorAppointmentListHospital[index].filterName! + " - " + widget.patientDoctorAppointmentListHospital[index].distanceInKMs! + " " + TranslationBase.of(context).km
: widget.patientDoctorAppointmentListHospital[index].filterName,
isTitleSingleLine: false,
isExpand: widget.patientDoctorAppointmentListHospital.length == 1 ? true : false,
bodyWidget: ListView.separated(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.only(bottom: 10, top: 10, left: 21, right: 21),
itemBuilder: (context, _index) {
final doctor = widget.patientDoctorAppointmentListHospital[index].patientDoctorAppointmentList![_index];
return DoctorView(
doctor: doctor,
isLiveCareAppointment: widget.isLiveCareAppointment,
isObGyneAppointment: widget.isObGyneAppointment,
isDoctorNameSearch: widget.isDoctorNameSearch,
obGyneProcedureListResponse: widget.obGyneProcedureListResponse,
isShowDate: false,
onTap: () {
projectViewModel.analytics.appointment.book_appointment_select_doctor(appointment_type: 'regular', doctor: doctor);
});
},
separatorBuilder: (context, index) => SizedBox(height: 14),
itemCount: widget.patientDoctorAppointmentListHospital[index].patientDoctorAppointmentList!.length),
);
},
itemCount: widget.patientDoctorAppointmentListHospital.length,
) : getNoDataWidget(context),
body: patientDoctorAppointmentListHospital.isNotEmpty
? ListView.separated(
addAutomaticKeepAlives: true,
physics: BouncingScrollPhysics(),
separatorBuilder: (context, index) {
return Container(
height: 12,
margin: EdgeInsets.only(left: 21, right: 21),
);
},
itemBuilder: (context, index) {
return AppExpandableNotifier(
title: (patientDoctorAppointmentListHospital[index].distanceInKMs != "0")
? patientDoctorAppointmentListHospital[index].filterName! + " - " + patientDoctorAppointmentListHospital[index].distanceInKMs! + " " + TranslationBase.of(context).km
: patientDoctorAppointmentListHospital[index].filterName,
isTitleSingleLine: false,
isExpand: patientDoctorAppointmentListHospital.length == 1 ? true : false,
bodyWidget: ListView.separated(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.only(bottom: 10, top: 10, left: 21, right: 21),
itemBuilder: (context, _index) {
final doctor = patientDoctorAppointmentListHospital[index].patientDoctorAppointmentList![_index];
return DoctorView(
doctor: doctor,
isLiveCareAppointment: isLiveCareAppointment,
isObGyneAppointment: isObGyneAppointment,
isDoctorNameSearch: isDoctorNameSearch,
obGyneProcedureListResponse: obGyneProcedureListResponse,
isShowDate: false,
onTap: () {
context.read<ProjectViewModel>().analytics.appointment.book_appointment_select_doctor(appointment_type: 'regular', doctor: doctor);
});
},
separatorBuilder: (context, index) => SizedBox(height: 14),
itemCount: patientDoctorAppointmentListHospital[index].patientDoctorAppointmentList!.length),
);
},
itemCount: patientDoctorAppointmentListHospital.length,
)
: getNoDataWidget(context),
);
}
}

@ -69,7 +69,7 @@ class _LiveCareBookAppointmentState extends State<LiveCareBookAppointment> {
width: 150.0),
),
Container(
margin: EdgeInsets.only(left: 10.0, right: 10.0),
margin: EdgeInsets.only(left: 10.0, right: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [

@ -60,7 +60,6 @@ class _SearchByClinicState extends State<SearchByClinic> {
final GlobalKey clinicDropdownKey = GlobalKey();
final GlobalKey projectDropdownKey = GlobalKey();
TextEditingController ageController = new TextEditingController();
late ProjectViewModel projectViewModel;
String radioValue = "";
@ -70,15 +69,14 @@ class _SearchByClinicState extends State<SearchByClinic> {
void initState() {
locationUtils = new LocationUtils(isShowConfirmDialog: true, context: context);
WidgetsBinding.instance.addPostFrameCallback((_) => getClinicsList());
checkPVM();
super.initState();
}
@override
Widget build(BuildContext context) {
projectViewModel = Provider.of(context);
if (projectViewModel.isLogin) {
void checkPVM(){
if (context.read<ProjectViewModel>().isLogin) {
if (radioValue == null) {
if (projectViewModel.user.gender == 1) {
if (context.read<ProjectViewModel>().user.gender == 1) {
radioValue = TranslationBase.of(context).male;
} else {
radioValue = TranslationBase.of(context).female;
@ -88,16 +86,20 @@ class _SearchByClinicState extends State<SearchByClinic> {
radioValue = TranslationBase.of(context).female;
}
if (ageController.text.isEmpty) {
ageController.text = projectViewModel.isLogin ? projectViewModel.user!.age.toString() : "";
ageController.text = context.read<ProjectViewModel>().isLogin ? context.read<ProjectViewModel>().user!.age.toString() : "";
ageController.selection = TextSelection.fromPosition(TextPosition(offset: ageController.text.length));
}
}
@override
Widget build(BuildContext context) {
return Container(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
if (projectViewModel.isLogin)
if (context.read<ProjectViewModel>().isLogin)
Column(
children: [
Padding(
@ -246,7 +248,7 @@ class _SearchByClinicState extends State<SearchByClinic> {
if (!nearestAppo) getDoctorsList(context);
} else {}
});
projectViewModel.analytics.appointment.book_appointment_select_clinic(appointment_type: 'regular', clinic: clincs.clinicDescription);
context.read<ProjectViewModel>().analytics.appointment.book_appointment_select_clinic(appointment_type: 'regular', clinic: clincs.clinicDescription);
});
},
child: Container(
@ -527,7 +529,7 @@ class _SearchByClinicState extends State<SearchByClinic> {
}
getProjectsList() {
int languageID = projectViewModel.isArabic ? 1 : 2;
int languageID = context.read<ProjectViewModel>().isArabic ? 1 : 2;
ClinicListService service = new ClinicListService();
List<HospitalsModel> projectsListLocal = [];
service
@ -563,8 +565,8 @@ class _SearchByClinicState extends State<SearchByClinic> {
searchInfo.clinic = selectedClinic;
searchInfo.date = DateTime.now();
if (projectViewModel.isLogin) {
if (projectViewModel.user.age! > 12) {
if (context.read<ProjectViewModel>().isLogin) {
if (context.read<ProjectViewModel>().user.age! > 12) {
navigateToDentalComplaints(context, searchInfo);
} else {
callDoctorsSearchAPI(17);
@ -601,7 +603,7 @@ class _SearchByClinicState extends State<SearchByClinic> {
}
callDoctorsSearchAPI(int clinicID) {
int languageID = projectViewModel.isArabic ? 1 : 2;
int languageID = context.read<ProjectViewModel>().isArabic ? 1 : 2;
GifLoaderDialogUtils.showMyDialog(context);
List<DoctorList> doctorsList = [];
List<String> arr = [];

@ -20,7 +20,6 @@ class SearchByDoctor extends StatefulWidget {
class _SearchByDoctorState extends State<SearchByDoctor> {
TextEditingController doctorNameController = new TextEditingController();
late bool _isButtonDisabled;
late ProjectViewModel projectViewModel;
@override
void initState() {
@ -30,7 +29,6 @@ class _SearchByDoctorState extends State<SearchByDoctor> {
@override
Widget build(BuildContext context) {
projectViewModel = Provider.of(context);
return Column(
children: [
Expanded(
@ -90,7 +88,7 @@ class _SearchByDoctorState extends State<SearchByDoctor> {
}
getDoctorsList(BuildContext context) {
int languageID = projectViewModel.isArabic ? 1 : 2;
int languageID = context.read<ProjectViewModel>().isArabic ? 1 : 2;
GifLoaderDialogUtils.showMyDialog(context);
List<DoctorList> doctorsList = [];
DoctorsListService service = new DoctorsListService();
@ -150,7 +148,7 @@ class _SearchByDoctorState extends State<SearchByDoctor> {
_searchDoctor(BuildContext context) {
getDoctorsList(context);
projectViewModel.analytics.appointment.book_appointment_doctor_search(query: doctorNameController.text);
context.read<ProjectViewModel>().analytics.appointment.book_appointment_doctor_search(query: doctorNameController.text);
}
navigateToSearchResults(context, List<DoctorList> docList, List<PatientDoctorAppointmentList> patientDoctorAppointmentListHospital) {

@ -23,7 +23,7 @@ import 'package:provider/provider.dart';
import '../DoctorProfile.dart';
class DoctorView extends StatelessWidget {
class DoctorView extends StatefulWidget {
final DoctorList doctor;
bool? isLiveCareAppointment;
bool isObGyneAppointment;
@ -45,23 +45,27 @@ class DoctorView extends StatelessWidget {
this.onTap,
this.obGyneProcedureListResponse});
late ProjectViewModel projectViewModel;
@override
State<DoctorView> createState() => _DoctorViewState();
}
class _DoctorViewState extends State<DoctorView> with AutomaticKeepAliveClientMixin {
@override
Widget build(BuildContext context) {
projectViewModel = Provider.of(context);
super.build(context);
return InkWell(
onTap: () {
if (isObGyneAppointment) {
if (widget.isObGyneAppointment) {
next(context);
} else {
// if (doctor.clinicID == 17 && isDoctorNameSearch) {
// showDentalChiefComplaintsList(context);
// } else
if (isShowFlag) {
getDoctorsProfile(context, doctor, isAppo: true, isContinueDentalPlan: isContinueDentalPlan);
if (widget.isShowFlag) {
getDoctorsProfile(context, widget.doctor, isAppo: true, isContinueDentalPlan: widget.isContinueDentalPlan);
}
(onTap ?? () {})(); // For log analytics of doctor click from book appointment
(widget.onTap ?? () {})(); // For log analytics of doctor click from book appointment
}
},
child: Container(
@ -88,23 +92,23 @@ class DoctorView extends StatelessWidget {
children: [
Expanded(
child: Text(
doctor.name ?? "",
widget.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)),
widget.isShowDate ? Text(
DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(widget.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),
if (widget.doctor.doctorTitle != null) SizedBox(height: 6),
Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
LargeAvatar(
name: doctor.name ?? "",
url: doctor.doctorImageURL!,
name: widget.doctor.name ?? "",
url: widget.doctor.doctorImageURL!,
width: 48,
height: 48,
),
@ -114,17 +118,17 @@ class DoctorView extends StatelessWidget {
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)
if (widget.doctor.clinicName != null) MyRichText(TranslationBase.of(context).clinic + ":", widget.doctor.clinicName!, context.read<ProjectViewModel>().isArabic),
if (widget.doctor.projectName != null) MyRichText(TranslationBase.of(context).branch, widget.doctor.projectName!, context.read<ProjectViewModel>().isArabic),
if (widget.doctor.speciality != null && widget.doctor.speciality!.length > 0)
Text(
this.doctor.speciality![0].trim(),
this.widget.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)
if (widget.doctor.nearestFreeSlot != null)
Text(
getDate(doctor.nearestFreeSlot),
getDate(widget.doctor.nearestFreeSlot),
style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff359846), letterSpacing: -0.48, height: 18 / 12),
),
Row(
@ -161,7 +165,7 @@ class DoctorView extends StatelessWidget {
// filledIcon: Icons.star,
// emptyIcon: Icons.star_border,
// ),
if (isShowFlag)
if (widget.isShowFlag)
Icon(
Icons.arrow_forward,
color: Theme.of(context).primaryColor,
@ -183,13 +187,13 @@ class DoctorView extends StatelessWidget {
showDentalChiefComplaintsList(BuildContext context) {
HospitalsModel selectedHospital = new HospitalsModel();
selectedHospital.name = doctor.projectName;
selectedHospital.name = widget.doctor.projectName;
ListClinicCentralized selectedClinic = new ListClinicCentralized();
selectedClinic.clinicDescription = doctor.clinicName;
selectedClinic.clinicDescription = widget.doctor.clinicName;
SearchInfo searchInfo = new SearchInfo();
searchInfo.ProjectID = doctor.projectID;
searchInfo.ClinicID = doctor.clinicID;
searchInfo.ProjectID = widget.doctor.projectID;
searchInfo.ClinicID = widget.doctor.clinicID;
searchInfo.date = DateTime.now();
searchInfo.hospital = selectedHospital;
searchInfo.clinic = selectedClinic;
@ -213,7 +217,7 @@ class DoctorView extends StatelessWidget {
}
getDoctorsProfile(context, DoctorList docObject, {isAppo, bool isContinueDentalPlan = false}) {
int languageID = projectViewModel.isArabic ? 1 : 2;
int languageID = context.read<ProjectViewModel>().isArabic ? 1 : 2;
GifLoaderDialogUtils.showMyDialog(context);
List<DoctorProfileList> docProfileList = [];
DoctorsListService service = new DoctorsListService();
@ -261,7 +265,7 @@ class DoctorView extends StatelessWidget {
void next(BuildContext context) {
Navigator.push(context,
FadePage(page: ObGyneTimeSlots(projectID: doctor.projectID!, selectedClinicID: doctor.clinicID!, selectedDoctorID: doctor.doctorID!, obGyneProcedureListResponse: obGyneProcedureListResponse!)));
FadePage(page: ObGyneTimeSlots(projectID: widget.doctor.projectID!, selectedClinicID: widget.doctor.clinicID!, selectedDoctorID: widget.doctor.doctorID!, obGyneProcedureListResponse: widget.obGyneProcedureListResponse!)));
}
Future navigateToDoctorProfile(context, docObject, docProfile, {isAppo, bool isContinueDentalPlan = false}) async {
@ -270,13 +274,17 @@ class DoctorView extends StatelessWidget {
FadePage(
page: DoctorProfile(
doctor: docObject,
isLiveCareAppointment: isLiveCareAppointment!,
isLiveCareAppointment: widget.isLiveCareAppointment!,
docProfileList: docProfile,
isOpenAppt: isAppo,
isDoctorNameSearch: isDoctorNameSearch,
isDoctorNameSearch: widget.isDoctorNameSearch,
isContinueDentalPlan: isContinueDentalPlan,
),
),
);
}
@override
// TODO: implement wantKeepAlive
bool get wantKeepAlive => true;
}

@ -41,7 +41,6 @@ class AppExpandableNotifier extends StatefulWidget {
}
class _AppExpandableNotifier extends State<AppExpandableNotifier> {
late ProjectViewModel projectViewModel;
@override
void initState() {
@ -56,10 +55,9 @@ class _AppExpandableNotifier extends State<AppExpandableNotifier> {
@override
Widget build(BuildContext context) {
projectViewModel = Provider.of(context);
String _mainTitle = (widget.title ?? TranslationBase.of(context).details).trim();
String _title = _mainTitle.contains(" ") ? (projectViewModel.isArabic ? (_mainTitle.split(" ").length < 1 ? _mainTitle : _mainTitle.split(" ")[1]) : _mainTitle.split(" ")[0]) : _mainTitle;
String _title = _mainTitle.contains(" ") ? (context.read<ProjectViewModel>().isArabic ? (_mainTitle.split(" ").length < 1 ? _mainTitle : _mainTitle.split(" ")[1]) : _mainTitle.split(" ")[0]) : _mainTitle;
// String _title = _mainTitle.split(" ")[0];
String _subTitle = _mainTitle.replaceAll(_title, "").trim();

Loading…
Cancel
Save