From 72b5a59bc1111dad75fad38b2d7ecc32d766ce1f Mon Sep 17 00:00:00 2001 From: "Fatimah.Alshammari" Date: Thu, 7 May 2026 11:33:02 +0300 Subject: [PATCH] fix localization and UI updates --- lib/views/branches/branch_detail_view.dart | 16 +- .../branches/components/items_list_sheet.dart | 6 +- lib/views/branches/provider_profile_view.dart | 11 +- lib/views/dashboard/widgets/ad_widget.dart | 222 +++++++++--------- .../widgets/appointment_slider_widget.dart | 180 +++++++------- pubspec.yaml | 4 +- 6 files changed, 227 insertions(+), 212 deletions(-) diff --git a/lib/views/branches/branch_detail_view.dart b/lib/views/branches/branch_detail_view.dart index a3c89bb..37b7b8c 100644 --- a/lib/views/branches/branch_detail_view.dart +++ b/lib/views/branches/branch_detail_view.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:car_customer_app/views/branches/components/branch_reviews_widget.dart'; import 'package:car_customer_app/views/branches/components/items_list_sheet.dart'; +import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/view_models/appointments_view_model.dart'; import 'package:easy_localization/easy_localization.dart'; @@ -46,6 +47,7 @@ class _BranchDetailViewState extends State { }); } + @override void dispose() { appointmentsVM.resetCurrentBranchRatings(); @@ -90,7 +92,7 @@ class _BranchDetailViewState extends State { children: [ (LocaleKeys.location.tr() + ":").toText(color: MyColors.lightTextColor, fontSize: 12), 4.width, - (widget.branchDetailModel.distanceKm.toString() + " km").toText(fontSize: 12, isBold: true), + (widget.branchDetailModel.distanceKm.toString() + LocaleKeys.km.tr()).toText(fontSize: 12, isBold: true), ], ), Row( @@ -199,24 +201,28 @@ class _BranchDetailViewState extends State { } Widget buildServicesList() { + final isArabic = AppState().isArabic(context); return ListView.separated( itemBuilder: (context, index) { return ExpansionTile( tilePadding: EdgeInsets.zero, - title: (widget.branchDetailModel.branchServices![index].serviceDescription ?? "").toText(fontSize: 16), + // title: (widget.branchDetailModel.branchServices![index].serviceDescription ?? "").toText(fontSize: 16), + title: (isArabic + ? (widget.branchDetailModel.branchServices![index].serviceDescriptionN ?? widget.branchDetailModel.branchServices![index].serviceDescription ?? "") + : (widget.branchDetailModel.branchServices![index].serviceDescription ?? "")).toText(fontSize: 16), children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ showItem(LocaleKeys.allowingHomeService.tr() + " :", (widget.branchDetailModel.branchServices![index].isAllowAppointment ?? false) ? LocaleKeys.yes.tr() : LocaleKeys.no.tr(), valueColor: Colors.green), if ((widget.branchDetailModel.branchServices![index].isAllowAppointment ?? false)) ...[ - showItem(LocaleKeys.homeServiceRange.tr() + " :", widget.branchDetailModel.branchServices![index].customerLocationRange.toString() + "KM"), + showItem(LocaleKeys.homeServiceRange.tr() + " :", widget.branchDetailModel.branchServices![index].customerLocationRange.toString() + LocaleKeys.km.tr()), showItem(LocaleKeys.chargesPerKM.tr() + " :", widget.branchDetailModel.branchServices![index].customerLocationRange.toString() + LocaleKeys.sar.tr()), ], 8.height, ((widget.branchDetailModel.branchServices![index].itemsCount != null && widget.branchDetailModel.branchServices![index].itemsCount! > 0) - ? widget.branchDetailModel.branchServices![index].itemsCount.toString() + " items" - : "No" + " items") + ? widget.branchDetailModel.branchServices![index].itemsCount.toString() + LocaleKeys.items.tr() + : LocaleKeys.no_items.tr()) .toText( fontSize: 12, isBold: true, diff --git a/lib/views/branches/components/items_list_sheet.dart b/lib/views/branches/components/items_list_sheet.dart index 3da3178..b2cbf89 100644 --- a/lib/views/branches/components/items_list_sheet.dart +++ b/lib/views/branches/components/items_list_sheet.dart @@ -64,9 +64,9 @@ class _ItemsListSheetState extends State { showItem(LocaleKeys.manufacturedOn.tr() + ":", (DateHelper.formatAsDayMonthYear(DateHelper.parseStringToDate(serviceItemModel.manufactureDate!))), valueColor: MyColors.darkTextColor), ], - showItem(LocaleKeys.availableforAppointment.tr() + ":", (serviceItemModel.isAllowAppointment ?? false) ? "Yes" : "No", valueColor: Colors.green), - showItem(LocaleKeys.allowingWorkshopService.tr() + ":", (serviceItemModel.isAppointmentCompanyLoc ?? false) ? "Yes" : "No", valueColor: Colors.green), - showItem(LocaleKeys.allowingHomeService.tr() + ":", (serviceItemModel.isAppointmentCustomerLoc ?? false) ? "Yes" : "No", valueColor: Colors.green), + showItem(LocaleKeys.availableforAppointment.tr() + ":", (serviceItemModel.isAllowAppointment ?? false) ? LocaleKeys.yes.tr() : LocaleKeys.no.tr(), valueColor: Colors.green), + showItem(LocaleKeys.allowingWorkshopService.tr() + ":", (serviceItemModel.isAppointmentCompanyLoc ?? false) ? LocaleKeys.yes.tr() : LocaleKeys.no.tr(), valueColor: Colors.green), + showItem(LocaleKeys.allowingHomeService.tr() + ":", (serviceItemModel.isAppointmentCustomerLoc ?? false) ? LocaleKeys.yes.tr() : LocaleKeys.no.tr(), valueColor: Colors.green), 12.height, LocaleKeys.serviceAmount.tr().toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), Row( diff --git a/lib/views/branches/provider_profile_view.dart b/lib/views/branches/provider_profile_view.dart index 95bb437..09ae905 100644 --- a/lib/views/branches/provider_profile_view.dart +++ b/lib/views/branches/provider_profile_view.dart @@ -103,7 +103,14 @@ class _ProviderProfileViewState extends State { children: [ ("${LocaleKeys.memberSince.tr()}:").toText(color: MyColors.lightTextColor, fontSize: 12), 4.width, - "${DateHelper.formatAsMonthYear( + // "${DateHelper.formatAsMonthYear( + // DateHelper.parseStringToDate( + // DateHelper.formatDateT( + // appointmentsVM.providerProfileModel!.memberSince ?? "", + // ), + // ), + // )}" + "${DateFormat('MMMM yyyy', context.locale.languageCode).format( DateHelper.parseStringToDate( DateHelper.formatDateT( appointmentsVM.providerProfileModel!.memberSince ?? "", @@ -137,7 +144,7 @@ class _ProviderProfileViewState extends State { }, providerImageUrl: (branchModel.branchImages != null && branchModel.branchImages!.isNotEmpty) ? (branchModel.branchImages!.first.imageUrl ?? "") : "", title: branchModel.branchName ?? "", - providerLocation: branchModel.distanceKm.toString() + " KM", + providerLocation: branchModel.distanceKm.toString() + LocaleKeys.km.tr(), providerName: branchModel.serviceProviderName ?? "", providerRatings: (branchModel.branchRateAvg ?? 0.0), services: branchModel.branchServices, diff --git a/lib/views/dashboard/widgets/ad_widget.dart b/lib/views/dashboard/widgets/ad_widget.dart index 4cf8920..f6035e3 100644 --- a/lib/views/dashboard/widgets/ad_widget.dart +++ b/lib/views/dashboard/widgets/ad_widget.dart @@ -1,111 +1,111 @@ - -import 'package:flutter/material.dart'; -import 'package:mc_common_app/extensions/int_extensions.dart'; -import 'package:mc_common_app/extensions/string_extensions.dart'; -import 'package:mc_common_app/theme/colors.dart'; -import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; - -class AdWidget extends StatelessWidget { - final int count; - - const AdWidget({Key? key, required this.count}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ListView.builder( - itemCount: count, - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (BuildContext context, int index) { - return Padding( - padding: const EdgeInsets.only(bottom: 15), - child: buildAdContainer(), - ); - }); - } - - Widget buildAdContainer() { - return Row( - children: [ - Image.asset( - "assets/images/bn_car.jpeg", - width: 80, - height: 80, - fit: BoxFit.cover, - ), - 12.width, - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - "Toyota Crolla".toText(fontSize: 16, isBold: true), - Row( - children: [ - "Model:".toText( - color: MyColors.lightTextColor, - ), - 2.width, - "2019".toText(), - ], - ), - Row( - children: [ - "Mileage:".toText( - color: MyColors.lightTextColor, - ), - 2.width, - "73,000 km".toText(), - ], - ), - ], - ), - ), - Column( - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - "Riyadh".toText( - color: MyColors.lightTextColor, - ), - "9 Hours Ago".toText( - color: MyColors.lightTextColor, - ), - ], - ), - ], - ), - 8.height, - Row( - children: [ - Expanded( - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - "30,000".toText(fontSize: 16, isBold: true), - 2.width, - "SAR:".toText( - color: MyColors.lightTextColor, - ), - ], - ), - ), - const Icon(Icons.arrow_forward) - ], - ), - ], - ), - ), - ], - ).toWhiteContainer(width: double.infinity, allPading: 12); - } -} +// +// import 'package:flutter/material.dart'; +// import 'package:mc_common_app/extensions/int_extensions.dart'; +// import 'package:mc_common_app/extensions/string_extensions.dart'; +// import 'package:mc_common_app/theme/colors.dart'; +// import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +// +// class AdWidget extends StatelessWidget { +// final int count; +// +// const AdWidget({Key? key, required this.count}) : super(key: key); +// +// @override +// Widget build(BuildContext context) { +// return ListView.builder( +// itemCount: count, +// shrinkWrap: true, +// physics: const NeverScrollableScrollPhysics(), +// itemBuilder: (BuildContext context, int index) { +// return Padding( +// padding: const EdgeInsets.only(bottom: 15), +// child: buildAdContainer(), +// ); +// }); +// } +// +// Widget buildAdContainer() { +// return Row( +// children: [ +// Image.asset( +// "assets/images/bn_car.jpeg", +// width: 80, +// height: 80, +// fit: BoxFit.cover, +// ), +// 12.width, +// Expanded( +// child: Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Row( +// mainAxisAlignment: MainAxisAlignment.start, +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Expanded( +// child: Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// mainAxisAlignment: MainAxisAlignment.start, +// children: [ +// "Toyota Crolla".toText(fontSize: 16, isBold: true), +// Row( +// children: [ +// "Model:".toText( +// color: MyColors.lightTextColor, +// ), +// 2.width, +// "2019".toText(), +// ], +// ), +// Row( +// children: [ +// "Mileage:".toText( +// color: MyColors.lightTextColor, +// ), +// 2.width, +// "73,000 km".toText(), +// ], +// ), +// ], +// ), +// ), +// Column( +// crossAxisAlignment: CrossAxisAlignment.end, +// mainAxisAlignment: MainAxisAlignment.start, +// children: [ +// "Riyadh".toText( +// color: MyColors.lightTextColor, +// ), +// "9 Hours Ago".toText( +// color: MyColors.lightTextColor, +// ), +// ], +// ), +// ], +// ), +// 8.height, +// Row( +// children: [ +// Expanded( +// child: Row( +// mainAxisAlignment: MainAxisAlignment.start, +// crossAxisAlignment: CrossAxisAlignment.end, +// children: [ +// "30,000".toText(fontSize: 16, isBold: true), +// 2.width, +// "SAR:".toText( +// color: MyColors.lightTextColor, +// ), +// ], +// ), +// ), +// const Icon(Icons.arrow_forward) +// ], +// ), +// ], +// ), +// ), +// ], +// ).toWhiteContainer(width: double.infinity, allPading: 12); +// } +// } diff --git a/lib/views/dashboard/widgets/appointment_slider_widget.dart b/lib/views/dashboard/widgets/appointment_slider_widget.dart index 3e3b3ec..cd54815 100644 --- a/lib/views/dashboard/widgets/appointment_slider_widget.dart +++ b/lib/views/dashboard/widgets/appointment_slider_widget.dart @@ -1,90 +1,90 @@ - -import 'package:flutter/material.dart'; -import 'package:mc_common_app/extensions/int_extensions.dart'; -import 'package:mc_common_app/extensions/string_extensions.dart'; -import 'package:mc_common_app/theme/colors.dart'; -import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; - -class AppointmentSliderWidget extends StatelessWidget { - const AppointmentSliderWidget({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - "Olaya Brach".toText( - color: MyColors.lightTextColor, - isBold: true, - ), - "Abdullah Alhbas".toText( - isBold: true, - fontSize: 14, - ), - Row( - children: [ - "Appt. On:".toText( - color: MyColors.lightTextColor, - ), - 2.width, - "19-Mar-2023 11:48 AM".toText(), - ], - ), - ], - ), - ), - "1+ Requests".toText(fontSize: 10).toContainer( - borderRadius: 15, - backgroundColor: MyColors.lightGreyEAColor, - padding: const EdgeInsets.symmetric( - vertical: 6, - horizontal: 12, - ), - ), - ], - ), - 8.height, - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Expanded( - child: Column( - children: [ - showServices("Maintenance"), - 2.height, - showServices("Accessories and Modification"), - ], - ), - ), - const Icon( - Icons.arrow_forward, - ), - ], - ), - ], - ).toWhiteContainer(width: double.infinity, allPading: 0); - } - - Widget showServices(String title) { - return Row( - children: [ - const Icon( - Icons.ac_unit, - color: MyColors.primaryColor, - size: 18, - ), - 8.width, - title.toText( - fontSize: 14, - isBold: true, - ), - ], - ); - } -} +// +// import 'package:flutter/material.dart'; +// import 'package:mc_common_app/extensions/int_extensions.dart'; +// import 'package:mc_common_app/extensions/string_extensions.dart'; +// import 'package:mc_common_app/theme/colors.dart'; +// import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +// +// class AppointmentSliderWidget extends StatelessWidget { +// const AppointmentSliderWidget({Key? key}) : super(key: key); +// +// @override +// Widget build(BuildContext context) { +// return Column( +// children: [ +// Row( +// children: [ +// Expanded( +// child: Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// mainAxisAlignment: MainAxisAlignment.start, +// children: [ +// "Olaya Brach".toText( +// color: MyColors.lightTextColor, +// isBold: true, +// ), +// "Abdullah Alhbas".toText( +// isBold: true, +// fontSize: 14, +// ), +// Row( +// children: [ +// "Appt. On:".toText( +// color: MyColors.lightTextColor, +// ), +// 2.width, +// "19-Mar-2023 11:48 AM".toText(), +// ], +// ), +// ], +// ), +// ), +// "1+ Requests".toText(fontSize: 10).toContainer( +// borderRadius: 15, +// backgroundColor: MyColors.lightGreyEAColor, +// padding: const EdgeInsets.symmetric( +// vertical: 6, +// horizontal: 12, +// ), +// ), +// ], +// ), +// 8.height, +// Row( +// crossAxisAlignment: CrossAxisAlignment.end, +// children: [ +// Expanded( +// child: Column( +// children: [ +// showServices("Maintenance"), +// 2.height, +// showServices("Accessories and Modification"), +// ], +// ), +// ), +// const Icon( +// Icons.arrow_forward, +// ), +// ], +// ), +// ], +// ).toWhiteContainer(width: double.infinity, allPading: 0); +// } +// +// Widget showServices(String title) { +// return Row( +// children: [ +// const Icon( +// Icons.ac_unit, +// color: MyColors.primaryColor, +// size: 18, +// ), +// 8.width, +// title.toText( +// fontSize: 14, +// isBold: true, +// ), +// ], +// ); +// } +// } diff --git a/pubspec.yaml b/pubspec.yaml index 45b70c1..99b6eff 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -36,9 +36,11 @@ dependencies: cupertino_icons: ^1.0.2 mc_common_app: - path: /Volumes/Data/Projects/Flutter_Projects/car_common_app +# path: /Volumes/Data/Projects/Flutter_Projects/car_common_app # path: /Users/faizhashmi/Development/Projects/MyProjects/CloudSolutions/car_common_app # path: /Users/aamir/StudioProjects/car_common_app + path: C:/dev/Mawater/car_common_app + dev_dependencies: flutter_test: