Compare commits

..

6 Commits

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="120" height="120" fill="#EFF1F3"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M33.2503 38.4816C33.2603 37.0472 34.4199 35.8864 35.8543 35.875H83.1463C84.5848 35.875 85.7503 37.0431 85.7503 38.4816V80.5184C85.7403 81.9528 84.5807 83.1136 83.1463 83.125H35.8543C34.4158 83.1236 33.2503 81.957 33.2503 80.5184V38.4816ZM80.5006 41.1251H38.5006V77.8751L62.8921 53.4783C63.9172 52.4536 65.5788 52.4536 66.6039 53.4783L80.5006 67.4013V41.1251ZM43.75 51.6249C43.75 54.5244 46.1005 56.8749 49 56.8749C51.8995 56.8749 54.25 54.5244 54.25 51.6249C54.25 48.7254 51.8995 46.3749 49 46.3749C46.1005 46.3749 43.75 48.7254 43.75 51.6249Z" fill="#687787"/>
</svg>

After

Width:  |  Height:  |  Size: 892 B

@ -400,6 +400,7 @@ class AppAssets {
static const String descriptionIcon = '$svgBasePath/description_icon.svg'; static const String descriptionIcon = '$svgBasePath/description_icon.svg';
static const String selectImageIcon = '$svgBasePath/select_image_icon.svg'; static const String selectImageIcon = '$svgBasePath/select_image_icon.svg';
static const String patientQRCodeIcon = '$svgBasePath/patient_qr_code_icon.svg'; static const String patientQRCodeIcon = '$svgBasePath/patient_qr_code_icon.svg';
static const String noImageFound = '$svgBasePath/no_image_found.svg';
// PNGS // // PNGS //
static const String hmgLogo = '$pngBasePath/hmg_logo.png'; static const String hmgLogo = '$pngBasePath/hmg_logo.png';

@ -851,7 +851,7 @@ class Utils {
/// Widget to build an image from network - automatically preserves colors in visual modes /// Widget to build an image from network - automatically preserves colors in visual modes
static Widget buildImgWithNetwork({ static Widget buildImgWithNetwork({
required String url, required String? url,
required Color iconColor, required Color iconColor,
bool isDisabled = false, bool isDisabled = false,
double? width, double? width,
@ -859,6 +859,13 @@ class Utils {
BoxFit fit = BoxFit.cover, BoxFit fit = BoxFit.cover,
ImageErrorWidgetBuilder? errorBuilder, ImageErrorWidgetBuilder? errorBuilder,
}) { }) {
if (url == null || url.isEmpty) {
return Utils.buildSvgWithAssets(
width: width ?? 24.w,
height: height ?? 24.h,
icon: AppAssets.noImageFound,
);
}
final iconH = height ?? 24.h; final iconH = height ?? 24.h;
final iconW = width ?? 24.w; final iconW = width ?? 24.w;
return PreserveImageColors( return PreserveImageColors(
@ -870,7 +877,7 @@ class Utils {
errorBuilder: errorBuilder ?? errorBuilder: errorBuilder ??
(_, __, ___) { (_, __, ___) {
//todo_section change the error builder icon that it is returning //todo_section change the error builder icon that it is returning
return Utils.buildSvgWithAssets(width: iconW, height: iconH, icon: AppAssets.no_visit_icon); return Utils.buildSvgWithAssets(width: iconW, height: iconH, icon: AppAssets.noImageFound);
}, },
), ),
); );

@ -824,7 +824,11 @@ class AuthenticationViewModel extends ChangeNotifier {
onSuccess: (dynamic respData) async { onSuccess: (dynamic respData) async {
try { try {
if (respData != null) { if (respData != null) {
dynamic data = await SelectDeviceByImeiRespModelElement.fromJson(respData.toJson()); SelectDeviceByImeiRespModelElement data = SelectDeviceByImeiRespModelElement.fromJson(respData.toJson());
if (data.mobile == null || data.mobile == "" || data.identificationNo == null || data.identificationNo == "") {
return;
}
_appState.setSelectDeviceByImeiRespModelElement(data); _appState.setSelectDeviceByImeiRespModelElement(data);
LoaderBottomSheet.hideLoader(); LoaderBottomSheet.hideLoader();
@ -856,8 +860,6 @@ class AuthenticationViewModel extends ChangeNotifier {
} }
Future<void> checkUserAuthentication({required OTPTypeEnum otpTypeEnum, Function(dynamic)? onSuccess, Function(String)? onError}) async { Future<void> checkUserAuthentication({required OTPTypeEnum otpTypeEnum, Function(dynamic)? onSuccess, Function(String)? onError}) async {
// TODO: THIS SHOULD BE REMOVED LATER ON AND PASSED FROM APP STATE DIRECTLY INTO API CLIENT. BECAUSE THIS API ONLY NEEDS FEW PARAMS FROM USER
loginTypeEnum = otpTypeEnum == OTPTypeEnum.sms ? LoginTypeEnum.sms : LoginTypeEnum.whatsapp; loginTypeEnum = otpTypeEnum == OTPTypeEnum.sms ? LoginTypeEnum.sms : LoginTypeEnum.whatsapp;
// if (phoneNumberController.text.isEmpty) { // if (phoneNumberController.text.isEmpty) {

@ -2,7 +2,9 @@
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:hmg_patient_app_new/core/api/api_client.dart'; import 'package:hmg_patient_app_new/core/api/api_client.dart';
import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/api_consts.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
import 'package:hmg_patient_app_new/core/utils/date_util.dart'; import 'package:hmg_patient_app_new/core/utils/date_util.dart';
import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/appointment_nearest_gate_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/appointment_nearest_gate_response_model.dart';
@ -181,6 +183,9 @@ class BookAppointmentsRepoImp implements BookAppointmentsRepo {
"IsSearchAppointmnetByClinicID": isContinueDentalPlan ? false : true, "IsSearchAppointmnetByClinicID": isContinueDentalPlan ? false : true,
"isDentalAllowedBackend": clinicID == 17 ? true : isContinueDentalPlan, "isDentalAllowedBackend": clinicID == 17 ? true : isContinueDentalPlan,
"IsGetNearAppointment": isNearest, "IsGetNearAppointment": isNearest,
"gender": getIt.get<AppState>().isAuthenticated ? getIt.get<AppState>().getAuthenticatedUser()!.gender! : 0,
"age": getIt.get<AppState>().isAuthenticated ? getIt.get<AppState>().getAuthenticatedUser()!.age! : 0,
"DateofBirth": getIt.get<AppState>().isAuthenticated ? getIt.get<AppState>().getAuthenticatedUser()!.dateofBirth! : null,
if (isNearest) "SelectedDate": DateUtil.convertDateToString(DateTime.now()), if (isNearest) "SelectedDate": DateUtil.convertDateToString(DateTime.now()),
"License": true "License": true
}; };

@ -45,7 +45,6 @@ class MedicalFileViewModel extends ChangeNotifier {
List<SickLeaveList> patientSickLeavesViewList = []; List<SickLeaveList> patientSickLeavesViewList = [];
bool isSickLeavesSortByClinic = true; bool isSickLeavesSortByClinic = true;
bool isSickLeavesDataNeedsReloading = true; bool isSickLeavesDataNeedsReloading = true;
List<GetAllergiesResponseModel> patientAllergiesList = []; List<GetAllergiesResponseModel> patientAllergiesList = [];
@ -61,6 +60,7 @@ class MedicalFileViewModel extends ChangeNotifier {
List<MedicalReportList> patientMedicalReportsViewList = []; List<MedicalReportList> patientMedicalReportsViewList = [];
bool isMedicalReportsSortByClinic = true; bool isMedicalReportsSortByClinic = true;
bool isMedicalReportsDataNeedsReloading = true;
List<PatientAppointmentHistoryResponseModel> patientMedicalReportAppointmentHistoryList = []; List<PatientAppointmentHistoryResponseModel> patientMedicalReportAppointmentHistoryList = [];
PatientAppointmentHistoryResponseModel? patientMedicalReportSelectedAppointment; PatientAppointmentHistoryResponseModel? patientMedicalReportSelectedAppointment;
@ -192,7 +192,7 @@ class MedicalFileViewModel extends ChangeNotifier {
} }
setIsPatientMedicalReportsLoading(bool val) { setIsPatientMedicalReportsLoading(bool val) {
if (val) { if (val && isMedicalReportsDataNeedsReloading) {
onMedicalReportTabChange(0); onMedicalReportTabChange(0);
patientMedicalReportList.clear(); patientMedicalReportList.clear();
patientMedicalReportsByClinic.clear(); patientMedicalReportsByClinic.clear();
@ -200,8 +200,8 @@ class MedicalFileViewModel extends ChangeNotifier {
patientMedicalReportsViewList.clear(); patientMedicalReportsViewList.clear();
patientMedicalReportPDFBase64 = ""; patientMedicalReportPDFBase64 = "";
isMedicalReportsSortByClinic = true; isMedicalReportsSortByClinic = true;
isPatientMedicalReportsListLoading = val;
} }
isPatientMedicalReportsListLoading = val;
notifyListeners(); notifyListeners();
} }
@ -373,6 +373,10 @@ class MedicalFileViewModel extends ChangeNotifier {
} }
Future<void> getPatientMedicalReportList({Function(dynamic)? onSuccess, Function(String)? onError}) async { Future<void> getPatientMedicalReportList({Function(dynamic)? onSuccess, Function(String)? onError}) async {
if (!isMedicalReportsDataNeedsReloading) {
return;
}
patientMedicalReportList.clear(); patientMedicalReportList.clear();
patientMedicalReportRequestedList.clear(); patientMedicalReportRequestedList.clear();
patientMedicalReportReadyList.clear(); patientMedicalReportReadyList.clear();
@ -385,6 +389,7 @@ class MedicalFileViewModel extends ChangeNotifier {
(failure) async => await errorHandlerService.handleError( (failure) async => await errorHandlerService.handleError(
failure: failure, failure: failure,
onOkPressed: () { onOkPressed: () {
isMedicalReportsDataNeedsReloading = true;
onError!(failure.message); onError!(failure.message);
}, },
), ),
@ -400,6 +405,7 @@ class MedicalFileViewModel extends ChangeNotifier {
} }
onMedicalReportTabChange(0); onMedicalReportTabChange(0);
isPatientMedicalReportsListLoading = false; isPatientMedicalReportsListLoading = false;
isMedicalReportsDataNeedsReloading = false;
notifyListeners(); notifyListeners();
if (onSuccess != null) { if (onSuccess != null) {
onSuccess(apiResponse); onSuccess(apiResponse);

@ -161,6 +161,20 @@ class AppointmentViaRegionViewmodel extends ChangeNotifier {
page: DentalChiefComplaintsPage(), page: DentalChiefComplaintsPage(),
), ),
); );
} else {
if (appState.getAuthenticatedUser()!.age! > 12) {
navigationService.push(
CustomPageRoute(
page: DentalChiefComplaintsPage(),
),
);
} else {
navigationService.push(
CustomPageRoute(
page: SelectDoctorPage(),
),
);
}
} }
} }
if (clinicId == 253) { if (clinicId == 253) {

@ -3,6 +3,7 @@ import 'package:dartz/dartz.dart';
import 'package:hmg_patient_app_new/core/api/api_client.dart'; import 'package:hmg_patient_app_new/core/api/api_client.dart';
import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/api_consts.dart';
import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
import 'package:hmg_patient_app_new/core/common_models/tamara_request_model.dart';
import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/get_tamara_installments_details_response_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/get_tamara_installments_details_response_model.dart';
import 'package:hmg_patient_app_new/features/payfort/models/apple_pay_request_insert_model.dart'; import 'package:hmg_patient_app_new/features/payfort/models/apple_pay_request_insert_model.dart';
@ -34,6 +35,8 @@ abstract class PayfortRepo {
Future<Either<Failure, GenericApiModel<dynamic>>> payfortRequestInsert({required PayfortRequestInsertModel payfortRequestInsertModel}); Future<Either<Failure, GenericApiModel<dynamic>>> payfortRequestInsert({required PayfortRequestInsertModel payfortRequestInsertModel});
Future<Either<Failure, GenericApiModel<dynamic>>> payfortResponseInsert({required PayfortResponseInsertModel payfortResponseInsertModel}); Future<Either<Failure, GenericApiModel<dynamic>>> payfortResponseInsert({required PayfortResponseInsertModel payfortResponseInsertModel});
Future<Either<Failure, GenericApiModel<dynamic>>> tamaraRequestInsert({required TamaraRequestModel tamaraRequestModel});
} }
class PayfortRepoImp implements PayfortRepo { class PayfortRepoImp implements PayfortRepo {
@ -350,4 +353,31 @@ class PayfortRepoImp implements PayfortRepo {
return Left(UnknownFailure(e.toString())); return Left(UnknownFailure(e.toString()));
} }
} }
@override
Future<Either<Failure, GenericApiModel>> tamaraRequestInsert({required TamaraRequestModel tamaraRequestModel}) async {
try {
GenericApiModel<dynamic>? apiResponse;
Failure? failure;
await apiClient.post(TAMARA_REQUEST_INSERT, body: tamaraRequestModel.toJson(), onFailure: (error, statusCode, {messageStatus, failureType}) {
failure = failureType;
}, onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
try {
apiResponse = GenericApiModel<dynamic>(
messageStatus: messageStatus,
statusCode: statusCode,
errorMessage: null,
data: response,
);
} catch (e) {
failure = DataParsingFailure(e.toString());
}
}, isAllowAny: true, isPaymentServices: true);
if (failure != null) return Left(failure!);
if (apiResponse == null) return Left(ServerFailure("Unknown error"));
return Right(apiResponse!);
} catch (e) {
return Left(UnknownFailure(e.toString()));
}
}
} }

@ -9,6 +9,7 @@ import 'package:flutter_amazonpaymentservices/flutter_amazonpaymentservices.dart
import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/api_consts.dart';
import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/cache_consts.dart'; import 'package:hmg_patient_app_new/core/cache_consts.dart';
import 'package:hmg_patient_app_new/core/common_models/tamara_request_model.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/get_tamara_installments_details_response_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/get_tamara_installments_details_response_model.dart';
@ -116,6 +117,25 @@ class PayfortViewModel extends ChangeNotifier {
); );
} }
Future<void> tamaraRequestInsert({required TamaraRequestModel tamaraRequestModel, Function(dynamic)? onSuccess, Function(String)? onError}) async {
final result = await payfortRepo.tamaraRequestInsert(tamaraRequestModel: tamaraRequestModel);
result.fold(
(failure) async => await errorHandlerService.handleError(failure: failure),
(apiResponse) {
if (apiResponse.messageStatus == 2) {
// dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
} else if (apiResponse.messageStatus == 1) {
// payfortProjectDetailsRespModel = apiResponse.data!;
notifyListeners();
if (onSuccess != null) {
onSuccess(apiResponse);
}
}
},
);
}
Future<void> payfortResponseInsert({required PayfortResponseInsertModel payfortResponseInsertModel, Function(dynamic)? onSuccess, Function(String)? onError}) async { Future<void> payfortResponseInsert({required PayfortResponseInsertModel payfortResponseInsertModel, Function(dynamic)? onSuccess, Function(String)? onError}) async {
final result = await payfortRepo.payfortResponseInsert(payfortResponseInsertModel: payfortResponseInsertModel); final result = await payfortRepo.payfortResponseInsert(payfortResponseInsertModel: payfortResponseInsertModel);

@ -232,7 +232,7 @@ class _AppointmentCardState extends State<AppointmentCard> {
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: widget.isLoading url: widget.isLoading
? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png' ? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png'
: widget.patientAppointmentHistoryResponseModel.doctorImageURL!, : widget.patientAppointmentHistoryResponseModel.doctorImageURL,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 63.h, width: 63.h,
height: 63.h, height: 63.h,

@ -152,16 +152,13 @@ class AppointmentDoctorCard extends StatelessWidget {
), ),
AppCustomChipWidget( AppCustomChipWidget(
labelPadding: EdgeInsetsDirectional.only(start: -6.w, end: 6.w), labelPadding: EdgeInsetsDirectional.only(start: -6.w, end: 6.w),
icon: !patientAppointmentHistoryResponseModel.isLiveCareAppointment! icon: !(patientAppointmentHistoryResponseModel.isLiveCareAppointment ?? false) ? AppAssets.walkin_appointment_icon
? AppAssets.walkin_appointment_icon
: AppAssets.small_livecare_icon, : AppAssets.small_livecare_icon,
iconColor: !patientAppointmentHistoryResponseModel.isLiveCareAppointment! ? AppColors.textColor : Colors.white, iconColor: !(patientAppointmentHistoryResponseModel.isLiveCareAppointment ?? false) ? AppColors.textColor : Colors.white,
labelText: patientAppointmentHistoryResponseModel.isLiveCareAppointment! labelText: (patientAppointmentHistoryResponseModel.isLiveCareAppointment ?? false) ? LocaleKeys.livecare.tr(context: context)
? LocaleKeys.livecare.tr(context: context)
: LocaleKeys.walkin.tr(context: context), : LocaleKeys.walkin.tr(context: context),
backgroundColor: backgroundColor: !(patientAppointmentHistoryResponseModel.isLiveCareAppointment ?? false) ? AppColors.greyColor : AppColors.successColor,
!patientAppointmentHistoryResponseModel.isLiveCareAppointment! ? AppColors.greyColor : AppColors.successColor, textColor: !(patientAppointmentHistoryResponseModel.isLiveCareAppointment ?? false) ? AppColors.textColor : Colors.white,
textColor: !patientAppointmentHistoryResponseModel.isLiveCareAppointment! ? AppColors.textColor : Colors.white,
), ),
], ],
), ),

@ -26,7 +26,7 @@ class BuildDoctorRowAppointmentRating extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: patientAppointmentHistoryResponseModel.doctorImageURL!, url: patientAppointmentHistoryResponseModel.doctorImageURL,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 63.h, width: 63.h,
height: 63.h, height: 63.h,

@ -88,7 +88,7 @@ class AskDoctorAppointmentCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: askDoctorAppointmentHistoryList.doctorImageURL!, url: askDoctorAppointmentHistoryList.doctorImageURL,
iconColor: AppColors.blackBgColor, iconColor: AppColors.blackBgColor,
width: 63.h, width: 63.h,
height: 63.h, height: 63.h,

@ -196,7 +196,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!, url: myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 64.h, width: 64.h,
height: 64.h, height: 64.h,
@ -389,7 +389,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: myAppointmentsVM.patientFavouriteDoctorsList[index].doctorImageUrl!, url: myAppointmentsVM.patientFavouriteDoctorsList[index].doctorImageUrl,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 64.h, width: 64.h,
height: 64.h, height: 64.h,

@ -89,7 +89,7 @@ class DoctorProfilePage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: bookAppointmentsViewModel.doctorsProfileResponseModel.doctorImageURL!, url: bookAppointmentsViewModel.doctorsProfileResponseModel.doctorImageURL,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 63.h, width: 63.h,
height: 63.h, height: 63.h,
@ -116,7 +116,7 @@ class DoctorProfilePage extends StatelessWidget {
], ],
), ),
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: bookAppointmentsViewModel.doctorsProfileResponseModel.nationalityFlagURL!, url: bookAppointmentsViewModel.doctorsProfileResponseModel.nationalityFlagURL,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 32.h, width: 32.h,
height: 32.h, height: 32.h,

@ -3,15 +3,19 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_clinic_list_response_model.dart';
import 'package:hmg_patient_app_new/features/doctor_filter/doctor_filter_view_model.dart'; import 'package:hmg_patient_app_new/features/doctor_filter/doctor_filter_view_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/doctor_filter/doctors_filter.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/doctor_filter/doctors_filter.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/doctor_profile_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/doctor_profile_page.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/select_doctor_page.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/doctor_card.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/doctor_card.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/theme/colors.dart';
@ -214,28 +218,46 @@ class _SearchDoctorByNameState extends State<SearchDoctorByName> {
bookAppointmentsViewModel: bookAppointmentsViewModel, bookAppointmentsViewModel: bookAppointmentsViewModel,
isDoctorNameSearch: true, isDoctorNameSearch: true,
).paddingSymmetrical(16.h, 0.h).onPress(() async { ).paddingSymmetrical(16.h, 0.h).onPress(() async {
bookAppointmentsVM.setSelectedDoctor(bookAppointmentsVM.filteredDoctorList[index]); if (bookAppointmentsVM.filteredDoctorList[index].clinicID == 17 && getIt.get<AppState>().getAuthenticatedUser()!.age! < 12) {
LoaderBottomSheet.showLoader(); bookAppointmentsViewModel.setProjectID(bookAppointmentsVM.filteredDoctorList[index].projectID.toString());
await bookAppointmentsVM.getDoctorProfile( bookAppointmentsViewModel.setSelectedClinic(GetClinicsListResponseModel(
onSuccess: (dynamic respData) { clinicID: bookAppointmentsVM.filteredDoctorList[index].clinicID,
LoaderBottomSheet.hideLoader(); clinicDescription: bookAppointmentsVM.filteredDoctorList[index].clinicName,
Navigator.of(context).push( isLiveCareClinicAndOnline: false,
CustomPageRoute( liveCareServiceID: 0,
page: DoctorProfilePage(isDoctorAllowedToBook: true), liveCareClinicID: 0));
), bookAppointmentsViewModel.setIsDoctorsListLoading(true);
); Navigator.push(
}, context,
onError: (err) { CustomPageRoute(
LoaderBottomSheet.hideLoader(); page: SelectDoctorPage(),
showCommonBottomSheetWithoutHeight( ),
context, );
child: Utils.getErrorWidget(loadingText: err), } else {
callBackFunc: () {}, bookAppointmentsVM.setSelectedDoctor(bookAppointmentsVM.filteredDoctorList[index]);
isFullScreen: false, LoaderBottomSheet.showLoader();
isCloseButtonVisible: true, await bookAppointmentsVM.getDoctorProfile(
); onSuccess: (dynamic respData) {
}, LoaderBottomSheet.hideLoader();
); Navigator.of(context).push(
CustomPageRoute(
page: DoctorProfilePage(isDoctorAllowedToBook: true),
),
);
},
onError: (err) {
LoaderBottomSheet.hideLoader();
showCommonBottomSheetWithoutHeight(
context,
child: Utils.getErrorWidget(loadingText: err),
callBackFunc: () {},
isFullScreen: false,
isCloseButtonVisible: true,
);
},
);
}
// Column( // Column(
// children: bookAppointmentsVM.doctorsList[index].map<Widget>((entry) { // children: bookAppointmentsVM.doctorsList[index].map<Widget>((entry) {
// final doctorIndex = entry.key; // final doctorIndex = entry.key;

@ -1045,8 +1045,17 @@ class _SelectClinicPageState extends State<SelectClinicPage> {
//Dental Clinic Flow //Dental Clinic Flow
if (clinic.clinicID == 17) { if (clinic.clinicID == 17) {
if (appState.isAuthenticated) { if (appState.isAuthenticated) {
initDentalAppointmentBookingFlow(int.parse(bookAppointmentsViewModel.currentlySelectedHospitalFromRegionFlow ?? "0")); if (appState.getAuthenticatedUser()!.age! > 12) {
return; initDentalAppointmentBookingFlow(int.parse(bookAppointmentsViewModel.currentlySelectedHospitalFromRegionFlow ?? "0"));
return;
} else {
Navigator.push(
context,
CustomPageRoute(
page: SelectDoctorPage(),
),
);
}
} else { } else {
bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true);
Navigator.of(context).push( Navigator.of(context).push(
@ -1174,8 +1183,12 @@ class _SelectClinicPageState extends State<SelectClinicPage> {
if (bookAppointmentsViewModel.selectedClinic.clinicID == 17) { if (bookAppointmentsViewModel.selectedClinic.clinicID == 17) {
bookAppointmentsViewModel.setProjectID(id); bookAppointmentsViewModel.setProjectID(id);
if (appState.isAuthenticated) { if (appState.isAuthenticated) {
initDentalAppointment(); if (appState.getAuthenticatedUser()!.age! > 12) {
return SizedBox.shrink(); initDentalAppointment();
return SizedBox.shrink();
} else {
return SizedBox.shrink();
}
} else { } else {
bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true);
} }

@ -53,7 +53,11 @@ class _SelectDoctorPageState extends State<SelectDoctorPage> {
bookAppointmentsViewModel.getLiveCareDoctorsList(); bookAppointmentsViewModel.getLiveCareDoctorsList();
} else { } else {
if (bookAppointmentsViewModel.selectedClinic.clinicID == 17) { if (bookAppointmentsViewModel.selectedClinic.clinicID == 17) {
bookAppointmentsViewModel.getDentalChiefComplaintDoctorsList(); if (appState.getAuthenticatedUser()!.age! > 12) {
bookAppointmentsViewModel.getDentalChiefComplaintDoctorsList();
} else {
bookAppointmentsViewModel.getDoctorsList(isNearest: false);
}
} else if (bookAppointmentsViewModel.isGetDocForHealthCal) { } else if (bookAppointmentsViewModel.isGetDocForHealthCal) {
bookAppointmentsViewModel.getDoctorsListByHealthCal(); bookAppointmentsViewModel.getDoctorsListByHealthCal();
} else { } else {

@ -278,11 +278,22 @@ class _AppointmentCalendarState extends State<AppointmentCalendar> {
bookAppointmentsViewModel.setProjectID(bookAppointmentsViewModel.selectedDoctor.projectID.toString()); bookAppointmentsViewModel.setProjectID(bookAppointmentsViewModel.selectedDoctor.projectID.toString());
bookAppointmentsViewModel.setSelectedClinic(selectedClinic); bookAppointmentsViewModel.setSelectedClinic(selectedClinic);
bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true);
Navigator.of(context).push( if(appState.getAuthenticatedUser()!.age! > 12) {
CustomPageRoute( Navigator.of(context).push(
page: DentalChiefComplaintsPage(), CustomPageRoute(
), page: DentalChiefComplaintsPage(),
); ),
);
} else {
bookAppointmentsViewModel.getAppointmentNearestGate(projectID: bookAppointmentsViewModel.selectedDoctor.projectID!, clinicID: bookAppointmentsViewModel.selectedDoctor.clinicID!);
bookAppointmentsViewModel.setSelectedAppointmentDateTime(selectedDate, selectedTime, selectedDateDisplay);
Navigator.of(context).pop();
Navigator.of(context).push(
CustomPageRoute(
page: ReviewAppointmentPage(),
),
);
}
} else { } else {
bookAppointmentsViewModel.getAppointmentNearestGate(projectID: bookAppointmentsViewModel.selectedDoctor.projectID!, clinicID: bookAppointmentsViewModel.selectedDoctor.clinicID!); bookAppointmentsViewModel.getAppointmentNearestGate(projectID: bookAppointmentsViewModel.selectedDoctor.projectID!, clinicID: bookAppointmentsViewModel.selectedDoctor.clinicID!);
bookAppointmentsViewModel.setSelectedAppointmentDateTime(selectedDate, selectedTime, selectedDateDisplay); bookAppointmentsViewModel.setSelectedAppointmentDateTime(selectedDate, selectedTime, selectedDateDisplay);

@ -14,6 +14,7 @@ import 'package:hmg_patient_app_new/features/book_appointments/models/resp_model
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/dental_chief_complaints_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/dental_chief_complaints_page.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/laser/laser_appointment.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/laser/laser_appointment.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/select_doctor_page.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart';
import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@ -185,14 +186,26 @@ class DoctorCard extends StatelessWidget {
if (isDoctorNameSearch && doctorsListResponseModel.clinicID == 17) { if (isDoctorNameSearch && doctorsListResponseModel.clinicID == 17) {
GetClinicsListResponseModel selectedClinic = GetClinicsListResponseModel( GetClinicsListResponseModel selectedClinic = GetClinicsListResponseModel(
clinicID: doctorsListResponseModel.clinicID, clinicDescription: doctorsListResponseModel.clinicName, isLiveCareClinicAndOnline: false, liveCareServiceID: 0, liveCareClinicID: 0); clinicID: doctorsListResponseModel.clinicID, clinicDescription: doctorsListResponseModel.clinicName, isLiveCareClinicAndOnline: false, liveCareServiceID: 0, liveCareClinicID: 0);
bookAppointmentsViewModel.setProjectID(doctorsListResponseModel.projectID.toString()); if (getIt.get<AppState>().getAuthenticatedUser()!.age! > 12) {
bookAppointmentsViewModel.setSelectedClinic(selectedClinic); bookAppointmentsViewModel.setProjectID(doctorsListResponseModel.projectID.toString());
bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); bookAppointmentsViewModel.setSelectedClinic(selectedClinic);
Navigator.of(context).push( bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true);
CustomPageRoute( Navigator.of(context).push(
page: DentalChiefComplaintsPage(), CustomPageRoute(
), page: DentalChiefComplaintsPage(),
); ),
);
} else {
bookAppointmentsViewModel.setProjectID(doctorsListResponseModel.projectID.toString());
bookAppointmentsViewModel.setSelectedClinic(selectedClinic);
bookAppointmentsViewModel.setIsDoctorsListLoading(true);
Navigator.push(
context,
CustomPageRoute(
page: SelectDoctorPage(),
),
);
}
} else if (isDoctorNameSearch && doctorsListResponseModel.clinicID == 253) { } else if (isDoctorNameSearch && doctorsListResponseModel.clinicID == 253) {
GetClinicsListResponseModel selectedClinic = GetClinicsListResponseModel( GetClinicsListResponseModel selectedClinic = GetClinicsListResponseModel(
clinicID: doctorsListResponseModel.clinicID, clinicDescription: doctorsListResponseModel.clinicName, isLiveCareClinicAndOnline: false, liveCareServiceID: 0, liveCareClinicID: 0); clinicID: doctorsListResponseModel.clinicID, clinicDescription: doctorsListResponseModel.clinicName, isLiveCareClinicAndOnline: false, liveCareServiceID: 0, liveCareClinicID: 0);

@ -260,7 +260,7 @@ class FeedbackPage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: contactUsViewModel.patientFeedbackSelectedAppointment!.doctorImageURL!, url: contactUsViewModel.patientFeedbackSelectedAppointment?.doctorImageURL??"",
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 63.h, width: 63.h,
height: 63.h, height: 63.h,

@ -84,7 +84,7 @@ class InsuranceApprovalDetailsPage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: insuranceApprovalResponseModel.doctorImageURL!, url: insuranceApprovalResponseModel.doctorImageURL,
iconColor: AppColors.blackBgColor, iconColor: AppColors.blackBgColor,
width: 63.h, width: 63.h,
height: 63.h, height: 63.h,

@ -107,7 +107,7 @@ class InsuranceApprovalCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: isLoading ? "https://hmgwebservices.com/Images/MobileImages/OALAY/1439.png" : insuranceApprovalResponseModel.doctorImageURL!, url: isLoading ? "https://hmgwebservices.com/Images/MobileImages/OALAY/1439.png" : insuranceApprovalResponseModel.doctorImageURL,
iconColor: AppColors.blackBgColor, iconColor: AppColors.blackBgColor,
width: 63.h, width: 63.h,
height: 63.h, height: 63.h,

@ -56,7 +56,7 @@ class LabResultItemView extends StatelessWidget {
Row( Row(
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: isLoading ? "" : labOrder!.doctorImageURL!, url: isLoading ? "" : labOrder?.doctorImageURL??"",
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 24.h, width: 24.h,
height: 24.h, height: 24.h,

@ -926,7 +926,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
child: Row( child: Row(
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: prescriptionVM.patientPrescriptionOrders[index].doctorImageURL!, url: prescriptionVM.patientPrescriptionOrders[index].doctorImageURL,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 40.h, width: 40.h,
height: 40.h, height: 40.h,
@ -1127,7 +1127,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!, url: myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 64.h, width: 64.h,
height: 64.h, height: 64.h,

@ -142,7 +142,7 @@ class _PatientSickleavesListPageState extends State<PatientSickleavesListPage> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: model.patientSickLeaveList[index].doctorImageURL!, url: model.patientSickLeaveList[index].doctorImageURL,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 24.h, width: 24.h,
height: 24.h, height: 24.h,

@ -57,7 +57,7 @@ class PatientSickLeaveCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: isLoading ? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png" : patientSickLeavesResponseModel.doctorImageURL!, url: isLoading ? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png" : patientSickLeavesResponseModel.doctorImageURL,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 30.h, width: 30.h,
height: 30.h, height: 30.h,

@ -43,7 +43,7 @@ class PatientMedicalReportCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: isLoading ? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png" : patientMedicalReportResponseModel.doctorImageURL!, url: isLoading ? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png" : patientMedicalReportResponseModel.doctorImageURL,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 63.h, width: 63.h,
height: 63.h, height: 63.h,

@ -94,7 +94,7 @@ class OffersAndDiscountsDetailedPage extends StatelessWidget {
ClipRRect( ClipRRect(
borderRadius: BorderRadius.circular(24.h), borderRadius: BorderRadius.circular(24.h),
child: Utils.buildImgWithNetwork( child: Utils.buildImgWithNetwork(
url: offer.imageUrl!, url: offer.imageUrl,
iconColor: AppColors.blackBgColor, iconColor: AppColors.blackBgColor,
width: double.infinity, width: double.infinity,
height: 250.h, height: 250.h,

@ -159,7 +159,7 @@ class _OffersAndDiscountsPageState extends State<OffersAndDiscountsPage> {
borderRadius: BorderRadius.vertical(top: Radius.circular(24.h)), borderRadius: BorderRadius.vertical(top: Radius.circular(24.h)),
child: SizedBox.expand( child: SizedBox.expand(
child: Utils.buildImgWithNetwork( child: Utils.buildImgWithNetwork(
url: offersAndDiscountVM.filteredOffers[index].imageUrl!, url: offersAndDiscountVM.filteredOffers[index].imageUrl,
iconColor: AppColors.blackBgColor, iconColor: AppColors.blackBgColor,
fit: BoxFit.cover, fit: BoxFit.cover,
errorBuilder: (context, error, stackTrace) { errorBuilder: (context, error, stackTrace) {

@ -62,7 +62,7 @@ class PrescriptionDeliveryOrderSummaryPage extends StatelessWidget {
Radius.circular(5.r), Radius.circular(5.r),
), ),
child: Utils.buildImgWithNetwork( child: Utils.buildImgWithNetwork(
url: prescriptionsViewModel.prescriptionDetailsList[index].imageSRCUrl!, url: prescriptionsViewModel.prescriptionDetailsList[index].imageSRCUrl,
iconColor: AppColors.blackBgColor, iconColor: AppColors.blackBgColor,
fit: BoxFit.cover, fit: BoxFit.cover,
width: 60.w, width: 60.w,

@ -126,7 +126,7 @@ class _PrescriptionDetailPageState extends State<PrescriptionDetailPage> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: widget.prescriptionsResponseModel.doctorImageURL!, url: widget.prescriptionsResponseModel.doctorImageURL,
iconColor: AppColors.blackBgColor, iconColor: AppColors.blackBgColor,
width: 24.h, width: 24.h,
height: 24.h, height: 24.h,

@ -43,7 +43,7 @@ class PrescriptionItemView extends StatelessWidget {
spacing: 8.h, spacing: 8.h,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: isLoading ? "" : prescriptionVM.prescriptionDetailsList[index].imageThumbUrl!, url: isLoading ? "" : prescriptionVM.prescriptionDetailsList[index].imageThumbUrl,
iconColor: AppColors.blackBgColor, iconColor: AppColors.blackBgColor,
width: 60.h, width: 60.h,
height: 60.h, height: 60.h,

@ -151,7 +151,7 @@ class _PrescriptionsListPageState extends State<PrescriptionsListPage> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: model.patientPrescriptionOrders[index].doctorImageURL!, url: model.patientPrescriptionOrders[index].doctorImageURL,
iconColor: AppColors.blackBgColor, iconColor: AppColors.blackBgColor,
width: 24.h, width: 24.h,
height: 24.h, height: 24.h,

@ -25,7 +25,7 @@ class BuildDoctorRow extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Utils.buildImgWithNetwork( Utils.buildImgWithNetwork(
url: isForClinic ? 'https://hmgwebservices.com/Images/Hospitals/${appointmentDetails!.projectID}.jpg' : appointmentDetails!.doctorImageURL , url: isForClinic ? 'https://hmgwebservices.com/Images/Hospitals/${appointmentDetails?.projectID}.jpg' : appointmentDetails?.doctorImageURL ,
iconColor: AppColors.transparent, iconColor: AppColors.transparent,
width: 63.h, width: 63.h,
height: 63.h, height: 63.h,

@ -11,6 +11,7 @@ import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/utils/date_util.dart'; import 'package:hmg_patient_app_new/core/utils/date_util.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/features/authentication/models/resp_models/authenticated_user_resp_model.dart'; import 'package:hmg_patient_app_new/features/authentication/models/resp_models/authenticated_user_resp_model.dart';
import 'package:hmg_patient_app_new/features/payfort/payfort_view_model.dart';
enum _PAYMENT_TYPE { PACKAGES, PHARMACY, PATIENT } enum _PAYMENT_TYPE { PACKAGES, PHARMACY, PATIENT }
@ -217,6 +218,8 @@ class MyInAppBrowser extends InAppBrowser {
tamaraRequestModel.appointmentDate = (appoDate != null && appoDate != "") ? appoDate : null; tamaraRequestModel.appointmentDate = (appoDate != null && appoDate != "") ? appoDate : null;
tamaraRequestModel.isSchedule = ((appoNo != null && appoNo != "") && (appoDate != null && appoDate != "")) ? true : false; tamaraRequestModel.isSchedule = ((appoNo != null && appoNo != "") && (appoDate != null && appoDate != "")) ? true : false;
getIt.get<PayfortViewModel>().tamaraRequestInsert(tamaraRequestModel: tamaraRequestModel);
// service.tamaraInsertRequest(tamaraRequestModel, context).then((res) { // service.tamaraInsertRequest(tamaraRequestModel, context).then((res) {
// // if (context != null) GifLoaderDialogUtils.hideDialog(context); // // if (context != null) GifLoaderDialogUtils.hideDialog(context);
generateTamaraURL(amount, orderDesc, transactionID, projId, emailId, paymentMethod, patientType, patientName, patientID, authenticatedUser, isLiveCareAppo, servID, LiveServID, appoDate, appoNo, generateTamaraURL(amount, orderDesc, transactionID, projId, emailId, paymentMethod, patientType, patientName, patientID, authenticatedUser, isLiveCareAppo, servID, LiveServID, appoDate, appoNo,

@ -198,7 +198,8 @@ class TextInputWidget extends StatelessWidget {
], ],
), ),
), ),
(suffix != null) ? suffix! : SizedBox.shrink() // (suffix != null) ? suffix : SizedBox.shrink()
suffix ?? SizedBox.shrink()
], ],
), ),
), ),

@ -117,10 +117,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.4.1"
chewie: chewie:
dependency: transitive dependency: transitive
description: description:
@ -145,6 +145,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.2" version: "1.1.2"
cloudflare_turnstile:
dependency: "direct main"
description:
name: cloudflare_turnstile
sha256: b3f2b7606a9d6eabfa38112ee4ae4272c4c75f16ed8e52d99fd01822e3ea0478
url: "https://pub.dev"
source: hosted
version: "3.8.1"
collection: collection:
dependency: transitive dependency: transitive
description: description:
@ -499,6 +507,14 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_amazonpaymentservices:
dependency: "direct main"
description:
name: flutter_amazonpaymentservices
sha256: "23f45fd3b1e12a0933da3704d66cebd19c4c41e28a50d4fd458d3e3e6311f332"
url: "https://pub.dev"
source: hosted
version: "0.0.13"
flutter_cache_manager: flutter_cache_manager:
dependency: transitive dependency: transitive
description: description:
@ -700,10 +716,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_paytabs_bridge name: flutter_paytabs_bridge
sha256: fc48e68848147a8edf41b27f9068b988c4fb28ff9778bf20560a90be0b4dddfb sha256: d65396883c661ea945a526c21b2fe859299f25fcd951fe3a733ff224e6ec984c
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.7.13" version: "2.7.14"
flutter_plugin_android_lifecycle: flutter_plugin_android_lifecycle:
dependency: transitive dependency: transitive
description: description:
@ -720,6 +736,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.1" version: "4.0.1"
flutter_screenshot_blocker:
dependency: "direct main"
description:
name: flutter_screenshot_blocker
sha256: "20e36b4aaca20259008dbb1403b77af6207d48cd8382a772b9c27619bc116849"
url: "https://pub.dev"
source: hosted
version: "1.0.4"
flutter_staggered_animations: flutter_staggered_animations:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1341,26 +1365,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.17" version: "0.12.19"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.11.1" version: "0.13.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.0" version: "1.18.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -1641,6 +1665,54 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0"
screen_brightness:
dependency: "direct main"
description:
name: screen_brightness
sha256: "7d4ac84ae26b37c01d6f5db7123a72db7933e1f2a2a8c369a51e08f81b3178d8"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
screen_brightness_android:
dependency: transitive
description:
name: screen_brightness_android
sha256: "8c69d3ac475e4d625e7fa682a3a51a69ff59abe5b4a9e57f6ec7d830a6c69bd6"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
screen_brightness_ios:
dependency: transitive
description:
name: screen_brightness_ios
sha256: f08f70ca1ac3e30719764b5cfb8b3fe1e28163065018a41b3e6f243ab146c2f1
url: "https://pub.dev"
source: hosted
version: "1.0.1"
screen_brightness_macos:
dependency: transitive
description:
name: screen_brightness_macos
sha256: "70c2efa4534e22b927e82693488f127dd4a0f008469fccf4f0eefe9061bbdd6a"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
screen_brightness_platform_interface:
dependency: transitive
description:
name: screen_brightness_platform_interface
sha256: "9f3ebf7f22d5487e7676fe9ddaf3fc55b6ff8057707cf6dc0121c7dfda346a16"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
screen_brightness_windows:
dependency: transitive
description:
name: screen_brightness_windows
sha256: c8e12a91cf6dd912a48bd41fcf749282a51afa17f536c3460d8d05702fb89ffa
url: "https://pub.dev"
source: hosted
version: "1.0.1"
scrollable_positioned_list: scrollable_positioned_list:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1890,10 +1962,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.7" version: "0.7.11"
time: time:
dependency: transitive dependency: transitive
description: description:
@ -2175,5 +2247,5 @@ packages:
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
sdks: sdks:
dart: ">=3.9.0 <4.0.0" dart: ">=3.10.0-0 <4.0.0"
flutter: ">=3.35.0" flutter: ">=3.35.0"

Loading…
Cancel
Save