import 'dart:async'; import 'package:car_provider_app/config/provider_routes.dart'; import 'package:car_provider_app/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:car_provider_app/views/settings/services/services_list_page.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/categroy.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/widgets/bottom_sheet.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/row_with_arrow.dart'; import 'package:provider/provider.dart'; class BranchDetailPage extends StatelessWidget { final BranchDetailModel branchData; BranchDetailPage(this.branchData, {super.key}); List categories = []; getBranchUsers(BuildContext context) { scheduleMicrotask(() { context.read().getAllProviderDealers( {"ServiceProviderBranchID": branchData.id.toString(), "ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}, ); }); } filterBranch() { for (var element in branchData.branchServices!) { categories.add( CategoryData( id: element.categoryId, categoryName: element.categoryName, categoryNameN: element.categoryName, ), ); } categories = categories.toSet().toList(); for (var payment in categories) { for (var element in branchData.branchServices!) { if (payment.id == element.categoryId) { payment.services ??= []; payment.services!.add(element); } } } branchData.categories = categories; } bool validation(BuildContext context) { bool isValid = false; for (var element in context.read().allProviderDealersList) { if (element.isBranchUser ?? false) { isValid = true; } } return isValid; } Widget showData(String title, String value) { return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ title.toText( fontSize: 12, color: MyColors.darkTextColor, ), 8.width, Flexible( child: value.toText( fontSize: 12, color: MyColors.textColor, ), ) ], ); } Widget buildFooterActionWidget(BuildContext context) { Widget actionWidget = const SizedBox(); if (AppState().userType == UserType.providerDealer && branchData.branchStatus == BranchStatusEnum.approvedOrActive) { actionWidget = ShowFillButton( title: LocaleKeys.assignDealerUser.tr(), maxWidth: double.infinity, backgroundColor: Colors.transparent, borderColor: MyColors.darkPrimaryColor, txtColor: MyColors.darkPrimaryColor, fontSize: 15, isFilled: false, onPressed: () async { showMyBottomSheet( context, child: AssignDealerUserSheet( branchId: branchData.id.toString(), callBackFunc: () { getBranchUsers(context); }, ), ); }, ); } else if (branchData.branchStatus == BranchStatusEnum.pending) { actionWidget = ShowFillButton( title: "Pending Approval", maxWidth: double.infinity, isDisabled: true, onPressed: () {}, ); } else if (branchData.branchStatus == BranchStatusEnum.deactivated) { actionWidget = ShowFillButton( title: "Activate Now", maxWidth: double.infinity, backgroundColor: MyColors.darkPrimaryColor, borderColor: MyColors.darkPrimaryColor, txtColor: MyColors.white, fontSize: 15, isFilled: true, onPressed: () {}, ); } else if (branchData.branchStatus == BranchStatusEnum.rejected) { actionWidget = Column( children: [ Row( children: [ ('${LocaleKeys.rejectionComments.tr()}:').toText(fontSize: 16, color: MyColors.darkTextColor, textAlign: TextAlign.right), ], ), Row( children: [ if (branchData.branchAuditTrial != null && branchData.branchAuditTrial!.isNotEmpty) ...[ Flexible( child: ("${branchData.branchAuditTrial!.first.comment}").toText( fontSize: 14, color: MyColors.primaryColor, isItalic: true, ), ), ] ], ), 12.height, ShowFillButton( title: LocaleKeys.rejectedFormAdmin.tr(), maxWidth: double.infinity, backgroundColor: MyColors.darkWhiteColor, borderColor: MyColors.darkPrimaryColor, txtColor: MyColors.lightTextColor, isFilled: true, onPressed: () {}, ), ], ); } return actionWidget.paddingAll(21); } Widget buildServiceTileWidget(int pIndex) { return Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Padding( padding: const EdgeInsets.only(top: 5), child: SvgPicture.asset( MyAssets.maintenanceIcon, width: 14, height: 14, ), ), 8.width, Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ categories[pIndex].categoryName.toString().toText(fontSize: 16), ], ), 8.height, Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, children: [ Expanded( child: ListView.builder( itemBuilder: (context, index) { return Container( child: (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? categories[pIndex].services![index].serviceDescriptionN.toString() : categories[pIndex].services![index].serviceDescription.toString()).toText( fontSize: 12, color: MyColors.lightTextColor, ), ); }, itemCount: categories[pIndex].services?.length, physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, padding: EdgeInsets.zero, ), ), ], ).withArrow(isArrowEnabled: true) ], )), ], ).toWhiteContainer(width: double.infinity, allPading: 12); } @override Widget build(BuildContext context) { filterBranch(); return Scaffold( appBar: CustomAppBar(title: LocaleKeys.branchDetail.tr()), body: Consumer(builder: (context, model, _) { return SizedBox( width: double.infinity, height: double.infinity, child: Column( children: [ Expanded( child: SingleChildScrollView( child: Column( children: [ 10.height, Column( children: [ Row( children: [ Expanded( child: Row( children: [ branchData.branchProfileImage.buildNetworkImage(height: 66, width: 53, fit: BoxFit.cover), 11.width, Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ (branchData.branchName!).toText(fontSize: 16, color: MyColors.darkTextColor), showData("${LocaleKeys.city.tr()}:", branchData.cityName.toString()), showData("${LocaleKeys.country.tr()}:", branchData.countryName.toString()), ], ), ), ], ), ), if (branchData.branchStatus != BranchStatusEnum.pending) ...[ IconButton( onPressed: () { navigateWithName(context, ProviderAppRoutes.defineBranch, arguments: branchData); }, icon: SvgPicture.asset(MyAssets.icEdit), ) ], ], ), Column( children: [ // showData("${LocaleKeys.country.tr()}:", branchData.countryName.toString()), // showData("${LocaleKeys.city.tr()}:", branchData.cityName.toString()), showData("${LocaleKeys.branchName.tr()}:", branchData.branchName.toString()), showData("${LocaleKeys.branchDescription.tr()}:", branchData.branchDescription.toString()), // showData("${LocaleKeys.branchDescription.tr()}:", branchData.branchDescription.toString()), showData("${LocaleKeys.time.tr()}:", "${branchData.openTime.toString()} - ${branchData.closeTime.toString()}"), showData("${LocaleKeys.address.tr()}:", branchData.address.toString()), ], ).paddingOnly(left: 65), ], ).horPaddingMain(), 10.height, Container( width: double.infinity, color: MyColors.darkIconColor, padding: const EdgeInsets.symmetric(horizontal: 21, vertical: 10), child: Row( children: [ const Icon( Icons.calendar_month, color: Colors.white, ), 8.width, Expanded( child: LocaleKeys.setorEditBranchSchedule.tr().toText( isUnderLine: true, fontSize: 12, color: Colors.white, decorationColor: MyColors.white, ), ), ], ) .withArrow( isArrowEnabled: true, color: Colors.white, arrowWidth: 16.16, arrowHeight: 11.75, ) .margin(right: 5), ).onPress(() { navigateWithName(context, ProviderAppRoutes.schedulesList, arguments: branchData.id.toString()); }), Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon( Icons.add, color: Colors.white, ).toContainer( borderRadius: 100, paddingAll: 2, backgroundColor: MyColors.darkIconColor, ), 8.width, LocaleKeys.addNewService.tr().toText(fontSize: 13, color: MyColors.lightTextColor, letterSpacing: -0.52), ], ) .toContainer( borderRadius: 0, backgroundColor: MyColors.darkWhiteColor, width: double.infinity, paddingAll: 20, margin: const EdgeInsets.only(left: 20, right: 20, top: 20), ) .onPress(() { navigateWithName( context, ProviderAppRoutes.createServices3, arguments: CreateBranchModel( branchId: branchData.id.toString(), branchName: branchData.branchName.toString(), ), ); }), ListView.separated( itemBuilder: (context, pIndex) { return buildServiceTileWidget(pIndex).onPress(() { categories[pIndex].branchId = branchData.id.toString(); categories[pIndex].branchName = branchData.branchName.toString(); navigateWithName(context, ProviderAppRoutes.servicesList, arguments: categories[pIndex]); }); }, itemCount: categories.length, physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, padding: const EdgeInsets.all(20), separatorBuilder: (BuildContext context, int index) { return 12.height; }, ), 12.height, ], ), ), ), Container( width: double.infinity, height: 1, color: Colors.grey[100], ), buildFooterActionWidget(context), ], ), ); }), ); } }