diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 24c4210..dae1090 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -596,7 +596,7 @@ "requestAlreadyInProgress": "هذا الطلب قيد التقدم بالفعل.", "acceptOfferConfirmation": "هل تريد قبول هذا العرض؟", "acceptOfferConfirmationMessage": "سيتم قبول هذا العرض وستدفع المبلغ المطلوب للمشتري في وقت معين وإلا سيتم إلغاء هذا العرض.", - "noUpcomingAppointments": "لا مواعيد قادم..", + "noUpcomingAppointments": "لا توجد مواعيد قادمه..", "addNewAppointment": "إضافة موعد جديد", "myNearbyBranches": "فروعي القريبة", "myRecentBranches": "فروعي الأخيرة", diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index eb992d5..6b737f3 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -164,6 +164,40 @@ extension FormatDate on String { var dates = date.split("-"); return "${dates[2]} ${getMonth(int.parse(dates[1]))}, ${dates[0]}"; } + + String toLocalizedFormattedDateWithoutTime(BuildContext context) { + String date = split("T")[0]; + var dates = date.split("-"); + + final isArabic = + Localizations.localeOf(context).languageCode == 'ar'; + + final month = isArabic + ? getArabicMonth(int.parse(dates[1])) + : getMonth(int.parse(dates[1])); + + return "${dates[2]} $month, ${dates[0]}"; + } + + String getArabicMonth(int month) { + const months = [ + '', + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + return months[month]; + } } extension RequestEnum on int { diff --git a/lib/models/advertisment_models/ad_details_model.dart b/lib/models/advertisment_models/ad_details_model.dart index 2f43ffa..a7fea51 100644 --- a/lib/models/advertisment_models/ad_details_model.dart +++ b/lib/models/advertisment_models/ad_details_model.dart @@ -211,6 +211,7 @@ class Vehicle { String? countryName; String? countryNameN; String? currency; + String? currencyN; int? odometer; int? isInUsed; bool? isAccidentFree; @@ -244,6 +245,7 @@ class Vehicle { this.countryName, this.countryNameN, this.currency, + this.currencyN, this.odometer, this.isInUsed, this.isAccidentFree}); @@ -287,6 +289,7 @@ class Vehicle { countryName = json['duration'] != null && json['duration']['country'] != null ? json['duration']['country']['label'] : null; countryNameN = json['duration'] != null && json['duration']['country'] != null ? json['duration']['country']['label'] : null; currency = json['currency']; + currencyN = json['currencyN']; odometer = json['odometer']; isInUsed = json['isInUsed']; isAccidentFree = json['isAccidentFree']; diff --git a/lib/views/advertisement/components/ads_list_widget.dart b/lib/views/advertisement/components/ads_list_widget.dart index 7b3a391..1017948 100644 --- a/lib/views/advertisement/components/ads_list_widget.dart +++ b/lib/views/advertisement/components/ads_list_widget.dart @@ -147,6 +147,11 @@ class _AdCardState extends State { @override Widget build(BuildContext context) { + debugPrint('statusLabel: ${widget.adDetails.statuslabel}'); + debugPrint('statusLabel: ${widget.adDetails.statuslabelN}'); + debugPrint('adReserveStatus: ${widget.adDetails.adReserveStatus}'); + debugPrint('adPostStatus: ${widget.adDetails.vehicle?.currency}'); + debugPrint('adPostStatus: ${widget.adDetails.vehicle?.currencyN}'); bool isArabic = AppState().isArabic(context); final bool hasMultipleImages = widget.adDetails.vehicle?.image?.length == null ? false @@ -304,12 +309,12 @@ class _AdCardState extends State { else if (isAdsFragment && widget.adDetails.adPostStatus! == AdPostStatus.sold && widget.adDetails.statuslabel != null && widget.adDetails.statuslabel!.isNotEmpty) ...[ Padding( padding: const EdgeInsets.only(top: 5), - child: Utils.statusContainerChip(text: widget.adDetails.statuslabel ?? "", chipColor: Utils.getChipColorByAdStatus(widget.adDetails.adPostStatus!)), + child: Utils.statusContainerChip(text: isArabic ? widget.adDetails.statuslabelN ?? "": widget.adDetails.statuslabel ?? "", chipColor: Utils.getChipColorByAdStatus(widget.adDetails.adPostStatus!)), ), ] else if (isAdsFragment && !context.read().isExploreAdsTapped && widget.adDetails.statuslabel != null && widget.adDetails.statuslabel!.isNotEmpty) ...[ Padding( padding: const EdgeInsets.only(top: 5), - child: Utils.statusContainerChip(text: widget.adDetails.statuslabel ?? "", chipColor: Utils.getChipColorByAdStatus(widget.adDetails.adPostStatus!)), + child: Utils.statusContainerChip(text: isArabic ? widget.adDetails.statuslabelN ?? "": widget.adDetails.statuslabel ?? "", chipColor: Utils.getChipColorByAdStatus(widget.adDetails.adPostStatus!)), ), ], (widget.adDetails.vehicle!.vehicleTitle ?? "").toText( @@ -343,7 +348,8 @@ class _AdCardState extends State { ), 2.width, Expanded( - child: "${widget.adDetails.vehicle?.mileage?.mileageStart ?? ""} - ${widget.adDetails.vehicle?.mileage?.mileageEnd ?? ""}km".toText( + child: "${widget.adDetails.vehicle?.mileage?.mileageStart ?? ""} - ${widget.adDetails.vehicle?.mileage?.mileageEnd ?? ""}" + "${LocaleKeys.km.tr()}".toText( overflow: TextOverflow.ellipsis, fontSize: 12, letterSpacing: -0.48, @@ -359,8 +365,8 @@ class _AdCardState extends State { crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.start, children: [ - (widget.adDetails.vehicle!.cityName ?? "").toText(color: MyColors.lightTextColor, fontSize: 4), - widget.adDetails.createdOn != null ? DateTime.parse(widget.adDetails.createdOn!).getTimeAgo().toText(color: MyColors.lightTextColor, fontSize: 4) : const SizedBox(), + (isArabic ? widget.adDetails.vehicle!.cityNameN ?? "" : widget.adDetails.vehicle!.cityName ?? "").toText(color: MyColors.lightTextColor, fontSize: 4), + widget.adDetails.createdOn != null ? DateTime.parse(widget.adDetails.createdOn!).getTimeAgo(isArabic: context.locale.languageCode == 'ar',).toText(color: MyColors.lightTextColor, fontSize: 4) : const SizedBox(), ], ), ], @@ -375,14 +381,17 @@ class _AdCardState extends State { children: [ (widget.adDetails.vehicle!.demandAmount!.toInt().toString()).toText(fontSize: 19, isBold: true, letterSpacing: -1.16, height: 29 / 19), 2.width, - (widget.adDetails.vehicle!.currency ?? "").toText(color: MyColors.lightTextColor, fontSize: 10, letterSpacing: -0.4, height: 16 / 10).paddingOnly(bottom: 3), + (isArabic ? widget.adDetails.vehicle!.currencyN ?? "" : widget.adDetails.vehicle!.currency ?? "").toText(color: MyColors.lightTextColor, fontSize: 10, letterSpacing: -0.4, height: 16 / 10).paddingOnly(bottom: 3), ], ), ), - SvgPicture.asset( - MyAssets.arrowRight, - height: 9.69, - width: 13, + Transform.flip( + flipX: isArabic, + child: SvgPicture.asset( + MyAssets.arrowRight, + height: 9.69, + width: 13, + ), ), // const Icon(Icons.arrow_forward) diff --git a/lib/views/appointments/widgets/common_appointment_slider_widget.dart b/lib/views/appointments/widgets/common_appointment_slider_widget.dart index 4ed8f6a..0a29030 100644 --- a/lib/views/appointments/widgets/common_appointment_slider_widget.dart +++ b/lib/views/appointments/widgets/common_appointment_slider_widget.dart @@ -141,6 +141,7 @@ class AppointmentHomeTileWidget extends StatelessWidget { @override Widget build(BuildContext context) { + bool isArabic = AppState().isArabic(context); return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -188,11 +189,19 @@ class AppointmentHomeTileWidget extends StatelessWidget { ), ), //ic_arrow_right.svg - SvgPicture.asset( - MyAssets.arrowRight, - height: 9.69, - width: 13, - ), + // SvgPicture.asset( + // MyAssets.arrowRight, + // height: 9.69, + // width: 13, + // ), + Transform.flip( + flipX: isArabic, + child: SvgPicture.asset( + MyAssets.arrowRight, + height: 9.69, + width: 13, + ), + ) ], ) : Row( @@ -205,11 +214,19 @@ class AppointmentHomeTileWidget extends StatelessWidget { fontSize: 14, letterSpacing: -0.56, ), - SvgPicture.asset( - MyAssets.arrowRight, - height: 9.69, - width: 13, - ), + Transform.flip( + flipX: isArabic, + child: SvgPicture.asset( + MyAssets.arrowRight, + height: 9.69, + width: 13, + ), + ) + // SvgPicture.asset( + // MyAssets.arrowRight, + // height: 9.69, + // width: 13, + // ), ], ) ], @@ -296,25 +313,59 @@ class AppointmentFragmentTileWidget extends StatelessWidget { (appointmentListModel!.branchName ?? "").toText(color: MyColors.darkTextColor, fontSize: 12, letterSpacing: -0.48, height: 18 / 12), ], ), + // Row( + // children: [ + // MyAssets.miniClock.buildSvg(height: 12), + // 2.width, + // " ${appointmentListModel!.duration ?? ""} ${appointmentListModel!.appointmentDate!.toFormattedDateWithoutTime()}".toText(color: MyColors.lightTextColor, fontSize: 12, letterSpacing: -0.48, height: 19 / 12), + // ], + // ), Row( children: [ MyAssets.miniClock.buildSvg(height: 12), 2.width, - " ${appointmentListModel!.duration ?? ""} ${appointmentListModel!.appointmentDate!.toFormattedDateWithoutTime()}".toText(color: MyColors.lightTextColor, fontSize: 12, letterSpacing: -0.48, height: 19 / 12), + " ${appointmentListModel!.duration ?? ""} ${appointmentListModel!.appointmentDate!.toLocalizedFormattedDateWithoutTime(context)}" + .toText( + color: MyColors.lightTextColor, + fontSize: 12, + letterSpacing: -0.48, + height: 19 / 12, + ), ], ), 5.height, + // Row( + // crossAxisAlignment: CrossAxisAlignment.end, + // children: [ + // Expanded( + // child: Column( + // children: buildServicesFromAppointment(appointmentListModel: appointmentListModel!), + // ), + // ), + // //ic_arrow_right.svg + // ], + // ).withArrow(context, isArrowEnabled: true) Row( crossAxisAlignment: CrossAxisAlignment.end, children: [ Expanded( child: Column( - children: buildServicesFromAppointment(appointmentListModel: appointmentListModel!), + children: buildServicesFromAppointment( + appointmentListModel: appointmentListModel!, + ), + ), + ), + + Transform.flip( + flipX: AppState().isArabic(context), + child: SvgPicture.asset( + MyAssets.arrowRight, + height: 9.69, + width: 13, ), ), - //ic_arrow_right.svg ], - ).withArrow(isArrowEnabled: true) + ) ], ), ), diff --git a/lib/views/requests/offer_list_page.dart b/lib/views/requests/offer_list_page.dart index dab5a41..060f9f7 100644 --- a/lib/views/requests/offer_list_page.dart +++ b/lib/views/requests/offer_list_page.dart @@ -106,7 +106,7 @@ class _OfferListPageState extends State { children: [ "${offersModel.companyName}".toText(color: MyColors.lightTextColor, fontSize: 14), if (offersModel.createdOn != null && offersModel.createdOn!.isNotEmpty) ...[ - " | ${DateTime.parse(offersModel.createdOn!).getTimeAgo()}".toText(color: MyColors.lightTextColor, fontSize: 14), + " | ${DateTime.parse(offersModel.createdOn!).getTimeAgo(isArabic: context.locale.languageCode == 'ar')}".toText(color: MyColors.lightTextColor, fontSize: 14), ], ], ),