Merge branch 'dev_v3.13.6' into dev_v_3.13.6_CR_6804

dev_v_3.13.6_CR_6804
haroon amjad 1 year ago
commit a39d2840e0

@ -670,10 +670,10 @@ var GET_DENTAL_INSTRUCTIONS = 'Services/OUTPs.svc/Rest/getProcedureNotification'
//PAYFORT //PAYFORT
var getPayFortProjectDetails = "Services/PayFort_Serv.svc/REST/GetPayFortProjectDetails"; var getPayFortProjectDetails = "Services/PayFort_Serv.svc/REST/GetPayFortProjectDetails";
var addPayFortApplePayResponse = "Services/PayFort_Serv.svc/REST/AddResponse"; var addPayFortApplePayResponse = "Services/PayFort_Serv.svc/REST/AddResponse";
var payFortEnvironment = FortEnvironment.production; // var payFortEnvironment = FortEnvironment.production;
var applePayMerchantId = "merchant.com.hmgwebservices"; // var applePayMerchantId = "merchant.com.hmgwebservices";
// var payFortEnvironment = FortEnvironment.test; var payFortEnvironment = FortEnvironment.test;
// var applePayMerchantId = "merchant.com.hmgwebservices.uat"; var applePayMerchantId = "merchant.com.hmgwebservices.uat";
class AppGlobal { class AppGlobal {
static var context; static var context;

@ -549,7 +549,7 @@ const Map localizedValues = {
"emergency": {"en": "Emergency", "ar": "الطوارئ"}, "emergency": {"en": "Emergency", "ar": "الطوارئ"},
"erservices": {"en": "Emergency", "ar": "الطوارئ"}, "erservices": {"en": "Emergency", "ar": "الطوارئ"},
"services2": {"en": "Services", "ar": "خدمات"}, "services2": {"en": "Services", "ar": "خدمات"},
"cantSeeProfile": {"en": "To view your medical profile, please log in or register now", "ar": "للتصفح ملفك الطبي الرجاء تسجيل الدخول أو التسجيل الآن"}, "cantSeeProfile": {"en": "To view your medical profile, please log in or register now", "ar": "لتصفح ملفك الطبي الرجاء تسجيل الدخول أو التسجيل الآن"},
"loginRegisterNow": {"en": "Login or Register Now", "ar": "تسجيل الدخول أو التسجيل الآن"}, "loginRegisterNow": {"en": "Login or Register Now", "ar": "تسجيل الدخول أو التسجيل الآن"},
"HMGPharmacy": {"en": "HMG Pharmacy", "ar": "صيدلية HMG"}, "HMGPharmacy": {"en": "HMG Pharmacy", "ar": "صيدلية HMG"},
"ecommerceSolution": {"en": "Ecommerce Solution", "ar": "حل التجارة الإلكترونية"}, "ecommerceSolution": {"en": "Ecommerce Solution", "ar": "حل التجارة الإلكترونية"},

@ -41,6 +41,7 @@ class DoctorList {
dynamic serviceID; dynamic serviceID;
String? setupID; String? setupID;
List<String>? speciality; List<String>? speciality;
List<String>? specialityN;
dynamic workingHours; dynamic workingHours;
dynamic decimalDoctorRate; dynamic decimalDoctorRate;
@ -87,6 +88,7 @@ class DoctorList {
this.serviceID, this.serviceID,
this.setupID, this.setupID,
this.speciality, this.speciality,
this.specialityN,
this.workingHours, this.workingHours,
this.decimalDoctorRate}); this.decimalDoctorRate});
@ -133,6 +135,7 @@ class DoctorList {
serviceID = json['ServiceID']; serviceID = json['ServiceID'];
setupID = json['SetupID']; setupID = json['SetupID'];
if (json.containsKey('Speciality') && json['Speciality'] != null) speciality = json['Speciality'].cast<String>(); if (json.containsKey('Speciality') && json['Speciality'] != null) speciality = json['Speciality'].cast<String>();
if (json.containsKey('SpecialityN') && json['SpecialityN'] != null) specialityN = json['SpecialityN'].cast<String>();
workingHours = json['WorkingHours']; workingHours = json['WorkingHours'];
decimalDoctorRate = json['DecimalDoctorRate']; decimalDoctorRate = json['DecimalDoctorRate'];
} }
@ -180,6 +183,7 @@ class DoctorList {
data['ServiceID'] = this.serviceID; data['ServiceID'] = this.serviceID;
data['SetupID'] = this.setupID; data['SetupID'] = this.setupID;
data['Speciality'] = this.speciality; data['Speciality'] = this.speciality;
data['SpecialityN'] = this.specialityN;
data['WorkingHours'] = this.workingHours; data['WorkingHours'] = this.workingHours;
data['DecimalDoctorRate'] = this.decimalDoctorRate; data['DecimalDoctorRate'] = this.decimalDoctorRate;
return data; return data;

@ -669,6 +669,7 @@ class _AnicllaryOrdersState extends State<AnicllaryOrdersDetails> with SingleTic
payfortProjectDetailsRespModel: payfortProjectDetailsRespModel, payfortProjectDetailsRespModel: payfortProjectDetailsRespModel,
currency: projectViewModel.user.outSA == 1 ? "AED" : "SAR", currency: projectViewModel.user.outSA == 1 ? "AED" : "SAR",
onFailed: (failureResult) async { onFailed: (failureResult) async {
GifLoaderDialogUtils.hideDialog(context);
log("failureResult: ${failureResult.toString()}"); log("failureResult: ${failureResult.toString()}");
AppToast.showErrorToast(message: failureResult.toString()); AppToast.showErrorToast(message: failureResult.toString());
}, },

@ -711,6 +711,7 @@ class _BookSuccessState extends State<BookSuccess> {
payfortProjectDetailsRespModel: payfortProjectDetailsRespModel, payfortProjectDetailsRespModel: payfortProjectDetailsRespModel,
currency: projectViewModel.user.outSA == 1 ? "AED" : "SAR", currency: projectViewModel.user.outSA == 1 ? "AED" : "SAR",
onFailed: (failureResult) async { onFailed: (failureResult) async {
GifLoaderDialogUtils.hideDialog(context);
log("failureResult: ${failureResult.toString()}"); log("failureResult: ${failureResult.toString()}");
AppToast.showErrorToast(message: failureResult.toString()); AppToast.showErrorToast(message: failureResult.toString());
}, },

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

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

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

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

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

@ -23,7 +23,7 @@ import 'package:provider/provider.dart';
import '../DoctorProfile.dart'; import '../DoctorProfile.dart';
class DoctorView extends StatelessWidget { class DoctorView extends StatefulWidget {
final DoctorList doctor; final DoctorList doctor;
bool? isLiveCareAppointment; bool? isLiveCareAppointment;
bool isObGyneAppointment; bool isObGyneAppointment;
@ -36,7 +36,7 @@ class DoctorView extends StatelessWidget {
DoctorView( DoctorView(
{required this.doctor, {required this.doctor,
this.isLiveCareAppointment, this.isLiveCareAppointment,
this.isObGyneAppointment = false, this.isObGyneAppointment = false,
this.isDoctorNameSearch = false, this.isDoctorNameSearch = false,
this.isContinueDentalPlan = false, this.isContinueDentalPlan = false,
@ -45,23 +45,29 @@ class DoctorView extends StatelessWidget {
this.onTap, this.onTap,
this.obGyneProcedureListResponse}); this.obGyneProcedureListResponse});
@override
State<DoctorView> createState() => _DoctorViewState();
}
class _DoctorViewState extends State<DoctorView> with AutomaticKeepAliveClientMixin {
late ProjectViewModel projectViewModel; late ProjectViewModel projectViewModel;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
projectViewModel = Provider.of(context); projectViewModel = Provider.of(context);
super.build(context);
return InkWell( return InkWell(
onTap: () { onTap: () {
if (isObGyneAppointment) { if (widget.isObGyneAppointment) {
next(context); next(context);
} else { } else {
// if (doctor.clinicID == 17 && isDoctorNameSearch) { // if (doctor.clinicID == 17 && isDoctorNameSearch) {
// showDentalChiefComplaintsList(context); // showDentalChiefComplaintsList(context);
// } else // } else
if (isShowFlag) { if (widget.isShowFlag) {
getDoctorsProfile(context, doctor, isAppo: true, isContinueDentalPlan: isContinueDentalPlan); 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( child: Container(
@ -88,23 +94,25 @@ class DoctorView extends StatelessWidget {
children: [ children: [
Expanded( Expanded(
child: Text( child: Text(
doctor.name ?? "", widget.doctor.name ?? "",
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.64, height: 25 / 16), style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.64, height: 25 / 16),
), ),
), ),
isShowDate ? Text( widget.isShowDate
DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(doctor.date)), ? Text(
style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.48, height: 18 / 12), DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(widget.doctor.date)),
) : Container(), 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( Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
LargeAvatar( LargeAvatar(
name: doctor.name ?? "", name: widget.doctor.name ?? "",
url: doctor.doctorImageURL!, url: widget.doctor.doctorImageURL!,
width: 48, width: 48,
height: 48, height: 48,
), ),
@ -114,17 +122,25 @@ class DoctorView extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
if (doctor.clinicName != null) MyRichText(TranslationBase.of(context).clinic + ":", doctor.clinicName!, projectViewModel.isArabic), if (widget.doctor.clinicName != null) MyRichText(TranslationBase.of(context).clinic + ":", widget.doctor.clinicName!, context.read<ProjectViewModel>().isArabic),
if (doctor.projectName != null) MyRichText(TranslationBase.of(context).branch, doctor.projectName!, projectViewModel.isArabic), if (widget.doctor.projectName != null) MyRichText(TranslationBase.of(context).branch, widget.doctor.projectName!, context.read<ProjectViewModel>().isArabic),
if (doctor.speciality != null && doctor.speciality!.length > 0) if (!projectViewModel.isArabic)
Text( if (widget.doctor.speciality != null && widget.doctor.speciality!.length > 0)
this.doctor.speciality![0].trim(), Text(
// getDoctorSpeciality(this.doctor.speciality).trim(), this.widget.doctor.speciality![0].trim(),
style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.48, height: 18 / 12), // 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 (projectViewModel.isArabic)
if (widget.doctor.specialityN != null && widget.doctor.specialityN!.length > 0)
Text(
this.widget.doctor.specialityN![0].trim(),
// getDoctorSpeciality(this.doctor.speciality).trim(),
style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.48, height: 18 / 12),
),
if (widget.doctor.nearestFreeSlot != null)
Text( Text(
getDate(doctor.nearestFreeSlot), getDate(widget.doctor.nearestFreeSlot),
style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff359846), letterSpacing: -0.48, height: 18 / 12), style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff359846), letterSpacing: -0.48, height: 18 / 12),
), ),
Row( Row(
@ -140,9 +156,18 @@ class DoctorView extends StatelessWidget {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star, color: CustomColors.accentColor,), full: Icon(
half: Icon(Icons.star_half, color: CustomColors.accentColor,), Icons.star,
empty: Icon(Icons.star, color: CustomColors.accentColor,), color: CustomColors.accentColor,
),
half: Icon(
Icons.star_half,
color: CustomColors.accentColor,
),
empty: Icon(
Icons.star,
color: CustomColors.accentColor,
),
), ),
tapOnlyMode: true, tapOnlyMode: true,
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
@ -161,7 +186,7 @@ class DoctorView extends StatelessWidget {
// filledIcon: Icons.star, // filledIcon: Icons.star,
// emptyIcon: Icons.star_border, // emptyIcon: Icons.star_border,
// ), // ),
if (isShowFlag) if (widget.isShowFlag)
Icon( Icon(
Icons.arrow_forward, Icons.arrow_forward,
color: Theme.of(context).primaryColor, color: Theme.of(context).primaryColor,
@ -183,13 +208,13 @@ class DoctorView extends StatelessWidget {
showDentalChiefComplaintsList(BuildContext context) { showDentalChiefComplaintsList(BuildContext context) {
HospitalsModel selectedHospital = new HospitalsModel(); HospitalsModel selectedHospital = new HospitalsModel();
selectedHospital.name = doctor.projectName; selectedHospital.name = widget.doctor.projectName;
ListClinicCentralized selectedClinic = new ListClinicCentralized(); ListClinicCentralized selectedClinic = new ListClinicCentralized();
selectedClinic.clinicDescription = doctor.clinicName; selectedClinic.clinicDescription = widget.doctor.clinicName;
SearchInfo searchInfo = new SearchInfo(); SearchInfo searchInfo = new SearchInfo();
searchInfo.ProjectID = doctor.projectID; searchInfo.ProjectID = widget.doctor.projectID;
searchInfo.ClinicID = doctor.clinicID; searchInfo.ClinicID = widget.doctor.clinicID;
searchInfo.date = DateTime.now(); searchInfo.date = DateTime.now();
searchInfo.hospital = selectedHospital; searchInfo.hospital = selectedHospital;
searchInfo.clinic = selectedClinic; searchInfo.clinic = selectedClinic;
@ -260,8 +285,14 @@ class DoctorView extends StatelessWidget {
} }
void next(BuildContext context) { void next(BuildContext context) {
Navigator.push(context, Navigator.push(
FadePage(page: ObGyneTimeSlots(projectID: doctor.projectID!, selectedClinicID: doctor.clinicID!, selectedDoctorID: doctor.doctorID!, obGyneProcedureListResponse: obGyneProcedureListResponse!))); context,
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 { Future navigateToDoctorProfile(context, docObject, docProfile, {isAppo, bool isContinueDentalPlan = false}) async {
@ -270,13 +301,17 @@ class DoctorView extends StatelessWidget {
FadePage( FadePage(
page: DoctorProfile( page: DoctorProfile(
doctor: docObject, doctor: docObject,
isLiveCareAppointment: isLiveCareAppointment!, isLiveCareAppointment: widget.isLiveCareAppointment!,
docProfileList: docProfile, docProfileList: docProfile,
isOpenAppt: isAppo, isOpenAppt: isAppo,
isDoctorNameSearch: isDoctorNameSearch, isDoctorNameSearch: widget.isDoctorNameSearch,
isContinueDentalPlan: isContinueDentalPlan, isContinueDentalPlan: isContinueDentalPlan,
), ),
), ),
); );
} }
@override
// TODO: implement wantKeepAlive
bool get wantKeepAlive => true;
} }

@ -1445,6 +1445,7 @@ class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin {
payfortProjectDetailsRespModel: payfortProjectDetailsRespModel, payfortProjectDetailsRespModel: payfortProjectDetailsRespModel,
currency: projectViewModel.user.outSA == 1 ? "AED" : "SAR", currency: projectViewModel.user.outSA == 1 ? "AED" : "SAR",
onFailed: (failureResult) async { onFailed: (failureResult) async {
GifLoaderDialogUtils.hideDialog(context);
log("failureResult: ${failureResult.toString()}"); log("failureResult: ${failureResult.toString()}");
AppToast.showErrorToast(message: failureResult.toString()); AppToast.showErrorToast(message: failureResult.toString());
}, },

@ -329,6 +329,7 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
payfortProjectDetailsRespModel: payfortProjectDetailsRespModel, payfortProjectDetailsRespModel: payfortProjectDetailsRespModel,
currency: projectViewModel.authenticatedUserObject.user.outSA == 1 ? "AED" : "SAR", currency: projectViewModel.authenticatedUserObject.user.outSA == 1 ? "AED" : "SAR",
onFailed: (failureResult) async { onFailed: (failureResult) async {
GifLoaderDialogUtils.hideDialog(context);
log("failureResult: ${failureResult.toString()}"); log("failureResult: ${failureResult.toString()}");
AppToast.showErrorToast(message: failureResult.toString()); AppToast.showErrorToast(message: failureResult.toString());
}, },

@ -95,7 +95,7 @@ class _RateAppointmentClinicState extends State<RateAppointmentClinic> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
MyRichText(TranslationBase.of(context).clinic + ":", model.appointmentDetails.projectName, projectViewModel.isArabic), MyRichText(TranslationBase.of(context).clinic + ":", model.appointmentDetails.projectName ?? "", projectViewModel.isArabic),
MyRichText(TranslationBase.of(context).date + ":", DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(model.appointmentDetails.appointmentDate)), MyRichText(TranslationBase.of(context).date + ":", DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(model.appointmentDetails.appointmentDate)),
projectViewModel.isArabic), projectViewModel.isArabic),
], ],

@ -176,6 +176,7 @@ class PayfortService extends BaseService {
merchantReference: merchantReference!, merchantReference: merchantReference!,
currency: currency, currency: currency,
customerIp: (await _info.getWifiIP() ?? ''), customerIp: (await _info.getWifiIP() ?? ''),
language: 'en'
); );
_payfort.callPayFortForApplePay( _payfort.callPayFortForApplePay(

@ -38,9 +38,9 @@ class MyInAppBrowser extends InAppBrowser {
static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL LIVE static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL LIVE
// static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL UAT // static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL UAT
// static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT
static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE // static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE
// static String SERVICE_URL = 'https://uat.hmgwebservices.com/payfortforvidaplus/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL UAT VIDA PLUS // static String SERVICE_URL = 'https://uat.hmgwebservices.com/payfortforvidaplus/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL UAT VIDA PLUS

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

Loading…
Cancel
Save