new ui integrated.
parent
d4c741e1ec
commit
ae4c287af2
@ -0,0 +1,76 @@
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ResultByDoctor extends StatelessWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
List<DoctorList>? patientDoctorAppointmentListHospital;
|
||||
Function(int) onDoctorSelected;
|
||||
final bool isLiveCareAppointment;
|
||||
final bool isObGyneAppointment;
|
||||
final bool isDoctorNameSearch;
|
||||
final bool isDoctorSearchResult;
|
||||
final OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
ResultByDoctor(
|
||||
{required this.doctorsList,
|
||||
required this.patientDoctorAppointmentListHospital,
|
||||
required this.onDoctorSelected,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isObGyneAppointment,
|
||||
required this.isDoctorNameSearch,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
child: patientDoctorAppointmentListHospital?.isNotEmpty ==
|
||||
true
|
||||
? ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
physics: BouncingScrollPhysics(),
|
||||
separatorBuilder: (context, index) {
|
||||
return Material(
|
||||
color: Color(0xFFf5f5f5),
|
||||
child: SizedBox(
|
||||
height: 12,
|
||||
),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
final doctor = patientDoctorAppointmentListHospital![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);
|
||||
});
|
||||
|
||||
},
|
||||
itemCount: patientDoctorAppointmentListHospital?.length ??
|
||||
0,
|
||||
)
|
||||
: getNoDataWidget(context),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,124 @@
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
typedef OnFacilitySelected = Function(bool);
|
||||
|
||||
class ResultByFacility extends StatelessWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
String selectedRegion = '';
|
||||
RegionList patientDoctorAppointmentListHospital;
|
||||
OnFacilitySelected onFacilitySelected;
|
||||
|
||||
ResultByFacility(
|
||||
{required this.doctorsList,
|
||||
required this.patientDoctorAppointmentListHospital,
|
||||
required this.onFacilitySelected,
|
||||
required this.selectedRegion});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
HospitalTitle(
|
||||
iconUrl: 'assets/images/svg/HMG.svg',
|
||||
title: TranslationBase.of(context).hmgHospital,
|
||||
isHMC: false,
|
||||
itemCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
nearest: patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgDistance
|
||||
|
||||
),
|
||||
SizedBox(height: 16,),
|
||||
HospitalTitle(
|
||||
iconUrl: 'assets/images/svg/HMC.svg',
|
||||
title: TranslationBase.of(context).hmcHospital,
|
||||
isHMC: true,
|
||||
itemCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
nearest: patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcDistance
|
||||
)
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String iconUrl;
|
||||
final bool isHMC;
|
||||
final num? nearest;
|
||||
final String itemCount;
|
||||
|
||||
const HospitalTitle(
|
||||
{super.key,
|
||||
required this.title,
|
||||
required this.iconUrl,
|
||||
required this.isHMC,
|
||||
required this.itemCount,this.nearest});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(iconUrl),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
color: isHMC ? Color(0xFF40ACC9) : Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 6,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
isHMC
|
||||
? "${TranslationBase.of(context).hmcHospitalCount.replaceAll("@", itemCount)}"
|
||||
: "${TranslationBase.of(context).hmgHospitalCount.replaceAll("@", itemCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 12, color: Colors.black, fontWeight: FontWeight.w600),
|
||||
),
|
||||
|
||||
Visibility(
|
||||
visible: nearest != double.infinity,
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(width: 8,),
|
||||
Icon(Icons.location_on, color: Colors.black,),
|
||||
SizedBox(width: 8,),
|
||||
Text(
|
||||
"${TranslationBase.of(context).nearest}: $nearest",
|
||||
style: TextStyle(
|
||||
fontSize: 12, color: Colors.black, fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,225 @@
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
typedef OnHospitalSelected = Function(String, int);
|
||||
|
||||
class ResultByHospital extends StatelessWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
List<PatientDoctorAppointmentList>? paitientDoctorAppointmentList;
|
||||
bool isHMCSelected;
|
||||
|
||||
bool isLiveCareAppointment;
|
||||
bool isObGyneAppointment;
|
||||
bool isDoctorNameSearch;
|
||||
OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
bool isDoctorSearchResult;
|
||||
OnHospitalSelected onHospitalSelected;
|
||||
|
||||
ResultByHospital(
|
||||
{required this.doctorsList,
|
||||
required this.paitientDoctorAppointmentList,
|
||||
required this.isHMCSelected,
|
||||
this.isObGyneAppointment = false,
|
||||
this.isDoctorNameSearch = false,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
required this.onHospitalSelected});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: HospitalBodyWidget(
|
||||
patientDoctorAppointmentListHospital: paitientDoctorAppointmentList,
|
||||
isLiveCareAppointment: isLiveCareAppointment,
|
||||
isObGyneAppointment: isObGyneAppointment,
|
||||
isDoctorNameSearch: isDoctorNameSearch,
|
||||
isDoctorSearchResult: isDoctorSearchResult,
|
||||
onHospitalSelected: onHospitalSelected,
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalBodyWidget extends StatelessWidget {
|
||||
final List<PatientDoctorAppointmentList>?
|
||||
patientDoctorAppointmentListHospital;
|
||||
final bool isLiveCareAppointment;
|
||||
final bool isObGyneAppointment;
|
||||
final bool isDoctorNameSearch;
|
||||
final bool isDoctorSearchResult;
|
||||
final OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
final OnHospitalSelected onHospitalSelected;
|
||||
|
||||
const HospitalBodyWidget(
|
||||
{super.key,
|
||||
this.patientDoctorAppointmentListHospital,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isObGyneAppointment,
|
||||
required this.isDoctorNameSearch,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
required this.onHospitalSelected});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemCount: patientDoctorAppointmentListHospital?.length ?? 0,
|
||||
separatorBuilder: (context, index) {
|
||||
return Container(
|
||||
height: 12,
|
||||
margin: EdgeInsets.only(left: 21, right: 21),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
onHospitalSelected(
|
||||
patientDoctorAppointmentListHospital![index].filterName ?? '',
|
||||
index);
|
||||
},
|
||||
child: Material(
|
||||
color: CustomColors.white,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
patientDoctorAppointmentListHospital![index]
|
||||
.filterName ??
|
||||
'',
|
||||
style: TextStyle(
|
||||
fontSize: 22,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w700),
|
||||
),
|
||||
SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Visibility(
|
||||
visible:
|
||||
(patientDoctorAppointmentListHospital?[index]
|
||||
.distanceInKMs !=
|
||||
"0"),
|
||||
child: Row(
|
||||
children: [
|
||||
Icon(
|
||||
Icons.location_on,
|
||||
color: Colors.black,
|
||||
),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
"${TranslationBase.of(context).nearest}: ${patientDoctorAppointmentListHospital?[index].distanceInKMs}",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.all(8),
|
||||
child: Center(
|
||||
child: Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
color: CustomColors.black,
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)),
|
||||
),
|
||||
);
|
||||
// return AppExpandableNotifier(
|
||||
// applyBackgroundColor: false,
|
||||
// widgetColor: CustomColors.appBackgroudGrey2Color,
|
||||
// title: (patientDoctorAppointmentListHospital?[index].distanceInKMs !=
|
||||
// "0")
|
||||
// ? patientDoctorAppointmentListHospital![index].filterName! +
|
||||
// " - " +
|
||||
// patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
// " " +
|
||||
// TranslationBase.of(context).km
|
||||
// : patientDoctorAppointmentListHospital![index].filterName,
|
||||
// projectTitleTop:
|
||||
// patientDoctorAppointmentListHospital![index].projectTopName,
|
||||
// projectTitleBottom: (patientDoctorAppointmentListHospital![index]
|
||||
// .distanceInKMs !=
|
||||
// "0")
|
||||
// ? patientDoctorAppointmentListHospital![index]
|
||||
// .projectBottomName
|
||||
// .toString() +
|
||||
// " - " +
|
||||
// patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
// " " +
|
||||
// TranslationBase.of(context).km
|
||||
// : patientDoctorAppointmentListHospital![index]
|
||||
// .projectBottomName
|
||||
// .toString(),
|
||||
// isTitleSingleLine: false,
|
||||
// isDoctorSearchResult: isDoctorSearchResult,
|
||||
// isDisabled: true,
|
||||
// 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) {
|
||||
// // // print("the index of patientDoctorAppointmentList is ${_index}");
|
||||
// // // print("the index of parent is ${index}");
|
||||
// // final doctor = patientDoctorAppointmentListHospital![index]
|
||||
// // .patientDoctorAppointmentList![_index];
|
||||
// // // print('the doctor is ${doctor.toJson()}');
|
||||
// // 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 ?? 0),
|
||||
// );
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,145 @@
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
typedef OnRegionSelected = Function(String);
|
||||
class ResultByRegion extends StatelessWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
RegionList patientDoctorAppointmentListHospital;
|
||||
OnRegionSelected onRegionSelected;
|
||||
ResultByRegion(
|
||||
{required this.doctorsList,
|
||||
required this.patientDoctorAppointmentListHospital,
|
||||
required this.onRegionSelected
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.isNotEmpty ==
|
||||
true
|
||||
? ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
physics: BouncingScrollPhysics(),
|
||||
separatorBuilder: (context, index) {
|
||||
return Material(
|
||||
color: Color(0xFFf5f5f5),
|
||||
child: SizedBox(
|
||||
height: 12,
|
||||
),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
String key = patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.keys
|
||||
.toList()[index] ??
|
||||
'';
|
||||
|
||||
return InkWell(
|
||||
onTap: (){
|
||||
onRegionSelected(key);
|
||||
},
|
||||
child: RegionTitle(
|
||||
title: key,
|
||||
hmcCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
hmgCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
),
|
||||
);
|
||||
|
||||
},
|
||||
itemCount: patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.length ??
|
||||
0,
|
||||
)
|
||||
: getNoDataWidget(context),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class RegionTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String hmcCount;
|
||||
final String hmgCount;
|
||||
|
||||
const RegionTitle(
|
||||
{super.key,
|
||||
required this.title,
|
||||
required this.hmcCount,
|
||||
required this.hmgCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
color: CustomColors.white,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 22, color: Colors.black, fontWeight: FontWeight.w700),
|
||||
),
|
||||
SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
"${TranslationBase.of(context).hmgHospitalCount.replaceAll("@", hmgCount)} ,",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
"${TranslationBase.of(context).hmcHospitalCount.replaceAll("@", hmcCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFF40ACC9),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.all(8),
|
||||
child: Center(
|
||||
child: Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
color: CustomColors.black,
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,590 @@
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByFacility.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByHospital.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByRegion.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class SearchResultWithTab extends StatefulWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
RegionList patientDoctorAppointmentListHospital;
|
||||
bool isLiveCareAppointment;
|
||||
bool isObGyneAppointment;
|
||||
bool isDoctorNameSearch;
|
||||
OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
bool isDoctorSearchResult;
|
||||
|
||||
SearchResultWithTab({required this.doctorsList,
|
||||
required this.patientDoctorAppointmentListHospital,
|
||||
this.isObGyneAppointment = false,
|
||||
this.isDoctorNameSearch = false,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse});
|
||||
|
||||
@override
|
||||
State<SearchResultWithTab> createState() => _SearchResultWithTabState();
|
||||
}
|
||||
|
||||
class _SearchResultWithTabState extends State<SearchResultWithTab> {
|
||||
int _currentIndex = 0;
|
||||
late PageController _controller;
|
||||
String selectedRegion = "";
|
||||
bool isHMCSelected = false;
|
||||
int selectedHospitalIndex = -1;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_controller = new PageController();
|
||||
}
|
||||
|
||||
changePageViewIndex(pageIndex) {
|
||||
_controller.jumpToPage(pageIndex);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppScaffold(
|
||||
appBarTitle: getTitle(),
|
||||
isShowDecPage: false,
|
||||
isShowAppBar: true,
|
||||
showNewAppBarTitle: true,
|
||||
showNewAppBar: true,
|
||||
backgroundColor: CustomColors.appBackgroudGrey2Color,
|
||||
body: widget.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.isNotEmpty ==
|
||||
true
|
||||
? SingleChildScrollView(
|
||||
child: Column(children: <Widget>[
|
||||
Container(
|
||||
width: double.infinity,
|
||||
padding: EdgeInsets.only(left: 20, right: 20, top: 12),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: showProgress(
|
||||
title: TranslationBase
|
||||
.of(context)
|
||||
.selectRegion,
|
||||
status: _currentIndex == 0
|
||||
? TranslationBase
|
||||
.of(context)
|
||||
.inPrgress
|
||||
: _currentIndex > 0
|
||||
? TranslationBase
|
||||
.of(context)
|
||||
.completed
|
||||
: TranslationBase
|
||||
.of(context)
|
||||
.locked,
|
||||
color: _currentIndex == 0
|
||||
? CustomColors.orange
|
||||
: CustomColors.green,
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: showProgress(
|
||||
title: TranslationBase
|
||||
.of(context)
|
||||
.selectFacitlity,
|
||||
status: _currentIndex == 1
|
||||
? TranslationBase
|
||||
.of(context)
|
||||
.inPrgress
|
||||
: _currentIndex > 1
|
||||
? TranslationBase
|
||||
.of(context)
|
||||
.completed
|
||||
: TranslationBase
|
||||
.of(context)
|
||||
.locked,
|
||||
color: _currentIndex == 1
|
||||
? CustomColors.orange
|
||||
: _currentIndex > 1
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
),
|
||||
),
|
||||
showProgress(
|
||||
title: TranslationBase
|
||||
.of(context)
|
||||
.selectBranch,
|
||||
status: _currentIndex == 2 ? TranslationBase
|
||||
.of(context)
|
||||
.inPrgress : TranslationBase
|
||||
.of(context)
|
||||
.locked,
|
||||
color: _currentIndex == 2
|
||||
? CustomColors.orange
|
||||
: _currentIndex > 3
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
isNeedBorder: false,
|
||||
),
|
||||
showProgress(
|
||||
title: TranslationBase
|
||||
.of(context)
|
||||
.selectDoctor,
|
||||
status: _currentIndex == 3 ? TranslationBase
|
||||
.of(context)
|
||||
.inPrgress : TranslationBase
|
||||
.of(context)
|
||||
.locked,
|
||||
color: _currentIndex == 3
|
||||
? CustomColors.orange
|
||||
: _currentIndex > 4
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
isNeedBorder: false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: PageView(
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
controller: _controller,
|
||||
onPageChanged: (index) {
|
||||
setState(() {
|
||||
_currentIndex = index;
|
||||
});
|
||||
},
|
||||
scrollDirection: Axis.horizontal,
|
||||
children: <Widget>[
|
||||
ResultByRegion(doctorsList: widget.doctorsList,
|
||||
patientDoctorAppointmentListHospital: widget
|
||||
.patientDoctorAppointmentListHospital,
|
||||
onRegionSelected: (key) {
|
||||
setState(() {
|
||||
selectedRegion = key;
|
||||
});
|
||||
}),
|
||||
(selectedRegion != "")
|
||||
?
|
||||
ResultByFacility(doctorsList: widget.doctorsList,
|
||||
patientDoctorAppointmentListHospital: widget
|
||||
.patientDoctorAppointmentListHospital,
|
||||
selectedRegion: selectedRegion,
|
||||
onFacilitySelected: (isHMCSelected) {
|
||||
setState(() {
|
||||
isHMCSelected = isHMCSelected;
|
||||
});
|
||||
},
|
||||
|
||||
) : SizedBox.shrink(),
|
||||
(selectedRegion != '') ?
|
||||
ResultByHospital(doctorsList: widget.doctorsList,
|
||||
paitientDoctorAppointmentList: (isHMCSelected)?
|
||||
widget.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap![selectedRegion]!.hmgDoctorList ?? []
|
||||
: widget.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[selectedRegion]?.hmgDoctorList ?? [],
|
||||
isHMCSelected: isHMCSelected,
|
||||
isLiveCareAppointment: widget.isLiveCareAppointment,
|
||||
isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
onHospitalSelected: (hospital,index) {
|
||||
setState(() {
|
||||
selectedHospitalIndex = index;
|
||||
});
|
||||
}): SizedBox.shrink(),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
]))
|
||||
: getNoDataWidget(context),);
|
||||
}
|
||||
|
||||
String getTitle() {
|
||||
switch (_currentIndex) {
|
||||
case 0:
|
||||
return TranslationBase
|
||||
.of(context)
|
||||
.selectRegion;
|
||||
case 1:
|
||||
return TranslationBase
|
||||
.of(context)
|
||||
.selectFacitlity;
|
||||
case 2:
|
||||
return TranslationBase
|
||||
.of(context)
|
||||
.selectBranch;
|
||||
case 3:
|
||||
return TranslationBase
|
||||
.of(context)
|
||||
.selectDoctor;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
Widget showProgress(
|
||||
{String? title, String? status, Color? color, bool isNeedBorder = true}) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
if (status == TranslationBase
|
||||
.of(context)
|
||||
.completed) {
|
||||
changePageViewIndex(_currentIndex);
|
||||
}
|
||||
},
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Container(
|
||||
width: 26,
|
||||
height: 26,
|
||||
decoration: containerRadius(color!, 200),
|
||||
child: Icon(
|
||||
Icons.done,
|
||||
color: Colors.white,
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
if (isNeedBorder)
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: mDivider(Colors.grey),
|
||||
)),
|
||||
],
|
||||
),
|
||||
mHeight(8),
|
||||
Text(
|
||||
title!,
|
||||
style: TextStyle(
|
||||
fontSize: 11,
|
||||
fontWeight: FontWeight.w600,
|
||||
letterSpacing: -0.44,
|
||||
),
|
||||
),
|
||||
mHeight(2),
|
||||
Container(
|
||||
padding: EdgeInsets.all(5),
|
||||
decoration: containerRadius(color!.withOpacity(0.2), 4),
|
||||
child: Text(
|
||||
status!,
|
||||
style: TextStyle(
|
||||
fontSize: 8,
|
||||
fontWeight: FontWeight.w600,
|
||||
letterSpacing: -0.32,
|
||||
color: color,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalBodyWidget extends StatelessWidget {
|
||||
final List<PatientDoctorAppointmentList>?
|
||||
patientDoctorAppointmentListHospital;
|
||||
final bool isLiveCareAppointment;
|
||||
final bool isObGyneAppointment;
|
||||
final bool isDoctorNameSearch;
|
||||
final bool isDoctorSearchResult;
|
||||
final OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
|
||||
const HospitalBodyWidget({
|
||||
super.key,
|
||||
this.patientDoctorAppointmentListHospital,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isObGyneAppointment,
|
||||
required this.isDoctorNameSearch,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemCount: patientDoctorAppointmentListHospital?.length ?? 0,
|
||||
separatorBuilder: (context, index) {
|
||||
return Container(
|
||||
height: 12,
|
||||
margin: EdgeInsets.only(left: 21, right: 21),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
return AppExpandableNotifier(
|
||||
applyBackgroundColor: false,
|
||||
widgetColor: CustomColors.appBackgroudGrey2Color,
|
||||
title: (patientDoctorAppointmentListHospital?[index].distanceInKMs !=
|
||||
"0")
|
||||
? patientDoctorAppointmentListHospital![index].filterName! +
|
||||
" - " +
|
||||
patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
" " +
|
||||
TranslationBase
|
||||
.of(context)
|
||||
.km
|
||||
: patientDoctorAppointmentListHospital![index].filterName,
|
||||
projectTitleTop:
|
||||
patientDoctorAppointmentListHospital![index].projectTopName,
|
||||
projectTitleBottom: (patientDoctorAppointmentListHospital![index]
|
||||
.distanceInKMs !=
|
||||
"0")
|
||||
? patientDoctorAppointmentListHospital![index]
|
||||
.projectBottomName
|
||||
.toString() +
|
||||
" - " +
|
||||
patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
" " +
|
||||
TranslationBase
|
||||
.of(context)
|
||||
.km
|
||||
: patientDoctorAppointmentListHospital![index]
|
||||
.projectBottomName
|
||||
.toString(),
|
||||
isTitleSingleLine: false,
|
||||
isDoctorSearchResult: isDoctorSearchResult,
|
||||
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) {
|
||||
// print("the index of patientDoctorAppointmentList is ${_index}");
|
||||
// print("the index of parent is ${index}");
|
||||
final doctor = patientDoctorAppointmentListHospital![index]
|
||||
.patientDoctorAppointmentList![_index];
|
||||
// print('the doctor is ${doctor.toJson()}');
|
||||
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 ?? 0),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class RegionTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String hmcCount;
|
||||
final String hmgCount;
|
||||
|
||||
const RegionTitle({super.key,
|
||||
required this.title,
|
||||
required this.hmcCount,
|
||||
required this.hmgCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 22, color: Colors.black, fontWeight: FontWeight.w700),
|
||||
),
|
||||
SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
"${TranslationBase
|
||||
.of(context)
|
||||
.hmgHospitalCount
|
||||
.replaceAll("@", hmgCount)} ,",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
"${TranslationBase
|
||||
.of(context)
|
||||
.hmcHospitalCount
|
||||
.replaceAll("@", hmcCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFF40ACC9),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String iconUrl;
|
||||
final bool isHMC;
|
||||
final String itemCount;
|
||||
|
||||
const HospitalTitle({super.key,
|
||||
required this.title,
|
||||
required this.iconUrl,
|
||||
required this.isHMC,
|
||||
required this.itemCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(iconUrl),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
color: isHMC ? Color(0xFF40ACC9) : Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 6,
|
||||
),
|
||||
Text(
|
||||
isHMC
|
||||
? "${TranslationBase
|
||||
.of(context)
|
||||
.hmcHospitalCount
|
||||
.replaceAll("@", itemCount)}"
|
||||
: "${TranslationBase
|
||||
.of(context)
|
||||
.hmgHospitalCount
|
||||
.replaceAll("@", itemCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 12, color: Colors.black, fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///todo the current content of the application
|
||||
/// return AppExpandableNotifier(
|
||||
// paddingValue: 10,
|
||||
// applyBackgroundToOnlyHeader: true,
|
||||
// completeHeaderColor: CustomColors.appBackgroudGrey2Color,
|
||||
// headerWidget: RegionTitle(
|
||||
// title: key,
|
||||
// hmcCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
// hmgCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
// ),
|
||||
// showDropDownIconWithCustomHeader: true,
|
||||
// isTitleSingleLine: false,
|
||||
// isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
// widgetColor: Color(0xFFF8F8F8),
|
||||
// bodyWidget: Column(
|
||||
// children: [
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.all(8.0),
|
||||
// child: AppExpandableNotifier(
|
||||
// paddingValue: 8,
|
||||
// applyBackgroundColor: false,
|
||||
// applyBackgroundToOnlyHeader: true,
|
||||
// completeHeaderColor: Colors.white,
|
||||
// headerRadius: BorderRadius.circular(16),
|
||||
// headerWidget: HospitalTitle(
|
||||
// iconUrl: 'assets/images/svg/HMG.svg',
|
||||
// title: TranslationBase.of(context).hmgHospital,
|
||||
// isHMC: false,
|
||||
// itemCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
// ),
|
||||
// showDropDownIconWithCustomHeader: true,
|
||||
// bodyWidget: HospitalBodyWidget(
|
||||
// patientDoctorAppointmentListHospital:
|
||||
// widget.patientDoctorAppointmentListHospital
|
||||
// .registeredDoctorMap?[key]?.hmgDoctorList,
|
||||
// isLiveCareAppointment: widget.isLiveCareAppointment,
|
||||
// isObGyneAppointment: widget.isObGyneAppointment,
|
||||
// isDoctorNameSearch: widget.isDoctorNameSearch,
|
||||
// isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.only(
|
||||
// bottom: 8.0, left: 8, right: 8),
|
||||
// child: AppExpandableNotifier(
|
||||
// paddingValue: 8,
|
||||
// applyBackgroundColor: false,
|
||||
// applyBackgroundToOnlyHeader: true,
|
||||
// completeHeaderColor: Colors.white,
|
||||
// headerRadius: BorderRadius.circular(16),
|
||||
// headerWidget: HospitalTitle(
|
||||
// iconUrl: 'assets/images/svg/HMC.svg',
|
||||
// title: TranslationBase.of(context).hmcHospital,
|
||||
// isHMC: true,
|
||||
// itemCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
// ),
|
||||
// showDropDownIconWithCustomHeader: true,
|
||||
// bodyWidget: HospitalBodyWidget(
|
||||
// patientDoctorAppointmentListHospital:
|
||||
// widget.patientDoctorAppointmentListHospital
|
||||
// .registeredDoctorMap?[key]?.hmcDoctorList,
|
||||
// isLiveCareAppointment: widget.isLiveCareAppointment,
|
||||
// isObGyneAppointment: widget.isObGyneAppointment,
|
||||
// isDoctorNameSearch: widget.isDoctorNameSearch,
|
||||
// isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ));
|
||||
Loading…
Reference in New Issue