Compare commits

...

16 Commits

Author SHA1 Message Date
Sultan khan e70f7aa7e3 Merge branch 'master' of http://34.17.182.140/Haroon6138/HMG_Patient_App_New into dev_sultan 1 day ago
Haroon6138 f649767fc0 Merge pull request 'haroon_dev' (#286) from haroon_dev into master
Reviewed-on: https://34.17.182.140/Haroon6138/HMG_Patient_App_New/pulls/286
1 day ago
haroon amjad df8ab0dab5 Merge branch 'master' into haroon_dev 1 day ago
haroon amjad 9e9344cd0f updates 1 day ago
Sultan khan 46fda4e59d Merge branch 'master' of http://34.17.182.140/Haroon6138/HMG_Patient_App_New into dev_sultan 1 day ago
khansultan1 d60170c05f Merge pull request 'Localization' (#285) from dev_aamir into master
Reviewed-on: #285
1 day ago
Sultan khan 41f971fd01 Merge branch 'master' of http://34.17.182.140/Haroon6138/HMG_Patient_App_New into dev_sultan 1 day ago
aamir-csol 877a7f083e Merge branch 'master' into dev_aamir 2 days ago
aamir-csol 79b0c695c2 Translation 2 days ago
Haroon6138 2a4b80ff99 Merge pull request 'haroon_dev' (#284) from haroon_dev into master
Reviewed-on: https://34.17.182.140/Haroon6138/HMG_Patient_App_New/pulls/284
2 days ago
haroon amjad 782cd01b4b updates 2 days ago
haroon amjad bd89a840a0 updates 2 days ago
haroon amjad 9adac10d39 Merge branch 'master' into haroon_dev 2 days ago
khansultan1 8485018a6c Merge pull request 'dev_sultan' (#283) from dev_sultan into master
Reviewed-on: #283
2 days ago
haroon amjad 81e7d76f3f Merge branch 'Android_16_KB_page_size' into haroon_dev 2 days ago
haroon amjad c12c90651e 16 KB page alignment updates 2 days ago

@ -22,7 +22,8 @@ android {
namespace = "com.cloudsolutions.HMGPatientApp" namespace = "com.cloudsolutions.HMGPatientApp"
compileSdk = 36 compileSdk = 36
// Using NDK 26 for better compatibility with Zoom SDK native libraries // Using NDK 26 for better compatibility with Zoom SDK native libraries
ndkVersion = "27.0.12077973" // ndkVersion = "27.0.12077973"
ndkVersion = "28.2.13676358"
// ndkVersion = "25.1.8937393" // ndkVersion = "25.1.8937393"
sourceSets { sourceSets {
@ -105,7 +106,8 @@ android {
"lib/arm64-v8a/libc++_shared.so", "lib/arm64-v8a/libc++_shared.so",
"**/*.so" "**/*.so"
) )
useLegacyPackaging = true // useLegacyPackaging = true
useLegacyPackaging = false
// Keep Zoom SDK libraries unstripped to preserve symbols // Keep Zoom SDK libraries unstripped to preserve symbols
keepDebugSymbols += listOf( keepDebugSymbols += listOf(
"*/libzoom_util.so", "*/libzoom_util.so",
@ -177,14 +179,15 @@ dependencies {
// implementation("androidx.room:room-runtime:$room_version") // implementation("androidx.room:room-runtime:$room_version")
// annotationProcessor("androidx.room:room-compiler:$room_version") // annotationProcessor("androidx.room:room-compiler:$room_version")
implementation("net.zetetic:android-database-sqlcipher:4.5.4") // implementation("net.zetetic:android-database-sqlcipher:4.5.4")
implementation("com.intuit.ssp:ssp-android:1.1.0") implementation("com.intuit.ssp:ssp-android:1.1.0")
implementation("com.intuit.sdp:sdp-android:1.1.0") implementation("com.intuit.sdp:sdp-android:1.1.0")
implementation("com.github.bumptech.glide:glide:4.16.0") implementation("com.github.bumptech.glide:glide:4.16.0")
annotationProcessor("com.github.bumptech.glide:compiler:4.16.0") annotationProcessor("com.github.bumptech.glide:compiler:4.16.0")
implementation("com.mapbox.maps:android:11.5.0") // implementation("com.mapbox.maps:android:11.5.0")
implementation("com.mapbox.maps:android-ndk27:11.22.0")
implementation("com.mapbox.mapboxsdk:mapbox-sdk-turf:7.3.1") implementation("com.mapbox.mapboxsdk:mapbox-sdk-turf:7.3.1")
// implementation("com.mapbox.maps:android:11.4.0") // implementation("com.mapbox.maps:android:11.4.0")
@ -208,7 +211,7 @@ dependencies {
implementation("androidx.appcompat:appcompat:1.7.1") implementation("androidx.appcompat:appcompat:1.7.1")
implementation("com.google.android.material:material:1.12.0") implementation("com.google.android.material:material:1.12.0")
implementation("pl.droidsonroids.gif:android-gif-drawable:1.2.25") implementation("pl.droidsonroids.gif:android-gif-drawable:1.2.29")
implementation("com.mapbox.mapboxsdk:mapbox-sdk-turf:7.3.1") implementation("com.mapbox.mapboxsdk:mapbox-sdk-turf:7.3.1")
androidTestImplementation("androidx.test:core:1.6.1") androidTestImplementation("androidx.test:core:1.6.1")

@ -42,6 +42,7 @@
tools:node="remove" /> tools:node="remove" />
<!-- Gallery/Photo permissions for Android 13+ (API 33+) --> <!-- Gallery/Photo permissions for Android 13+ (API 33+) -->
<!-- <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" tools:node="remove" />-->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" tools:node="remove" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" tools:node="remove" />

@ -2,7 +2,7 @@
android.enableR8=true android.enableR8=true
android.enableJetifier=true android.enableJetifier=true
android.useDeprecatedNdk=true android.useDeprecatedNdk=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.daemon=true org.gradle.daemon=true
org.gradle.parallel=true org.gradle.parallel=true
org.gradle.configureondemand=true org.gradle.configureondemand=true

@ -395,7 +395,7 @@
"selectCity": "اختر المدينة", "selectCity": "اختر المدينة",
"city": "المدينة", "city": "المدينة",
"distance": "المسافة", "distance": "المسافة",
"myAccount": "حسابي", "myAccount": "المستفيد",
"otherAccount": "حساب آخر", "otherAccount": "حساب آخر",
"selectBeneficiary": "اختر المستفيد", "selectBeneficiary": "اختر المستفيد",
"confirmThePayment": "تأكيد الدفع", "confirmThePayment": "تأكيد الدفع",
@ -630,11 +630,11 @@
"viewSubCategorise": "عرض جميع الفئات الفرعية", "viewSubCategorise": "عرض جميع الفئات الفرعية",
"categorise": "الفئات", "categorise": "الفئات",
"wishList": "قائمة الرغبات", "wishList": "قائمة الرغبات",
"myAccount": "حسابي", "myAccount": "المستفيد",
"cart": "عربة التسوق", "cart": "عربة التسوق",
"alhabibapp": "تطبيق الحبيب", "alhabibapp": "تطبيق الحبيب",
"searchProductHere": "ابحث عن المنتج هنا", "searchProductHere": "ابحث عن المنتج هنا",
"hhcNotAuthMsg": "تقدم هذه الخدمة مجموعة من خدمات الرعاية الصحية المنزلية، والمتابعة المستمرة والشاملة في أماكن إقامتهم لأولئك الذين لا يمكنهم الوصول إلى المرافق الصحية، مثل (تحليلات المختبر - الأشعة - التطعيمات - العلاج الطبيعي)، إلخ.", "hhcNotAuthMsg": "تقدم هذه الخدمة مجموعة من خدمات الرعاية الصحية المنزلية، والمتابعة المستمرة والشاملة في أماكن إقامتهم لأولئك الذين لا يمكنهم الوصول إلى المرافق الصحية، مثل (تحليلات المختبر - الأشعة - التطعيمات - العلاج الطبيعي، إلخ.",
"email": "البريد الإلكتروني *", "email": "البريد الإلكتروني *",
"book": "احجز", "book": "احجز",
"appointmentLabel": "موعد", "appointmentLabel": "موعد",
@ -1147,12 +1147,12 @@
"pleaseSelectTheLocation": "يرجى اختيار الموقع", "pleaseSelectTheLocation": "يرجى اختيار الموقع",
"viewLocationGoogleMaps": "الاتجاهات", "viewLocationGoogleMaps": "الاتجاهات",
"callAmbulance": "استدعاء سيارة إسعاف", "callAmbulance": "استدعاء سيارة إسعاف",
"requestAmbulanceInEmergency": "طلب سيارة إسعاف في حالة الطوارئ من المنزل أو المستشفى", "requestAmbulanceInEmergency": "طلب سيارة اسعاف للمساعدة الفورية في الحالات الطارئة.",
"confirmation": "استمرار", "confirmation": "استمرار",
"areYouSureYouWantToCallAmbulance": "هل تود تأكيد طلب سيارة الإسعاف؟", "areYouSureYouWantToCallAmbulance": "هل تود تأكيد طلب سيارة الإسعاف؟",
"getDetailsOfNearestBranch": "الحصول على تفاصيل أقرب مركز طوارئ والاتجاهات إليه", "getDetailsOfNearestBranch": "الحصول على تفاصيل أقرب مركز طوارئ والاتجاهات إليه",
"areYouSureYouWantToCallRRT": "هل تريد استدعاء فريق الاستجابة السريعة؟", "areYouSureYouWantToCallRRT": "هل تريد استدعاء فريق الاستجابة السريعة؟",
"priorERCheckInToSkipLine": "تسجيل الوصول المسبق في الطوارئ لتجاوز الطابور والدفع في الاستقبال.", "priorERCheckInToSkipLine": "سجّل وصولك قبل الحضور إلى قسم الطوارئ لتخطي الانتظار وتسهيل إجراءات الدفع.",
"areYouSureYouWantToMakeERCheckIn": "هل تريد إجراء تسجيل وصول الطوارئ؟", "areYouSureYouWantToMakeERCheckIn": "هل تريد إجراء تسجيل وصول الطوارئ؟",
"checkingYourERAppointmentStatus": "يرجى الانتظار…", "checkingYourERAppointmentStatus": "يرجى الانتظار…",
"transportOptions": "خيارات النقل", "transportOptions": "خيارات النقل",
@ -1723,7 +1723,7 @@
"overWeight": "وزن زائد", "overWeight": "وزن زائد",
"underWeight": "وزن ناقص", "underWeight": "وزن ناقص",
"nearestGate": "أقرب بوابة", "nearestGate": "أقرب بوابة",
"RRTDDetails": "فريق الاستجابة السريعة يقوم بتقديم رعاية صحية متكاملة لجميع الحالات الطارئة و المستقرة، الخدمة تشمل جميع الأعمار بما في ذلك حالات الأطفال.", "RRTDDetails": "يقدم فريق الاستجابة السريع رعاية صحية متكاملة لجميع الحالات الطارئة والمستقرة.",
"fromHospitalSubtitle": "نقل من المستشفى إلى منزلك", "fromHospitalSubtitle": "نقل من المستشفى إلى منزلك",
"normalMapType": "افتراضي", "normalMapType": "افتراضي",
"satelliteMapType": "قمر صناعي", "satelliteMapType": "قمر صناعي",
@ -1814,7 +1814,7 @@
"bloodDonationService": "التبرع \n بالدم", "bloodDonationService": "التبرع \n بالدم",
"bookAppointmentService": "حجز\nموعد", "bookAppointmentService": "حجز\nموعد",
"pinchToZoom": "اضغط للتكبير", "pinchToZoom": "اضغط للتكبير",
"gotIt": "فهمت", "gotIt": "حسنا",
"zoomIntoDetails": "قم بالتكبير لرؤية التفاصيل", "zoomIntoDetails": "قم بالتكبير لرؤية التفاصيل",
"pinchWithTwoFingersToZoom": "اضغط بإصبعين للتكبير", "pinchWithTwoFingersToZoom": "اضغط بإصبعين للتكبير",
"dragToMoveAround": "اسحب للتحرك", "dragToMoveAround": "اسحب للتحرك",
@ -1824,5 +1824,6 @@
"calendarPermissionAlertForAppointment": "يرجى منح إذن الوصول إلى التقويم من إعدادات التطبيق لضبط تذكير الموعد", "calendarPermissionAlertForAppointment": "يرجى منح إذن الوصول إلى التقويم من إعدادات التطبيق لضبط تذكير الموعد",
"rechargePageKey": "اختر المستفيد", "rechargePageKey": "اختر المستفيد",
"selectFamilyFile": "اختيار ", "selectFamilyFile": "اختيار ",
"ancillaryOrdersListNew": "طلبات غير مكتملة" "ancillaryOrdersListNew": "طلبات غير مكتملة",
"medicalReportNew": "التقارير الطبية"
} }

@ -620,7 +620,7 @@
"viewSubCategorise": "View All Sub Categories", "viewSubCategorise": "View All Sub Categories",
"categorise": "Categories", "categorise": "Categories",
"wishList": "WishList", "wishList": "WishList",
"myAccount": "My Account", "myAccount": "Beneficiary",
"cart": "Cart", "cart": "Cart",
"alhabibapp": "Al Habib app", "alhabibapp": "Al Habib app",
"searchProductHere": "Search Product here", "searchProductHere": "Search Product here",
@ -1714,7 +1714,7 @@
"overWeight": "OverWeight", "overWeight": "OverWeight",
"underWeight": "UnderWeight", "underWeight": "UnderWeight",
"nearestGate": "Nearest Gate", "nearestGate": "Nearest Gate",
"RRTDDetails": "Comprehensive medical services for urgent cases.", "RRTDDetails": "Request a specialized team that offers comprehensive medical services for urgent and stable cases.",
"fromHospitalSubtitle": "Transfer from the hospital back to your home", "fromHospitalSubtitle": "Transfer from the hospital back to your home",
"normalMapType": "Default", "normalMapType": "Default",
"satelliteMapType": "Satellite", "satelliteMapType": "Satellite",
@ -1814,7 +1814,8 @@
"calendarPermissionAlertForAppointment": "Please grant calendar access permission from app settings to set appointment reminder.", "calendarPermissionAlertForAppointment": "Please grant calendar access permission from app settings to set appointment reminder.",
"rechargePageKey": "Recharge Wallet", "rechargePageKey": "Recharge Wallet",
"selectFamilyFile": "Select", "selectFamilyFile": "Select",
"ancillaryOrdersListNew": "Ancillary Orders List" "ancillaryOrdersListNew": "Ancillary Orders List",
"medicalReportNew": "Medical Report"
} }

@ -0,0 +1,110 @@
#!/bin/bash
# Check ELF .so alignment in APK for 16KB page size compatibility
# Files must have PT_LOAD segments aligned to 16384 bytes (0x4000)
APK="${1:-/Users/mohamedmekawy/Documents/Work/HMG_Patient_App_New/android/app/release/app-release.apk}"
LLVM_READELF="/Users/mohamedmekawy/Library/Android/sdk/ndk/28.2.13676358/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-readelf"
EXTRACT_DIR="/tmp/apk_alignment_check"
REQUIRED_ALIGNMENT=16384 # 16 KB
echo "========================================"
echo " ELF Alignment Check for 16KB Page Size"
echo "========================================"
echo "APK: $APK"
echo ""
if [ ! -f "$APK" ]; then
echo "ERROR: APK not found at $APK"
exit 1
fi
# Clean and extract APK
rm -rf "$EXTRACT_DIR"
mkdir -p "$EXTRACT_DIR"
unzip -q "$APK" -d "$EXTRACT_DIR"
# Find all .so files
SO_FILES=$(find "$EXTRACT_DIR" -name "*.so")
if [ -z "$SO_FILES" ]; then
echo "No .so files found in APK."
exit 0
fi
FAILED=()
PASSED=()
for SO in $SO_FILES; do
RELATIVE="${SO#$EXTRACT_DIR/}"
# Check if it's a valid ELF
MAGIC=$(xxd -l 4 "$SO" 2>/dev/null | head -1)
if [[ "$MAGIC" != *"7f45 4c46"* ]]; then
continue
fi
# Use llvm-readelf from NDK
READELF_OUTPUT=$("$LLVM_READELF" -l "$SO" 2>/dev/null)
if [ -z "$READELF_OUTPUT" ]; then
echo "⚠️ SKIP (readelf unavailable): $RELATIVE"
continue
fi
# Extract LOAD segment alignments
MISALIGNED=false
while IFS= read -r line; do
if [[ "$line" == *"LOAD"* ]]; then
# Get the last field (Align column)
ALIGN=$(echo "$line" | awk '{print $NF}')
# Convert hex to decimal if needed
if [[ "$ALIGN" == 0x* ]]; then
ALIGN_DEC=$((ALIGN))
else
ALIGN_DEC=$ALIGN
fi
if [[ "$ALIGN_DEC" =~ ^[0-9]+$ ]]; then
if [ "$ALIGN_DEC" -lt "$REQUIRED_ALIGNMENT" ] && [ "$ALIGN_DEC" -gt 0 ]; then
MISALIGNED=true
ALIGN_KB=$((ALIGN_DEC / 1024))
echo "❌ FAIL (${ALIGN_KB}KB aligned): $RELATIVE"
break
fi
fi
fi
done <<< "$READELF_OUTPUT"
if [ "$MISALIGNED" = false ]; then
ALIGN_LINE=$(echo "$READELF_OUTPUT" | grep "LOAD" | head -1 | awk '{print $NF}')
echo "✅ PASS ($ALIGN_LINE aligned): $RELATIVE"
PASSED+=("$RELATIVE")
else
FAILED+=("$RELATIVE")
fi
done
echo ""
echo "========================================"
echo "SUMMARY"
echo "========================================"
echo "✅ Passed (16KB+ aligned): ${#PASSED[@]}"
echo "❌ Failed (< 16KB aligned): ${#FAILED[@]}"
if [ ${#FAILED[@]} -gt 0 ]; then
echo ""
echo "The following .so files are NOT 16KB page aligned:"
for f in "${FAILED[@]}"; do
echo " - $f"
done
echo ""
echo "These files will cause issues on Android 15+ devices with 16KB page size."
else
echo ""
echo "All .so files are 16KB page aligned. ✅"
fi
# Cleanup
rm -rf "$EXTRACT_DIR"

@ -320,10 +320,12 @@ class MyAppointmentsViewModel extends ChangeNotifier {
// if (patientArrivedAppointmentsHistoryList.isNotEmpty) { // if (patientArrivedAppointmentsHistoryList.isNotEmpty) {
isPatientHasQueueAppointment = false; isPatientHasQueueAppointment = false;
notifyListeners(); notifyListeners();
if(patientArrivedAppointmentsHistoryList.isNotEmpty) {
if (Utils.isDateToday(DateUtil.convertStringToDate(patientArrivedAppointmentsHistoryList.first.appointmentDate))) { if (Utils.isDateToday(DateUtil.convertStringToDate(patientArrivedAppointmentsHistoryList.first.appointmentDate))) {
// getPatientAppointmentQueueDetails(appointmentNo: patientArrivedAppointmentsHistoryList.first.appointmentNo, patientID: patientArrivedAppointmentsHistoryList.first.patientID); // getPatientAppointmentQueueDetails(appointmentNo: patientArrivedAppointmentsHistoryList.first.appointmentNo, patientID: patientArrivedAppointmentsHistoryList.first.patientID);
getPatientAppointmentQueueDetails(); getPatientAppointmentQueueDetails();
} }
}
// } // }
debugPrint('Upcoming Appointments: ${patientUpcomingAppointmentsHistoryList.length}'); debugPrint('Upcoming Appointments: ${patientUpcomingAppointmentsHistoryList.length}');

@ -1803,11 +1803,20 @@ abstract class LocaleKeys {
static const watchUsOnYoutube = 'watchUsOnYoutube'; static const watchUsOnYoutube = 'watchUsOnYoutube';
static const connectOnLinkedin = 'connectOnLinkedin'; static const connectOnLinkedin = 'connectOnLinkedin';
static const riskFactorPageTitle = 'riskFactorPageTitle'; static const riskFactorPageTitle = 'riskFactorPageTitle';
static const bloodDonationService = 'bloodDonationService';
static const bookAppointmentService = 'bookAppointmentService';
static const pinchToZoom = 'pinchToZoom';
static const gotIt = 'gotIt';
static const zoomIntoDetails = 'zoomIntoDetails';
static const pinchWithTwoFingersToZoom = 'pinchWithTwoFingersToZoom';
static const dragToMoveAround = 'dragToMoveAround';
static const startExploring = 'startExploring';
static const symptomsCheckSuggestions = 'symptomsCheckSuggestions'; static const symptomsCheckSuggestions = 'symptomsCheckSuggestions';
static const appointmentArrived = 'appointmentArrived'; static const appointmentArrived = 'appointmentArrived';
static const calendarPermissionAlertForAppointment = 'calendarPermissionAlertForAppointment'; static const calendarPermissionAlertForAppointment = 'calendarPermissionAlertForAppointment';
static const rechargePageKey = 'rechargePageKey'; static const rechargePageKey = 'rechargePageKey';
static const selectFamilyFile = 'selectFamilyFile'; static const selectFamilyFile = 'selectFamilyFile';
static const ancillaryOrdersListNew = 'ancillaryOrdersListNew'; static const ancillaryOrdersListNew = 'ancillaryOrdersListNew';
static const medicalReportNew = 'medicalReportNew';
} }

@ -528,6 +528,8 @@ class _LandingPageState extends State<LandingPage> {
}, },
), ),
) )
: immediateLiveCareVM.patientHasPendingLiveCareRequest
? _buildLiveCareRequestCard().paddingSymmetrical(24.h, 16.h)
: Container( : Container(
width: double.infinity, 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),

@ -42,7 +42,7 @@ class MedicalReportCard extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
LocaleKeys.medicalReport.tr().toText18( LocaleKeys.medicalReportNew.tr().toText18(
isBold: true, isBold: true,
weight: FontWeight.w700, weight: FontWeight.w700,
).toShimmer2(isShow: isLoading), ).toShimmer2(isShow: isLoading),

@ -776,7 +776,7 @@ class _FamilyCardsState extends State<FamilyCards> {
widget.onSelect(profile); widget.onSelect(profile);
// if (canSwitch) widget.onSelect(profile); // if (canSwitch) widget.onSelect(profile);
}, },
text: LocaleKeys.select.tr(context: context), text: widget.isForWalletRecharge ? LocaleKeys.selectFamilyFile.tr() : LocaleKeys.select.tr(context: context),
backgroundColor: AppColors.secondaryLightRedColor, backgroundColor: AppColors.secondaryLightRedColor,
borderColor: AppColors.secondaryLightRedColor, borderColor: AppColors.secondaryLightRedColor,
textColor: AppColors.primaryRedColor, textColor: AppColors.primaryRedColor,

@ -119,7 +119,7 @@ class SmartwatchHomePage extends StatelessWidget {
Image.asset("assets/images/png/smartwatches/galaxy_watch_8_classic.jpeg", fit: BoxFit.contain, width: 136.w, height: 136.h).paddingSymmetrical(24.w, 8.h), Image.asset("assets/images/png/smartwatches/galaxy_watch_8_classic.jpeg", fit: BoxFit.contain, width: 136.w, height: 136.h).paddingSymmetrical(24.w, 8.h),
"Samsung Watch".needTranslation.toText16(isBold: true), "Samsung Watch".needTranslation.toText16(isBold: true),
CustomButton( CustomButton(
text: LocaleKeys.select.tr(context: context), text: LocaleKeys.selectSmartWatch.tr(context: context),
onPressed: () { onPressed: () {
context.read<HealthProvider>().setSelectedWatchType(SmartWatchTypes.samsung, "assets/images/png/smartwatches/galaxy_watch_8_classic.jpeg"); context.read<HealthProvider>().setSelectedWatchType(SmartWatchTypes.samsung, "assets/images/png/smartwatches/galaxy_watch_8_classic.jpeg");
getIt.get<NavigationService>().pushPage(page: SmartwatchInstructionsPage( getIt.get<NavigationService>().pushPage(page: SmartwatchInstructionsPage(
@ -151,7 +151,7 @@ class SmartwatchHomePage extends StatelessWidget {
Image.asset("assets/images/png/smartwatches/Huawei_Watch.png", width: 136.w, height: 136.h).paddingSymmetrical(24.w, 8.h), Image.asset("assets/images/png/smartwatches/Huawei_Watch.png", width: 136.w, height: 136.h).paddingSymmetrical(24.w, 8.h),
"Huawei Watch".needTranslation.toText16(isBold: true), "Huawei Watch".needTranslation.toText16(isBold: true),
CustomButton( CustomButton(
text: LocaleKeys.select.tr(context: context), text: LocaleKeys.selectSmartWatch.tr(context: context),
onPressed: () { onPressed: () {
// context.read<HealthProvider>().setSelectedWatchType(SmartWatchTypes.huawei, "assets/images/png/smartwatches/Huawei_Watch.png"); // context.read<HealthProvider>().setSelectedWatchType(SmartWatchTypes.huawei, "assets/images/png/smartwatches/Huawei_Watch.png");
// getIt.get<NavigationService>().pushPage(page: SmartwatchInstructionsPage( // getIt.get<NavigationService>().pushPage(page: SmartwatchInstructionsPage(
@ -185,7 +185,7 @@ class SmartwatchHomePage extends StatelessWidget {
Image.asset("assets/images/png/smartwatches/Whoop_Watch.png", width: 136.w, height: 136.h).paddingSymmetrical(24.w, 8.h), Image.asset("assets/images/png/smartwatches/Whoop_Watch.png", width: 136.w, height: 136.h).paddingSymmetrical(24.w, 8.h),
"Whoop Watch".needTranslation.toText16(isBold: true), "Whoop Watch".needTranslation.toText16(isBold: true),
CustomButton( CustomButton(
text: LocaleKeys.select.tr(context: context), text: LocaleKeys.selectSmartWatch.tr(context: context),
onPressed: () { onPressed: () {
showUnavailableDialog(context); showUnavailableDialog(context);

@ -44,8 +44,8 @@ class _OrganSelectorPageState extends State<OrganSelectorPage> {
} }
Future<void> _checkAndShowTutorial() async { Future<void> _checkAndShowTutorial() async {
final hasSeenTutorial = cacheService.getBool(key: CacheConst.organSelectorTutorialShown) ?? false; // final hasSeenTutorial = cacheService.getBool(key: CacheConst.organSelectorTutorialShown) ?? false;
if (!hasSeenTutorial) { // if (!hasSeenTutorial) {
// Show tutorial after a short delay to ensure the screen is fully built // Show tutorial after a short delay to ensure the screen is fully built
await Future.delayed(const Duration(milliseconds: 500)); await Future.delayed(const Duration(milliseconds: 500));
if (mounted) { if (mounted) {
@ -53,7 +53,7 @@ class _OrganSelectorPageState extends State<OrganSelectorPage> {
_showTutorial = true; _showTutorial = true;
}); });
} }
} // }
} }
void _onTutorialComplete() async { void _onTutorialComplete() async {

@ -28,7 +28,7 @@ class BottomSheetUtils {
onSuccess: onSuccess, title: title, description: description, onMultiDateSuccess: onMultiDateSuccess, isMultiAllowed: isMultiAllowed); onSuccess: onSuccess, title: title, description: description, onMultiDateSuccess: onMultiDateSuccess, isMultiAllowed: isMultiAllowed);
return true; return true;
} else { } else {
await _showPermissionDeniedDialog(); await _showPermissionDeniedDialog(isForAppointment: isForAppointment);
return false; return false;
} }
} }

@ -2,8 +2,8 @@ name: hmg_patient_app_new
description: "New HMG Patient App" description: "New HMG Patient App"
publish_to: 'none' # Remove this line if you wish to publish to pub.dev publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 0.0.19+18 #version: 0.0.22+21
#version: 0.0.1+18 version: 0.0.1+20
environment: environment:
sdk: ">=3.6.0 <4.0.0" sdk: ">=3.6.0 <4.0.0"

Loading…
Cancel
Save