import 'package:mc_common_app/view_models/appointments_view_model.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.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/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/common_widgets/branch_details_card.dart'; import 'package:mc_common_app/widgets/common_widgets/categories_list.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; class BranchesFragment extends StatelessWidget { const BranchesFragment({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Consumer( builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) { return Scaffold( appBar: CustomAppBar( title: LocaleKeys.branches.tr(), isRemoveBackButton: true, actions: [ Padding( padding: EdgeInsets.only(top: appointmentsVM.branchFiltersCounter > 0 ? 20 : 0, right: 21), child: Badge( largeSize: 15, smallSize: 20, isLabelVisible: appointmentsVM.branchFiltersCounter > 0, backgroundColor: MyColors.darkPrimaryColor, label: Text('${appointmentsVM.branchFiltersCounter}'), child: MyAssets.searchIcon.buildSvg(), ), ).onPress(() { navigateWithName(context, AppRoutes.branchSearchFilterPage); }), ], ), body: SizedBox( width: double.infinity, height: double.infinity, child: Column( children: [ if (appointmentsVM.branchesCategoriesFilterOptions.isNotEmpty) ...[ 16.height, FiltersList( filterList: appointmentsVM.branchesCategoriesFilterOptions, onFilterTapped: (index, selectedFilterId) => appointmentsVM.applyFilterOnBranches(index: index), ), ], 16.height, Expanded( child: RefreshIndicator( onRefresh: () async { context.read().getAllNearBranches(isNeedToRebuild: true, isFromRefresh: true); }, child: Container( width: double.infinity, child: appointmentsVM.state == ViewState.busy ? const Center( child: CircularProgressIndicator(), ) : appointmentsVM.nearbyBranches.isEmpty ? Center( child: LocaleKeys.no_branch.tr().toText( fontSize: 16, color: MyColors.lightTextColor, ), ) : ListView.separated( itemCount: appointmentsVM.nearbyBranches.length, itemBuilder: (context, index) { BranchDetailModel branchDetailModel = appointmentsVM.nearbyBranches[index]; return BranchDetailCard( onCardTapped: () => navigateWithName(context, AppRoutes.branchDetailView, arguments: branchDetailModel), providerImageUrl: branchDetailModel.branchProfileImage ?? "", title: branchDetailModel.branchName ?? "", providerLocation: branchDetailModel.distanceKm.toString() + " KM", providerName: branchDetailModel.serviceProviderName ?? "", providerRatings: branchDetailModel.branchRateAvg ?? 0.0, services: branchDetailModel.branchServices, ); }, separatorBuilder: (context, index) => 12.height, padding: const EdgeInsets.all(12), ), ).paddingOnly(left: 10, right: 10), ), ), ], ), ), ); }, ); } }