Merge pull request 'updates and fixes' (#240) from changes into master

Reviewed-on: #240
pull/243/head
khansultan1 1 day ago
commit 75bd5fbe15

@ -123,7 +123,7 @@
"forgotFileNoTitle": "نسيت الملف الطبي", "forgotFileNoTitle": "نسيت الملف الطبي",
"enterNationalId": "يرجى إدخال رقم الهاتف المحمول ورقم الهوية", "enterNationalId": "يرجى إدخال رقم الهاتف المحمول ورقم الهوية",
"profileInfo": "يرجى إدخال معلومات الملف الشخصي", "profileInfo": "يرجى إدخال معلومات الملف الشخصي",
"submit": "إرسال", "submit": "تحديث",
"forgotDesc": "أدخل رقم الهاتف المحمول لاستلام رقم الملف الطبي عبر الرسائل القصيرة", "forgotDesc": "أدخل رقم الهاتف المحمول لاستلام رقم الملف الطبي عبر الرسائل القصيرة",
"dob": "تاريخ الميلاد:", "dob": "تاريخ الميلاد:",
"hijriDate": "الت<D984><D8AA>ريخ الهجري", "hijriDate": "الت<D984><D8AA>ريخ الهجري",
@ -1295,7 +1295,7 @@
"noInsuranceApprovals": "لم تحصل على أي موافقات تأمينية حتى الآن.", "noInsuranceApprovals": "لم تحصل على أي موافقات تأمينية حتى الآن.",
"noInsuranceWithHMG": "ليس لديك تأمين مسجل لدى مجموعة الحبيب الطبية.", "noInsuranceWithHMG": "ليس لديك تأمين مسجل لدى مجموعة الحبيب الطبية.",
"referenceRange": "النطاق المرجعي", "referenceRange": "النطاق المرجعي",
"downloadReport": نزيل التقرير", "downloadReport": حميل التقارير",
"generatingReport": "جارٍ إنشاء التقرير، يرجى الانتظار...", "generatingReport": "جارٍ إنشاء التقرير، يرجى الانتظار...",
"noLabResults": "ليس لديك أي نتائج مختبرية حتى الآن.", "noLabResults": "ليس لديك أي نتائج مختبرية حتى الآن.",
"labResultDetails": "تفاصيل نتائج المختبر", "labResultDetails": "تفاصيل نتائج المختبر",
@ -1375,7 +1375,7 @@
"notificationsSettings": "إعدادات الإشعارات", "notificationsSettings": "إعدادات الإشعارات",
"touchIDFaceIDServices": "خدمات Touch ID / Face ID", "touchIDFaceIDServices": "خدمات Touch ID / Face ID",
"personalInformation": "المعلومات الشخصية", "personalInformation": "المعلومات الشخصية",
"updateEmailAddress": "تحديث عنوان البريد الإلكتروني", "updateEmailAddress": "عنوان البريد الالكتروني",
"helpAndSupport": "المساعدة والدعم", "helpAndSupport": "المساعدة والدعم",
"permissionsProfile": "الأذونات", "permissionsProfile": "الأذونات",
"privacyPolicy": "سياسة الخصوصية", "privacyPolicy": "سياسة الخصوصية",
@ -1565,8 +1565,8 @@
"generateAiAnalysis": "قم بإجراء تحليل لهذا الطلب AI", "generateAiAnalysis": "قم بإجراء تحليل لهذا الطلب AI",
"aiAnalysis": "AI تحليل", "aiAnalysis": "AI تحليل",
"prediction": "تنبؤ", "prediction": "تنبؤ",
"prevention": "وقاية", "prevention": "الوقاية",
"disclaimer": "تنصل", "disclaimer": "تنبيه",
"thisAboveInfo": "المعلومات المذكورة أعلاه مُولّدة بواسطة AI بناءً على نتائج تحاليلك المخبرية، وهي لأغراض إعلامية فقط. لا ينبغي اعتبارها تشخيصًا طبيًا أو خطة علاجية. استشر طبيبك دائمًا للحصول على نصيحة طبية مُخصصة قبل اتخاذ أي قرارات تتعلق بصحتك.", "thisAboveInfo": "المعلومات المذكورة أعلاه مُولّدة بواسطة AI بناءً على نتائج تحاليلك المخبرية، وهي لأغراض إعلامية فقط. لا ينبغي اعتبارها تشخيصًا طبيًا أو خطة علاجية. استشر طبيبك دائمًا للحصول على نصيحة طبية مُخصصة قبل اتخاذ أي قرارات تتعلق بصحتك.",
"aiDisclaimer": "سيتم مشاركة بيانات نتائج تحاليلك المخبرية بشكل آمن مع خدمة الذكاء الاصطناعي لدينا لتحليلها. يساعد هذا في تقديم رؤى صحية مُخصصة. هل ترغب في المتابعة؟", "aiDisclaimer": "سيتم مشاركة بيانات نتائج تحاليلك المخبرية بشكل آمن مع خدمة الذكاء الاصطناعي لدينا لتحليلها. يساعد هذا في تقديم رؤى صحية مُخصصة. هل ترغب في المتابعة؟",
"consent": "موافقة", "consent": "موافقة",
@ -1637,7 +1637,7 @@
"continueCash": "متابعة الدفع نقدًا", "continueCash": "متابعة الدفع نقدًا",
"timeFor": "الوقت", "timeFor": "الوقت",
"hmgPolicies": "سياسات مجموعة الحبيب الطبية", "hmgPolicies": "سياسات مجموعة الحبيب الطبية",
"darkMode": "المظهر الداكن", "darkMode": "الوضع الداكن",
"featureComingSoonDescription": "هذه الميزة ستتوفر قريباً. نحن نعمل جاهدين لإضافة ميزات أكثر تميزاً إلى التطبيق. انتظرونا لمتابعة التحديثات.", "featureComingSoonDescription": "هذه الميزة ستتوفر قريباً. نحن نعمل جاهدين لإضافة ميزات أكثر تميزاً إلى التطبيق. انتظرونا لمتابعة التحديثات.",
"generateAiAnalysisResult": "قم بإجراء تحليل لهذا المختبر AI", "generateAiAnalysisResult": "قم بإجراء تحليل لهذا المختبر AI",
"ratings": "التقييمات", "ratings": "التقييمات",
@ -1720,7 +1720,7 @@
"openCamera": "افتح الكاميرا", "openCamera": "افتح الكاميرا",
"openGallery": "افتح المعرض", "openGallery": "افتح المعرض",
"openFiles": "فتح الملفات", "openFiles": "فتح الملفات",
"generateAiAnalysisRadResult": "بإنشاء تحليل الذكاء الاصطناعي لهذا التقرير", "generateAiAnalysisRadResult": "نتيجة الاشعة بالذكاء الاصطناعي",
"grantLocationPermission": "يرجى منح إذن الوصول إلى الموقع من إعدادات التطبيق للحصول على نتائج أفضل.", "grantLocationPermission": "يرجى منح إذن الوصول إلى الموقع من إعدادات التطبيق للحصول على نتائج أفضل.",
"NoBookedAppointments": "لا توجد مواعيد محجوزة", "NoBookedAppointments": "لا توجد مواعيد محجوزة",
"aiDisclaimerRad": "سيتم مشاركة بيانات نتائج الأشعة الخاصة بك بشكل آمن مع محلل الذكاء الاصطناعي لدينا لتحليلها. يساعد هذا في توفير رؤى صحية مخصصة. هل ترغب في المتابعة؟", "aiDisclaimerRad": "سيتم مشاركة بيانات نتائج الأشعة الخاصة بك بشكل آمن مع محلل الذكاء الاصطناعي لدينا لتحليلها. يساعد هذا في توفير رؤى صحية مخصصة. هل ترغب في المتابعة؟",
@ -1744,5 +1744,7 @@
"onlineCheckIn24HoursOnly": "لا تتوفر خدمة تسجيل الوصول عبر الإنترنت إلا خلال 4 ساعات من موعد الحجز.لا تتوفر خدمة تسجيل الوصول عبر الإنترنت إلا خلال 4 ساعات من موعد الحجز.", "onlineCheckIn24HoursOnly": "لا تتوفر خدمة تسجيل الوصول عبر الإنترنت إلا خلال 4 ساعات من موعد الحجز.لا تتوفر خدمة تسجيل الوصول عبر الإنترنت إلا خلال 4 ساعات من موعد الحجز.",
"searchFor" : "بحث عن", "searchFor" : "بحث عن",
"m": "متر", "m": "متر",
"inch": "انش" "inch": "انش",
"updateEmailAddressTitle": "تحديث البريد الالكتروني: ",
"enterNewNewContactNumber": "الرجاء اضافة رقم اتصال في حالة الطواريء: "
} }

@ -1733,5 +1733,7 @@
"onlineCheckIn24HoursOnly": "Online Check-In is only available within 4 hours of the appointment time.", "onlineCheckIn24HoursOnly": "Online Check-In is only available within 4 hours of the appointment time.",
"searchFor": "Search For", "searchFor": "Search For",
"m": "m", "m": "m",
"inch": "in" "inch": "in",
"updateEmailAddressTitle": "Enter the new email address to be updated: ",
"enterNewNewContactNumber": "Enter the new emergency contact number to be updated: "
} }

@ -1177,20 +1177,20 @@ abstract class LocaleKeys {
static const triglyceridesFatBlood = 'triglyceridesFatBlood'; static const triglyceridesFatBlood = 'triglyceridesFatBlood';
static const understandTriglyceridesImpact = 'understandTriglyceridesImpact'; static const understandTriglyceridesImpact = 'understandTriglyceridesImpact';
static const bmiCalculator = 'bmiCalculator'; static const bmiCalculator = 'bmiCalculator';
static const bmiCalculatorDesc = 'bmiCalculatorDesc';
static const caloriesCalculator = 'caloriesCalculator'; static const caloriesCalculator = 'caloriesCalculator';
static const caloriesCalculatorDesc = 'caloriesCalculatorDesc';
static const bmrCalculator = 'bmrCalculator'; static const bmrCalculator = 'bmrCalculator';
static const bmrCalculatorDesc = 'bmrCalculatorDesc';
static const idealBodyWeight = 'idealBodyWeight'; static const idealBodyWeight = 'idealBodyWeight';
static const idealBodyWeightDesc = 'idealBodyWeightDesc';
static const bodyFatCalculator = 'bodyFatCalculator'; static const bodyFatCalculator = 'bodyFatCalculator';
static const bodyFatCalculatorDesc = 'bodyFatCalculatorDesc';
static const carbsProteinFat = 'carbsProteinFat'; static const carbsProteinFat = 'carbsProteinFat';
static const carbsProteinFatDesc = 'carbsProteinFatDesc';
static const ovulationPeriod = 'ovulationPeriod'; static const ovulationPeriod = 'ovulationPeriod';
static const ovulationPeriodDesc = 'ovulationPeriodDesc';
static const deliveryDueDate = 'deliveryDueDate'; static const deliveryDueDate = 'deliveryDueDate';
static const bmiCalculatorDesc = 'bmiCalculatorDesc';
static const caloriesCalculatorDesc = 'caloriesCalculatorDesc';
static const bmrCalculatorDesc = 'bmrCalculatorDesc';
static const idealBodyWeightDesc = 'idealBodyWeightDesc';
static const bodyFatCalculatorDesc = 'bodyFatCalculatorDesc';
static const carbsProteinFatDesc = 'carbsProteinFatDesc';
static const ovulationPeriodDesc = 'ovulationPeriodDesc';
static const deliveryDueDateDesc = 'deliveryDueDateDesc'; static const deliveryDueDateDesc = 'deliveryDueDateDesc';
static const low = 'low'; static const low = 'low';
static const preDiabetic = 'preDiabetic'; static const preDiabetic = 'preDiabetic';
@ -1735,5 +1735,7 @@ abstract class LocaleKeys {
static const searchFor = 'searchFor'; static const searchFor = 'searchFor';
static const m = 'm'; static const m = 'm';
static const inch = 'inch'; static const inch = 'inch';
static const updateEmailAddressTitle = 'updateEmailAddressTitle';
static const enterNewNewContactNumber = 'enterNewNewContactNumber';
} }

@ -97,8 +97,8 @@ class _AppointmentDetailsPageState extends State<AppointmentDetailsPage> {
isAppointmentWithin4Hours = true; isAppointmentWithin4Hours = true;
} }
// Check if reminder exists in calendar and update the flag // // Check if reminder exists in calendar and update the flag
await _checkAndUpdateReminderStatus(); // await _checkAndUpdateReminderStatus();
} }
}); });

@ -510,7 +510,12 @@ class _LandingPageState extends State<LandingPage> {
pagination: SwiperPagination( pagination: SwiperPagination(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
margin: EdgeInsets.only(top: 220.h + 20 + 8 + 24), margin: EdgeInsets.only(top: 220.h + 20 + 8 + 24),
builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor), builder: _DirectionalDotPaginationBuilder(
color: Color(0xffD9D9D9),
activeColor: AppColors.blackBgColor,
isRTL: isArabic,
totalCount: swiperItemCount,
),
), ),
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
final int actualIndex = isArabic ? (swiperItemCount - 1 - index) : index; final int actualIndex = isArabic ? (swiperItemCount - 1 - index) : index;
@ -1414,3 +1419,53 @@ class _LandingPageState extends State<LandingPage> {
); );
} }
} }
/// A custom pagination builder that reverses the active-dot index
/// when the UI is in RTL (Arabic) mode, so the dots visually match
/// the swipe direction.
class _DirectionalDotPaginationBuilder extends SwiperPlugin {
final Color color;
final Color activeColor;
final double size;
final double activeSize;
final double space;
final bool isRTL;
final int totalCount;
const _DirectionalDotPaginationBuilder({
required this.color,
required this.activeColor,
required this.isRTL,
required this.totalCount,
this.size = 10.0,
this.activeSize = 10.0,
this.space = 3.0,
});
@override
Widget build(BuildContext context, SwiperPluginConfig config) {
final int activeIndex = isRTL
? (totalCount - 1 - config.activeIndex)
: config.activeIndex;
print("the index is $activeIndex");
print("the config.activeIndex is ${config.activeIndex}");
return Row(
mainAxisSize: MainAxisSize.min,
textDirection: ui.TextDirection.ltr, // always lay out dots left-to-right
children: List.generate(config.itemCount, (i) {
final bool isActive = i == config.activeIndex;
return Container(
margin: EdgeInsets.symmetric(horizontal: space),
width: isActive ? activeSize : size,
height: isActive ? activeSize : size,
decoration: BoxDecoration(
color: isActive ? activeColor : color,
shape: BoxShape.circle,
),
);
}),
);
}
}

@ -56,7 +56,7 @@ class _UpdateEmailDialogState extends State<UpdateEmailDialog> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
"Enter the new email address to be updated: ".toText16(textAlign: TextAlign.start, isBold: true), LocaleKeys.updateEmailAddressTitle.tr().toText16(textAlign: TextAlign.start, isBold: true),
SizedBox(height: 12.h), SizedBox(height: 12.h),
TextInputWidget( TextInputWidget(
labelText: LocaleKeys.email.tr(), labelText: LocaleKeys.email.tr(),

@ -56,7 +56,7 @@ class _UpdateEmergencyContactDialogState extends State<UpdateEmergencyContactDia
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
"Enter the new emergency contact number to be updated: ".toText16(textAlign: TextAlign.start, isBold: true), LocaleKeys.enterNewNewContactNumber.tr().toText16(textAlign: TextAlign.start, isBold: true),
SizedBox(height: 12.h), SizedBox(height: 12.h),
TextInputWidget( TextInputWidget(
labelText: LocaleKeys.emrgNo.tr(), labelText: LocaleKeys.emrgNo.tr(),

Loading…
Cancel
Save