diff --git a/assets/images/svg/calendar_filled_icon.svg b/assets/images/svg/calendar_filled_icon.svg
new file mode 100644
index 00000000..116ce8ef
--- /dev/null
+++ b/assets/images/svg/calendar_filled_icon.svg
@@ -0,0 +1,9 @@
+
diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json
index f9cc3035..faa65060 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -936,7 +936,7 @@
"hospitalInformation": "معلومات المستشفى",
"fetchingAppointmentShare": "جاري جلب تفاصيل الموعد...",
"bookingYourAppointment": "جاري حجز موعدك...",
- "selectLiveCareClinic": "اختر عيادة لايف كير",
+ "selectLiveCareClinic": "عيادة لايف كير",
"checkingForExistingDentalPlan": "جاري التحقق من وجود خطة أسنان حالية، يرجى الانتظار...",
"dentalTreatmentPlan": "خطة علاج الأسنان",
"youHaveExistingTreatmentPlan": "لديك خطة علاج حالية: ",
@@ -1653,5 +1653,6 @@
"oneWaySubtitle": "نقل من الموقع إلى المستشفى",
"twoWaySubtitle": "نقل من الموقع إلى المستشفى والعودة مرة أخرى",
"toHospitalSubtitle": "نقل من موقعك الحالي إلى المستشفى",
- "fromHospitalSubtitle": "نقل من المستشفى إلى منزلك"
+ "fromHospitalSubtitle": "نقل من المستشفى إلى منزلك",
+ "clinicSchedule": "جدول العيادة"
}
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index 1bbd7cb7..4b944e5b 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -930,7 +930,7 @@
"hospitalInformation": "Hospital Information",
"fetchingAppointmentShare": "Fetching Appointment Share...",
"bookingYourAppointment": "Booking your appointment...",
- "selectLiveCareClinic": "Select LiveCare Clinic",
+ "selectLiveCareClinic": "LiveCare Clinic",
"checkingForExistingDentalPlan": "Checking for an existing dental plan, Please wait...",
"dentalTreatmentPlan": "Dental treatment plan",
"youHaveExistingTreatmentPlan": "You have an existing treatment plan: ",
@@ -1241,7 +1241,7 @@
"quickLinks": "Quick Links",
"viewMedicalFileLandingPage": "View medical file",
"immediateLiveCareRequest": "Immediate LiveCare Request",
- "yourTurnIsAfterPatients": "Your turn is after {count} patients.",
+ "yourTurnIsAfterPatients": "Your turn is after {count} patients. Please wait for your turn, The doctor will call you shortly.",
"dontHaveHHCOrders": "You don't have any Home Health Care orders yet.",
"hhcOrders": "HHC Orders",
"requestedServices": "Requested Services",
@@ -1645,5 +1645,6 @@
"oneWaySubtitle": "Pickup from location to hospital",
"twoWaySubtitle": "Round trip from location to hospital and back",
"toHospitalSubtitle": "Transfer from your current location to the hospital",
- "fromHospitalSubtitle": "Transfer from the hospital back to your home"
+ "fromHospitalSubtitle": "Transfer from the hospital back to your home",
+ "clinicSchedule": "Clinic Schedule"
}
diff --git a/lib/core/api/api_client.dart b/lib/core/api/api_client.dart
index 374ac9d1..709d0166 100644
--- a/lib/core/api/api_client.dart
+++ b/lib/core/api/api_client.dart
@@ -199,8 +199,8 @@ class ApiClientImp implements ApiClient {
body['TokenID'] = "@dm!n";
}
- // body['TokenID'] = "@dm!n";
- // body['PatientID'] = 1018977;
+ body['TokenID'] = "@dm!n";
+ body['PatientID'] = 1018977;
// body['PatientTypeID'] = 1;
// body['PatientOutSA'] = 0;
// body['SessionID'] = "45786230487560q";
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index d90cd40c..6d36098e 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -236,6 +236,7 @@ class AppAssets {
static const String forward_top_nav_icon = '$svgBasePath/forward_top_nav_icon.svg';
static const String back_top_nav_icon = '$svgBasePath/back_top_nav_icon.svg';
static const String bluetooth = '$svgBasePath/bluetooth.svg';
+ static const String calendar_filled_icon = '$svgBasePath/calendar_filled_icon.svg';
//smartwatch
static const String watchActivity = '$svgBasePath/watch_activity.svg';
diff --git a/lib/features/immediate_livecare/immediate_livecare_repo.dart b/lib/features/immediate_livecare/immediate_livecare_repo.dart
index cbce4ea2..8775378b 100644
--- a/lib/features/immediate_livecare/immediate_livecare_repo.dart
+++ b/lib/features/immediate_livecare/immediate_livecare_repo.dart
@@ -5,6 +5,7 @@ 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/common_models/generic_api_model.dart';
import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
+import 'package:hmg_patient_app_new/features/immediate_livecare/models/resp_models/get_livecare_clinic_schedule_response_model.dart';
import 'package:hmg_patient_app_new/features/immediate_livecare/models/resp_models/get_livecare_immediate_clinics_response_model.dart';
import 'package:hmg_patient_app_new/features/immediate_livecare/models/resp_models/get_livecare_immediate_fees_response_model.dart';
import 'package:hmg_patient_app_new/features/immediate_livecare/models/resp_models/get_patient_livecare_history_response_model.dart';
@@ -13,6 +14,9 @@ import 'package:hmg_patient_app_new/services/logger_service.dart';
abstract class ImmediateLiveCareRepo {
Future>>> getLiveCareImmediateClinicsList(int age, int genderID, {Function(dynamic)? onSuccess, Function(String)? onError});
+ Future>>> getLiveCareImmediateClinicSchedule(int age, int genderID, int serviceID,
+ {Function(dynamic)? onSuccess, Function(String)? onError});
+
Future>> getLiveCareImmediateAppointmentFees(int age, int genderID, int serviceID,
{Function(dynamic)? onSuccess, Function(String)? onError});
@@ -203,4 +207,47 @@ class ImmediateLiveCareRepoImp implements ImmediateLiveCareRepo {
return Left(UnknownFailure(e.toString()));
}
}
+
+ @override
+ Future>>> getLiveCareImmediateClinicSchedule(int age, int genderID, int serviceID,
+ {Function(dynamic p1)? onSuccess, Function(String p1)? onError}) async {
+ Map mapDevice = {
+ "Age": age,
+ "Gender": genderID,
+ "ServiceID": serviceID,
+ };
+
+ try {
+ GenericApiModel>? apiResponse;
+ Failure? failure;
+ await apiClient.post(
+ GET_LIVECARE_CLINIC_TIMING,
+ body: mapDevice,
+ onFailure: (error, statusCode, {messageStatus, failureType}) {
+ failure = failureType;
+ // onError!(error);
+ },
+ onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+ try {
+ final respObject = response['PatientER_GetClinicsServiceTimingsList'];
+ final liveCareScheduleObj = respObject.map((item) => LiveCareClinicScheduleResponse.fromJson(item as Map)).toList().cast();
+
+ apiResponse = GenericApiModel>(
+ messageStatus: messageStatus,
+ statusCode: statusCode,
+ errorMessage: null,
+ data: liveCareScheduleObj,
+ );
+ } catch (e) {
+ failure = DataParsingFailure(e.toString());
+ }
+ },
+ );
+ if (failure != null) return Left(failure!);
+ if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+ return Right(apiResponse!);
+ } catch (e) {
+ return Left(UnknownFailure(e.toString()));
+ }
+ }
}
diff --git a/lib/features/immediate_livecare/immediate_livecare_view_model.dart b/lib/features/immediate_livecare/immediate_livecare_view_model.dart
index 46f5a652..6613b481 100644
--- a/lib/features/immediate_livecare/immediate_livecare_view_model.dart
+++ b/lib/features/immediate_livecare/immediate_livecare_view_model.dart
@@ -11,6 +11,7 @@ import 'package:hmg_patient_app_new/core/enums.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/features/immediate_livecare/immediate_livecare_repo.dart';
+import 'package:hmg_patient_app_new/features/immediate_livecare/models/resp_models/get_livecare_clinic_schedule_response_model.dart';
import 'package:hmg_patient_app_new/features/immediate_livecare/models/resp_models/get_livecare_immediate_clinics_response_model.dart';
import 'package:hmg_patient_app_new/features/immediate_livecare/models/resp_models/get_livecare_immediate_fees_response_model.dart';
import 'package:hmg_patient_app_new/features/immediate_livecare/models/resp_models/get_patient_livecare_history_response_model.dart';
@@ -46,6 +47,8 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
List patientLiveCareHistoryList = [];
bool patientHasPendingLiveCareRequest = false;
+ List liveCareClinicScheduleList = [];
+
late AppState _appState;
Duration countdownDuration = Duration(minutes: 1, seconds: 0);
@@ -265,6 +268,33 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
);
}
+ Future getLiveCareImmediateClinicSchedule({int? serviceID, Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ liveCareClinicScheduleList.clear();
+ notifyListeners();
+
+ final result =
+ await immediateLiveCareRepo.getLiveCareImmediateClinicSchedule(_appState.getAuthenticatedUser()!.age!, _appState.getAuthenticatedUser()!.gender!, serviceID!);
+
+ 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) {
+ liveCareClinicScheduleList = apiResponse.data!;
+
+ // immediateLiveCareClinicsList.sort((a, b) => b.isOnline!.compareTo(a.isOnline!));
+
+ // isImmediateLiveCareClinicsLoading = false;
+ notifyListeners();
+ if (onSuccess != null) {
+ onSuccess(apiResponse);
+ }
+ }
+ },
+ );
+ }
+
void startTimer() {
timer = Timer.periodic(const Duration(seconds: 1), (_) => addTime());
notifyListeners();
diff --git a/lib/features/immediate_livecare/models/resp_models/get_livecare_clinic_schedule_response_model.dart b/lib/features/immediate_livecare/models/resp_models/get_livecare_clinic_schedule_response_model.dart
new file mode 100644
index 00000000..787167de
--- /dev/null
+++ b/lib/features/immediate_livecare/models/resp_models/get_livecare_clinic_schedule_response_model.dart
@@ -0,0 +1,71 @@
+class LiveCareClinicScheduleResponse {
+ int? iD;
+ int? serviceID;
+ int? dayOfWeek;
+ String? dayOfWeekStr;
+ bool? isActive;
+ String? createdOn;
+ String? createdBy;
+ bool? projectOutSA;
+ String? dayOfWeekStrN;
+ List? shiftTimings;
+
+ LiveCareClinicScheduleResponse({this.iD, this.serviceID, this.dayOfWeek, this.dayOfWeekStr, this.isActive, this.createdOn, this.createdBy, this.projectOutSA, this.dayOfWeekStrN, this.shiftTimings});
+
+ LiveCareClinicScheduleResponse.fromJson(Map json) {
+ iD = json['ID'];
+ serviceID = json['ServiceID'];
+ dayOfWeek = json['DayOfWeek'];
+ dayOfWeekStr = json['DayOfWeekStr'];
+ isActive = json['IsActive'];
+ createdOn = json['CreatedOn'];
+ createdBy = json['CreatedBy'];
+ projectOutSA = json['ProjectOutSA'];
+ dayOfWeekStrN = json['DayOfWeekStrN'];
+ if (json['ShiftTimings'] != null) {
+ shiftTimings = [];
+ json['ShiftTimings'].forEach((v) {
+ shiftTimings!.add(new ShiftTimings.fromJson(v));
+ });
+ }
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['ID'] = this.iD;
+ data['ServiceID'] = this.serviceID;
+ data['DayOfWeek'] = this.dayOfWeek;
+ data['DayOfWeekStr'] = this.dayOfWeekStr;
+ data['IsActive'] = this.isActive;
+ data['CreatedOn'] = this.createdOn;
+ data['CreatedBy'] = this.createdBy;
+ data['ProjectOutSA'] = this.projectOutSA;
+ data['DayOfWeekStrN'] = this.dayOfWeekStrN;
+ if (this.shiftTimings != null) {
+ data['ShiftTimings'] = this.shiftTimings!.map((v) => v.toJson()).toList();
+ }
+ return data;
+ }
+}
+
+class ShiftTimings {
+ String? endTime;
+ int? shiftID;
+ String? startTime;
+
+ ShiftTimings({this.endTime, this.shiftID, this.startTime});
+
+ ShiftTimings.fromJson(Map json) {
+ endTime = json['EndTime'];
+ shiftID = json['ShiftID'];
+ startTime = json['StartTime'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['EndTime'] = this.endTime;
+ data['ShiftID'] = this.shiftID;
+ data['StartTime'] = this.startTime;
+ return data;
+ }
+}
diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart
index e9f60f5c..f9bcef45 100644
--- a/lib/generated/locale_keys.g.dart
+++ b/lib/generated/locale_keys.g.dart
@@ -1646,5 +1646,6 @@ abstract class LocaleKeys {
static const twoWaySubtitle = 'twoWaySubtitle';
static const toHospitalSubtitle = 'toHospitalSubtitle';
static const fromHospitalSubtitle = 'fromHospitalSubtitle';
+ static const clinicSchedule = 'clinicSchedule';
}
diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart
index 673532ac..12b09041 100644
--- a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart
+++ b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart
@@ -384,20 +384,20 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget {
}
// Show one combined retry dialog for all missing permissions
- final missingNames = missing.map((p) => LiveCarePermissionService.instance.friendlyName(p)).join(' and ');
- final retry = await showDialog(
- context: context,
- builder: (c) => AlertDialog(
- title: const Text('Permissions required'),
- content: Text('$missingNames permission${missing.length > 1 ? 's are' : ' is'} required to start the video call. Retry now?'),
- actions: [
- TextButton(onPressed: () => Navigator.of(c).pop(false), child: const Text('Cancel')),
- TextButton(onPressed: () => Navigator.of(c).pop(true), child: const Text('Retry')),
- ],
- ),
- );
-
- if (retry != true) return false;
+ // final missingNames = missing.map((p) => LiveCarePermissionService.instance.friendlyName(p)).join(' and ');
+ // final retry = await showDialog(
+ // context: context,
+ // builder: (c) => AlertDialog(
+ // title: const Text('Permissions required'),
+ // content: Text('$missingNames permission${missing.length > 1 ? 's are' : ' is'} required to start the video call. Retry now?'),
+ // actions: [
+ // TextButton(onPressed: () => Navigator.of(c).pop(false), child: const Text('Cancel')),
+ // TextButton(onPressed: () => Navigator.of(c).pop(true), child: const Text('Retry')),
+ // ],
+ // ),
+ // );
+ //
+ // if (retry != true) return false;
// Request only the missing permissions
final newStatuses = {};
@@ -425,7 +425,8 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget {
return false;
}
- return cameraGranted && micGranted && notifGranted && alertWindowGranted;
+ // return cameraGranted && micGranted && notifGranted && alertWindowGranted;
+ return cameraGranted && micGranted && notifGranted;
}
// Future askVideoCallPermission() async {
diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart
index da12f3ef..0ea348e0 100644
--- a/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart
+++ b/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart
@@ -82,20 +82,34 @@ class _ImmediateLiveCarePendingRequestPageState extends State(
- valueListenable: immediateLiveCareVM.durationNotifier,
- builder: (context, duration, child) {
- return Column(
- mainAxisAlignment: MainAxisAlignment.center,
+ LocaleKeys.immediateLiveCareRequest.tr(context: context).toText16(isBold: true),
+ SizedBox(height: 10.h),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Wrap(
children: [
- buildTime(duration),
+ AppCustomChipWidget(
+ labelText: immediateLiveCareViewModel.patientLiveCareHistoryList.isNotEmpty ? immediateLiveCareViewModel.patientLiveCareHistoryList[0].stringCallStatus : "",
+ backgroundColor: AppColors.warningColorYellow.withValues(alpha: 0.20),
+ textColor: AppColors.alertColor,
+ ),
+ SizedBox(width: 8.w),
+ AppCustomChipWidget(
+ icon: AppAssets.appointment_calendar_icon,
+ labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(immediateLiveCareViewModel.patientLiveCareHistoryList[0].arrivalTime), false)),
],
- );
- },
+ ),
+ Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
+ // Lottie.asset(AppAnimations.pending_loading_animation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 80.h, height: 80.h, fit: BoxFit.cover),
+ ],
),
SizedBox(height: 8.h),
+ SizedBox(height: 8.h),
+ LocaleKeys.yourTurnIsAfterPatients
+ .tr(namedArgs: {'count': (immediateLiveCareViewModel.patientLiveCareHistoryList[0].patCount ?? 0).toString()}, context: context).toText14(weight: FontWeight.w500),
+ // "Your turn is after ${immediateLiveCareViewModel.patientLiveCareHistoryList[0].patCount} patients.".toText16(isBold: true),
+ SizedBox(height: 8.h),
],
),
),
@@ -113,31 +127,24 @@ class _ImmediateLiveCarePendingRequestPageState extends State(
+ valueListenable: immediateLiveCareVM.durationNotifier,
+ builder: (context, duration, child) {
+ return Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ buildTime(duration),
+ ],
+ );
+ },
+ ),
SizedBox(height: 8.h),
],
),
),
- )
+ ),
],
),
),
diff --git a/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart b/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart
index a83dfa05..870c8ad8 100644
--- a/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart
+++ b/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart
@@ -96,7 +96,9 @@ class _SelectImmediateLiveCareClinicPageState extends State().navigatorKey.currentContext!,
+ child: ListView.separated(
+ shrinkWrap: true,
+ itemBuilder: (_, index) {
+ return DecoratedBox(
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: AppColors.whiteColor,
+ borderRadius: 20.h,
+ hasShadow: false,
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ spacing: 8.h,
+ children: [
+ checkInOptionCard(AppAssets.calendarGrey, immediateLiveCareViewModel.liveCareClinicScheduleList[index].dayOfWeekStr!,
+ "${immediateLiveCareViewModel.liveCareClinicScheduleList[index].shiftTimings!.first.startTime} to ${immediateLiveCareViewModel.liveCareClinicScheduleList[index].shiftTimings!.first.endTime}"),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ).paddingSymmetrical(0.h, 0.h).onPress(() {});
+ },
+ separatorBuilder: (_, __) => SizedBox(height: 16.h),
+ itemCount: immediateLiveCareViewModel.liveCareClinicScheduleList.length),
+ title: LocaleKeys.clinicSchedule.tr(),
+ isCloseButtonVisible: true,
+ useSafeArea: true,
+ isFullScreen: true);
+ });
+ }
+
+ onImmediateLiveCareClinicSelected(GetLiveCareClinicListResponseModel liveCareClinic) {
+ //TODO: add implementation to show clinic schedule
+ // if (liveCareClinic.isOnline == 1) {
+ showCommonBottomSheetWithoutHeight(GetIt.instance().navigatorKey.currentContext!, child: SelectLiveCareCallType(immediateLiveCareViewModel: immediateLiveCareViewModel),
+ callBackFunc: () async {
+ if (immediateLiveCareViewModel.liveCareSelectedCallType != 0) {
+ immediateLiveCareViewModel.setImmediateLiveCareSelectedClinic(liveCareClinic);
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingFeesPleaseWait.tr());
+ await immediateLiveCareViewModel.getLiveCareImmediateAppointmentFees(onSuccess: (val) {
+ LoaderBottomSheet.hideLoader();
+ Navigator.of(GetIt.instance().navigatorKey.currentContext!).push(
+ CustomPageRoute(
+ page: ImmediateLiveCarePaymentDetails(),
+ ),
+ );
+ }, onError: (err) {
+ LoaderBottomSheet.hideLoader();
+ showCommonBottomSheetWithoutHeight(
+ GetIt.instance().navigatorKey.currentContext!,
+ child: Utils.getErrorWidget(loadingText: err),
+ callBackFunc: () {},
+ isFullScreen: false,
+ isCloseButtonVisible: true,
+ );
+ });
+ }
+ }, title: LocaleKeys.selectLiveCareCallType.tr(), isCloseButtonVisible: true, isFullScreen: false);
+ }
+
+ Widget checkInOptionCard(String icon, String title, String subTitle) {
+ return Container(
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+ color: AppColors.whiteColor,
+ borderRadius: 20.h,
+ hasShadow: false,
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ title.toText16(isBold: true, color: AppColors.textColor),
+ SizedBox(height: 8.h),
+ Row(
+ children: [
+ AppCustomChipWidget(
+ icon: AppAssets.appointment_time_icon,
+ iconColor: AppColors.textColor,
+ labelText: subTitle.split("to").first.trim(),
+ ),
+ SizedBox(width: 8.w),
+ Utils.buildSvgWithAssets(
+ icon: AppAssets.arrow_forward,
+ height: 24.h,
+ width: 24.h,
+ iconColor: AppColors.textColor,
+ ),
+ SizedBox(width: 8.w),
+ AppCustomChipWidget(
+ icon: AppAssets.appointment_time_icon,
+ iconColor: AppColors.textColor,
+ labelText: subTitle.split("to")[1].trim(),
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ],
+ ).paddingAll(16.h),
+ );
+ }
}
diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart
index 32525234..eae47675 100644
--- a/lib/presentation/home/landing_page.dart
+++ b/lib/presentation/home/landing_page.dart
@@ -1006,15 +1006,33 @@ class _LandingPageState extends State {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.immediateLiveCareRequest.tr(context: context).toText16(isBold: true),
- SizedBox(height: 10.h),
- _buildLiveCareHeader(liveCareData),
- SizedBox(height: 10.h),
- _buildLiveCareGreeting(),
- SizedBox(height: 8.h),
- _buildLiveCareQueueInfo(liveCareData.patCount),
- SizedBox(height: 8.h),
- _buildLiveCareWaitingTime(),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ LocaleKeys.immediateLiveCareRequest.tr(context: context).toText16(isBold: true),
+ SizedBox(height: 10.h),
+ _buildLiveCareHeader(liveCareData),
+ SizedBox(height: 10.h),
+ SizedBox(height: 8.h),
+ _buildLiveCareQueueInfo(liveCareData.patCount),
+ SizedBox(height: 25.h),
+ ],
+ ),
+ CustomButton(
+ text: LocaleKeys.viewDetails.tr(context: context),
+ onPressed: () {},
+ backgroundColor: AppColors.warningColorYellow.withValues(alpha: 0.20),
+ textColor: AppColors.alertColor,
+ borderColor: AppColors.infoBannerBgColor,
+ fontSize: 12.f,
+ fontWeight: FontWeight.w600,
+ borderRadius: 12.r,
+ padding: EdgeInsets.symmetric(horizontal: 10.w),
+ height: 40.h,
+ iconColor: AppColors.whiteColor,
+ iconSize: 18.h,
+ ),
+ // _buildLiveCareWaitingTime(),
],
),
),
@@ -1069,10 +1087,7 @@ class _LandingPageState extends State {
// LiveCare Card: Queue position info
Widget _buildLiveCareQueueInfo(int? patCount) {
- return LocaleKeys.yourTurnIsAfterPatients.tr(
- namedArgs: {'count': (patCount ?? 0).toString()},
- context: context,
- ).toText14(isBold: true);
+ return LocaleKeys.yourTurnIsAfterPatients.tr(namedArgs: {'count': (patCount ?? 0).toString()}, context: context).toText14(weight: FontWeight.w500);
}
// LiveCare Card: Waiting time counter