From 569fbe4df7ef79a7b52f0363a2008ddb2558d855 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 13 May 2026 07:45:41 +0300 Subject: [PATCH] improvements --- .../action_button/footer_action_button.dart | 2 +- .../service_request_detail_view.dart | 8 +-- .../views/components/verify_arrival_view.dart | 51 +++++++------------ .../views/components/verify_otp_view.dart | 36 ++++++------- 4 files changed, 39 insertions(+), 58 deletions(-) diff --git a/lib/modules/cm_module/views/components/action_button/footer_action_button.dart b/lib/modules/cm_module/views/components/action_button/footer_action_button.dart index 9835c733..d6613319 100644 --- a/lib/modules/cm_module/views/components/action_button/footer_action_button.dart +++ b/lib/modules/cm_module/views/components/action_button/footer_action_button.dart @@ -192,7 +192,7 @@ class FooterActionButton { child: AppFilledButton( label: context.translation.iHaveArrived, showIcon: true, - icon: 'arrived_icon'.toSvgAsset(), + icon: 'arrived_icon'.toSvgAsset(color: AppColor.background(context)), buttonColor: AppColor.green70, onPressed: () async { Navigator.push(context, MaterialPageRoute(builder: (context) => const VerifyArrivalView())); diff --git a/lib/modules/cm_module/views/components/service_request_detail_view.dart b/lib/modules/cm_module/views/components/service_request_detail_view.dart index e77da28c..745a2c5b 100644 --- a/lib/modules/cm_module/views/components/service_request_detail_view.dart +++ b/lib/modules/cm_module/views/components/service_request_detail_view.dart @@ -61,14 +61,14 @@ class _ServiceRequestDetailViewState extends State { _attachments = requestProvider.currentWorkOrder?.data?.workOrderAttachments.where((e) => e.createdBy == userProvider.user?.userID).toList() ?? []; } - bool showInitialVisitCard = requestProvider.currentWorkOrder!.data!.needAVisitDateTime != null && + bool showInitialVisitCard = requestProvider.currentWorkOrder?.data?.needAVisitDateTime != null && userProvider.user?.type == UsersTypes.engineer && - requestProvider.currentWorkOrder?.data?.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.eArrived; - bool showAssetDetailCard = (userProvider.user?.type == UsersTypes.engineer && requestProvider.currentWorkOrder?.data?.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.activity) || + requestProvider.currentWorkOrder?.data?.nextStep?.workOrderNextStepEnum == WorkOrderNextStepEnum.eArrived; + bool showAssetDetailCard = (userProvider.user?.type == UsersTypes.engineer && requestProvider.currentWorkOrder?.data?.nextStep?.workOrderNextStepEnum == WorkOrderNextStepEnum.activity) || requestProvider.isReadOnlyRequest; bool showCostCard = context.userProvider.user!.type == UsersTypes.engineer && !requestProvider.isReadOnlyRequest && - requestProvider.currentWorkOrder!.data!.nextStep?.workOrderNextStepEnum == WorkOrderNextStepEnum.activity; + requestProvider.currentWorkOrder?.data?.nextStep?.workOrderNextStepEnum == WorkOrderNextStepEnum.activity; return requestProvider.isLoading ? CircularProgressIndicator(color: AppColor.loadingColor(context)).center diff --git a/lib/modules/cm_module/views/components/verify_arrival_view.dart b/lib/modules/cm_module/views/components/verify_arrival_view.dart index 6b00e0f8..71d86909 100644 --- a/lib/modules/cm_module/views/components/verify_arrival_view.dart +++ b/lib/modules/cm_module/views/components/verify_arrival_view.dart @@ -15,6 +15,8 @@ import 'package:test_sa/modules/cm_module/cm_request_utils.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; +import 'package:test_sa/views/widgets/item_views/info_header_widget.dart'; +import 'package:test_sa/views/widgets/item_views/info_text_widget.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/qr/scan_qr.dart'; @@ -53,9 +55,10 @@ class _VerifyArrivalViewState extends State { ? CircularProgressIndicator(color: AppColor.loadingColor(context)).center : requestDetailProvider.arrivalTypeList.isEmpty ? const NoDataFound().center - : ListView.builder( + : ListView.separated( padding: EdgeInsets.zero, itemCount: requestDetailProvider.arrivalTypeList.length, + separatorBuilder: (cxt, index) => 12.height, itemBuilder: (builderContext, index) { final item = requestDetailProvider.arrivalTypeList[index]; return customListItem( @@ -75,40 +78,24 @@ class _VerifyArrivalViewState extends State { Widget customListItem({required String icon, required String heading, required String subHeading, required VoidCallback onTap, bool isLoading = false}) { return GestureDetector( - onTap: onTap, // Handles the tap - child: Card( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(14), // Circular border radius - ), - color: AppColor.background(context), + onTap: onTap, // Handles the tap child: Row( - crossAxisAlignment: CrossAxisAlignment.center, // Align items at the top + crossAxisAlignment: CrossAxisAlignment.center, + spacing: 12, children: [ - icon.toSvgAsset(width: 30, color: AppColor.neutral120, height: 30).paddingOnly(top: 0), - 12.width, - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - heading, - style: AppTextStyles.heading6.copyWith(color: AppColor.textColor(context)), - ), - 6.height, - Text( - subHeading, - style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), - ), - ], - ), - ), - 12.width, - SizedBox(width: 24, height: 24, child: isLoading ? CircularProgressIndicator(color: AppColor.loadingColor(context), strokeWidth: 2) : const SizedBox()) + icon.toSvgAsset(width: 26, color: AppColor.icon2Color(context), height: 26).paddingOnly(top: 0), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + InfoHeader16Widget(heading), + 6.height, + InfoTextWidget(label: subHeading, showEmptyValue: true, isMsg: true), + ], + ).expanded, + SizedBox(width: 24, height: 24, child: isLoading ? CircularProgressIndicator(color: AppColor.loadingColor(context), strokeWidth: 2) : const SizedBox()) ], - ).paddingAll(12), - ), - ); + ).toShadowContainer(context, paddingObject: const EdgeInsets.only(left: 16, right: 16, top: 12, bottom: 12))); } void onItemTap({required CMDetailProvider requestDetailProvider, required BuildContext context, int? verificationTypeId}) async { diff --git a/lib/modules/cm_module/views/components/verify_otp_view.dart b/lib/modules/cm_module/views/components/verify_otp_view.dart index 3edabff8..f1ea47e4 100644 --- a/lib/modules/cm_module/views/components/verify_otp_view.dart +++ b/lib/modules/cm_module/views/components/verify_otp_view.dart @@ -9,6 +9,8 @@ import 'package:test_sa/modules/cm_module/cm_detail_provider.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; +import 'package:test_sa/views/widgets/item_views/info_header_widget.dart'; +import 'package:test_sa/views/widgets/item_views/info_text_widget.dart'; class VerifyOtpView extends StatelessWidget { const VerifyOtpView({Key? key}) : super(key: key); @@ -18,14 +20,14 @@ class VerifyOtpView extends StatelessWidget { final defaultPinTheme = PinTheme( width: 51.toScreenWidth, height: 63.toScreenHeight, - textStyle: const TextStyle(fontSize: 22, color: Colors.black), + textStyle: TextStyle(fontSize: 24, color: AppColor.headingTextColor(context)), decoration: BoxDecoration( - color: AppColor.neutral100, + color: AppColor.background(context), borderRadius: BorderRadius.circular(10), + border: Border.all(color: AppColor.border2Color(context)), ), ); return Scaffold( - backgroundColor: AppColor.neutral100, appBar: DefaultAppBar(title: context.translation.askOtpFromRequester), body: SingleChildScrollView( child: Column( @@ -34,16 +36,16 @@ class VerifyOtpView extends StatelessWidget { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - context.translation.verify.heading6(context).custom(color: AppColor.black10), - 7.height, - context.translation.otpSentToNumber.bodyText2(context).custom(color: AppColor.neutral120), + InfoHeader16Widget(context.translation.verify), + 6.height, + InfoTextWidget(label: context.translation.otpSentToNumber, isMsg: true, showEmptyValue: true), Center( child: Pinput( length: 4, defaultPinTheme: defaultPinTheme, focusedPinTheme: defaultPinTheme.copyWith( decoration: defaultPinTheme.decoration?.copyWith( - border: Border.all(color: AppColor.neutral100), + border: Border.all(color: AppColor.primary10), ), ), onCompleted: (pin) async { @@ -67,24 +69,16 @@ class VerifyOtpView extends StatelessWidget { ).paddingOnly(top: 24, bottom: 24), Row( children: [ - context.translation.resendIn.bodyText2(context).custom(color: AppColor.neutral120), - 7.width, + InfoTextWidget(label: context.translation.resendIn, isMsg: true, showEmptyValue: true), + 6.width, ValueListenableBuilder( //add actual timer value... valueListenable: ValueNotifier("0:00"), builder: (context, value, _) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - value.bodyText2(context).custom( - color: context.isDark ? AppColor.neutral10 : AppColor.neutral120, - ), - ], - ); + return InfoTextWidget(label: value, isMsg: true, showEmptyValue: true); }, ), - 7.width, + 6.width, InkWell( onTap: () {}, child: Text( @@ -105,9 +99,9 @@ class VerifyOtpView extends StatelessWidget { 24.height, Column( crossAxisAlignment: CrossAxisAlignment.start, + spacing: 4, children: [ - context.translation.havingTroubleReceivingOtp.heading6(context).custom(color: AppColor.black10), - 3.height, + InfoHeader16Widget(context.translation.havingTroubleReceivingOtp), InkWell( onTap: () { Navigator.pop(context);