From 537d93915e50beee2fefadf6af57c4df546161a4 Mon Sep 17 00:00:00 2001 From: Haroon Amjad <> Date: Tue, 27 Jan 2026 23:10:27 +0300 Subject: [PATCH 1/2] Zoom SDK fixes --- lib/presentation/home/landing_page.dart | 1 + lib/services/zoom_service.dart | 33 +++++++++++++++++++++++++ lib/splashPage.dart | 15 +++++------ pubspec.yaml | 2 +- 4 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 lib/services/zoom_service.dart diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart index ab0d247..eca4eb7 100644 --- a/lib/presentation/home/landing_page.dart +++ b/lib/presentation/home/landing_page.dart @@ -52,6 +52,7 @@ import 'package:hmg_patient_app_new/presentation/todo_section/ancillary_procedur import 'package:hmg_patient_app_new/presentation/todo_section/widgets/ancillary_orders_list.dart'; import 'package:hmg_patient_app_new/routes/app_routes.dart'; import 'package:hmg_patient_app_new/services/cache_service.dart'; +import 'package:hmg_patient_app_new/services/zoom_service.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/chip/app_custom_chip_widget.dart'; diff --git a/lib/services/zoom_service.dart b/lib/services/zoom_service.dart new file mode 100644 index 0000000..9af543d --- /dev/null +++ b/lib/services/zoom_service.dart @@ -0,0 +1,33 @@ +// lib/services/zoom_service.dart +import 'package:flutter_zoom_videosdk/native/zoom_videosdk.dart'; + +class ZoomService { + static final ZoomService _instance = ZoomService._internal(); + factory ZoomService() => _instance; + ZoomService._internal(); + + ZoomVideoSdk? _zoom; + bool _isInitialized = false; + + Future initializeZoomSDK() async { + if (_isInitialized) return; + + try { + _zoom = ZoomVideoSdk(); + InitConfig initConfig = InitConfig( + domain: "zoom.us", + enableLog: true, // Enable for debugging + ); + + await _zoom!.initSdk(initConfig); + _isInitialized = true; + print("Zoom SDK initialized successfully"); + } catch (e) { + print("Error initializing Zoom SDK: $e"); + rethrow; + } + } + + ZoomVideoSdk? get zoom => _zoom; + bool get isInitialized => _isInitialized; +} \ No newline at end of file diff --git a/lib/splashPage.dart b/lib/splashPage.dart index b536661..33d3d23 100644 --- a/lib/splashPage.dart +++ b/lib/splashPage.dart @@ -19,6 +19,7 @@ import 'package:hmg_patient_app_new/presentation/tele_consultation/zoom/call_scr import 'package:hmg_patient_app_new/services/cache_service.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/services/notification_service.dart'; +import 'package:hmg_patient_app_new/services/zoom_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:lottie/lottie.dart'; @@ -55,7 +56,7 @@ class _SplashScreenState extends State { await notificationService.initialize(onNotificationClick: (payload) { // Handle notification click here }); - + await ZoomService().initializeZoomSDK(); if (isAppOpenedFromCall) { navigateToTeleConsult(); } else { @@ -68,12 +69,12 @@ class _SplashScreenState extends State { } } }); - var zoom = ZoomVideoSdk(); - InitConfig initConfig = InitConfig( - domain: "zoom.us", - enableLog: false, - ); - zoom.initSdk(initConfig); + // var zoom = ZoomVideoSdk(); + // InitConfig initConfig = InitConfig( + // domain: "zoom.us", + // enableLog: false, + // ); + // zoom.initSdk(initConfig); } navigateToTeleConsult() async { diff --git a/pubspec.yaml b/pubspec.yaml index 26903b6..491cf9a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -43,7 +43,7 @@ dependencies: lottie: ^3.3.1 flutter_ios_voip_kit_karmm: ^0.8.0 image_picker: ^1.2.0 - file_picker: ^10.3.2 + file_picker: 10.3.8 local_auth: ^2.3.0 share_plus: ^11.1.0 device_calendar_plus: ^0.3.1 -- 2.30.2 From 49542a91129b8c61e1fba3b55932391d96c83725 Mon Sep 17 00:00:00 2001 From: Haroon Amjad <> Date: Tue, 27 Jan 2026 23:26:21 +0300 Subject: [PATCH 2/2] updates & fixes --- lib/main.dart | 234 +++++++++--------- .../widgets/appointment_card.dart | 6 +- lib/presentation/home/landing_page.dart | 44 ++-- .../home/widgets/large_service_card.dart | 4 +- .../profile_settings/profile_settings.dart | 6 +- pubspec.yaml | 2 +- 6 files changed, 143 insertions(+), 153 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 82b758e..6010a05 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,5 @@ import 'dart:io'; -import 'package:device_preview/device_preview.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; @@ -91,124 +90,121 @@ Future callInitializations() async { void main() async { await callInitializations(); runApp( - DevicePreview( - enabled: false, - builder: (context) => EasyLocalization( - supportedLocales: const [ - Locale('en', 'US'), - Locale('ar', 'SA'), - ], - path: 'assets/langs', - fallbackLocale: Locale('en', 'US'), - child: MultiProvider(providers: [ - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ), - ChangeNotifierProvider( - create: (_) => getIt.get(), - ) - ], child: MyApp()), - ), // Wrap your app - ), + EasyLocalization( + supportedLocales: const [ + Locale('en', 'US'), + Locale('ar', 'SA'), + ], + path: 'assets/langs', + fallbackLocale: Locale('en', 'US'), + child: MultiProvider(providers: [ + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ), + ChangeNotifierProvider( + create: (_) => getIt.get(), + ) + ], child: MyApp()), + ), // Wrap your app ); } diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart index 6b0439f..e1748c3 100644 --- a/lib/presentation/appointments/widgets/appointment_card.dart +++ b/lib/presentation/appointments/widgets/appointment_card.dart @@ -175,15 +175,15 @@ class AppointmentCard extends StatelessWidget { AppCustomChipWidget( labelText: isLoading ? 'Cardiology' - : (patientAppointmentHistoryResponseModel.clinicName!.length > 15 - ? '${patientAppointmentHistoryResponseModel.clinicName!.substring(0, 12)}...' + : (patientAppointmentHistoryResponseModel.clinicName!.length > 20 + ? '${patientAppointmentHistoryResponseModel.clinicName!.substring(0, 20)}...' : patientAppointmentHistoryResponseModel.clinicName!), ).toShimmer2(isShow: isLoading), AppCustomChipWidget( labelText: isLoading ? 'Olaya' : patientAppointmentHistoryResponseModel.projectName!.length > 15 - ? '${patientAppointmentHistoryResponseModel.projectName!.substring(0, 12)}...' + ? '${patientAppointmentHistoryResponseModel.projectName!.substring(0, 15)}...' : patientAppointmentHistoryResponseModel.projectName!) .toShimmer2(isShow: isLoading), AppCustomChipWidget( diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart index d0d107b..e0c15d0 100644 --- a/lib/presentation/home/landing_page.dart +++ b/lib/presentation/home/landing_page.dart @@ -97,7 +97,6 @@ class _LandingPageState extends State { super.dispose(); } - @override void initState() { authVM = context.read(); @@ -207,20 +206,20 @@ class _LandingPageState extends State { children: [ Stack(children: [ if (appState.isAuthenticated) - Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 24.h, width: 24.h).onPress(() async { - if (appState.isAuthenticated) { - notificationsViewModel.setNotificationStatusID(2); - notificationsViewModel.getAllNotifications(); - Navigator.of(context).push( - CustomPageRoute( - page: NotificationsListPage(), - // page: LoginScreen(), - ), - ); - } else { - await authVM.onLoginPressed(); - } - }), + Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 24.h, width: 24.h).onPress(() async { + if (appState.isAuthenticated) { + notificationsViewModel.setNotificationStatusID(2); + notificationsViewModel.getAllNotifications(); + Navigator.of(context).push( + CustomPageRoute( + page: NotificationsListPage(), + // page: LoginScreen(), + ), + ); + } else { + await authVM.onLoginPressed(); + } + }), (appState.isAuthenticated && (int.parse(todoSectionVM.notificationsCount ?? "0") > 0)) ? Positioned( right: 0, @@ -245,7 +244,7 @@ class _LandingPageState extends State { ) : SizedBox.shrink(), ]), - Utils.buildSvgWithAssets(icon: AppAssets.indoor_nav_icon, height: 24.h, width: 24.h).onPress(() { + Utils.buildSvgWithAssets(icon: AppAssets.indoor_nav_icon, height: 24.h, width: 24.w).onPress(() { openIndoorNavigationBottomSheet(context); }), Utils.buildSvgWithAssets(icon: AppAssets.contact_icon, height: 24.h, width: 24.h).onPress(() { @@ -258,7 +257,7 @@ class _LandingPageState extends State { ); }), !appState.isAuthenticated - ? Utils.buildSvgWithAssets(icon: AppAssets.changeLanguageHomePageIcon, height: 18.h, width: 18.h).onPress(() { + ? Utils.buildSvgWithAssets(icon: AppAssets.changeLanguageHomePageIcon, height: 24.h, width: 24.h).onPress(() { context.setLocale(appState.isArabic() ? Locale('en', 'US') : Locale('ar', 'SA')); }) : SizedBox.shrink() @@ -322,7 +321,7 @@ class _LandingPageState extends State { LocaleKeys.appointmentsAndVisits.tr(context: context).toText16(weight: FontWeight.w600), Row( children: [ - LocaleKeys.viewAll.tr(context: context).toText14(color: AppColors.primaryRedColor,weight: FontWeight.w500), + LocaleKeys.viewAll.tr(context: context).toText14(color: AppColors.primaryRedColor, weight: FontWeight.w500), SizedBox(width: 2.h), Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 14.h), ], @@ -423,8 +422,7 @@ class _LandingPageState extends State { ) : Container( width: double.infinity, - decoration: RoundedRectangleBorder() - .toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true), child: Padding( padding: EdgeInsets.all(16.h), child: Column( @@ -484,11 +482,7 @@ class _LandingPageState extends State { backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.10), textColor: AppColors.primaryRedColor, ), - Utils.buildSvgWithAssets( - icon: AppAssets.appointment_checkin_icon, - width: 24.h, - height: 24.h, - iconColor: AppColors.primaryRedColor), + Utils.buildSvgWithAssets(icon: AppAssets.appointment_checkin_icon, width: 24.h, height: 24.h, iconColor: AppColors.primaryRedColor), ], ), SizedBox(height: 8.h), diff --git a/lib/presentation/home/widgets/large_service_card.dart b/lib/presentation/home/widgets/large_service_card.dart index 8222635..e25ed0b 100644 --- a/lib/presentation/home/widgets/large_service_card.dart +++ b/lib/presentation/home/widgets/large_service_card.dart @@ -223,11 +223,11 @@ class FadedLargeServiceCard extends StatelessWidget { ), ), SizedBox(width: 12.w), - serviceCardData.title.toText18(weight: FontWeight.w500, color: AppColors.textColor).expanded, + serviceCardData.title.tr(context: context).toText18(weight: FontWeight.w500, color: AppColors.textColor).expanded, ], ), SizedBox(height: 10.h), - serviceCardData.subtitle.toText14(weight: FontWeight.w500, color: AppColors.blackBgColor, letterSpacing: 0), + serviceCardData.subtitle.tr(context: context).toText14(weight: FontWeight.w500, color: AppColors.blackBgColor, letterSpacing: 0), SizedBox(height: 12.h), CustomButton( text: serviceCardData.isBold ? "Visit Pharmacy Online".needTranslation : LocaleKeys.bookNow.tr(context: context), diff --git a/lib/presentation/profile_settings/profile_settings.dart b/lib/presentation/profile_settings/profile_settings.dart index 88dfb13..a3c2667 100644 --- a/lib/presentation/profile_settings/profile_settings.dart +++ b/lib/presentation/profile_settings/profile_settings.dart @@ -71,7 +71,7 @@ class ProfileSettingsState extends State { } // Compute and clamp using sensible bounds (uses .h extension) - final double minH = 210.h; + final double minH = 215.h; final double maxH = 380.h; final double computed = (shorter * multiplier); @@ -420,7 +420,7 @@ class FamilyCardWidget extends StatelessWidget { ), ), ], - ).paddingOnly(top: 16.h, right: 16.w, left: 16.w, bottom: 12.h), + ).paddingOnly(top: 16.h, right: 16.w, left: 16.w, bottom: 0.h), 1.divider.paddingSymmetrical(16.w, 0.h), _buildActionButton(appState), ], @@ -451,7 +451,7 @@ class FamilyCardWidget extends StatelessWidget { borderColor: canSwitch ? AppColors.secondaryLightRedColor : AppColors.primaryRedColor, textColor: canSwitch ? AppColors.primaryRedColor : AppColors.whiteColor, iconColor: canSwitch ? AppColors.primaryRedColor : AppColors.whiteColor, - height: isFoldable ? 50.h : 40.h, + height: isFoldable ? 50.h : 45.h, fontSize: 14.f, ).paddingOnly(top: 12.h, right: 16.w, left: 16.w, bottom: 16.h); } diff --git a/pubspec.yaml b/pubspec.yaml index a8f62c8..02acec8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -83,7 +83,7 @@ dependencies: open_filex: ^4.7.0 flutter_swiper_view: ^1.1.8 flutter_callkit_incoming: ^3.0.0 - device_preview: ^1.3.1 +# device_preview: ^1.3.1 location: ^8.0.1 gms_check: ^1.0.4 -- 2.30.2