import 'dart:async'; import 'dart:developer'; import 'package:car_customer_app/views/dashboard/fragments/ads_fragment.dart'; import 'package:car_customer_app/views/dashboard/fragments/appointments_fragment.dart'; import 'package:car_customer_app/views/dashboard/fragments/home_fragment.dart'; import 'package:car_customer_app/views/dashboard/fragments/my_requests_fragment.dart'; import 'package:car_customer_app/views/dashboard/widgets/bottom_nav_bar.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/app_state.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/general_models/widgets_models.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/view_models/ad_view_model.dart'; import 'package:mc_common_app/view_models/appointments_view_model.dart'; import 'package:mc_common_app/view_models/chat_view_model.dart'; import 'package:mc_common_app/view_models/dashboard_view_model_customer.dart'; import 'package:mc_common_app/view_models/requests_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; import 'package:easy_localization/easy_localization.dart'; import 'fragments/branches_fragment.dart'; class DashboardPage extends StatefulWidget { const DashboardPage({Key? key}) : super(key: key); @override State createState() => _DashboardPageState(); } class _DashboardPageState extends State { // late DashboardVM dashboardVM; @override void initState() { super.initState(); // dashboardVM = Provider.of(context, listen: false); scheduleMicrotask(() { onInitState(); _onRefresh(); }); } onInitState() async { Future.wait([ context.read().populateAppointmentsFilterList(), context.read().populateBranchesFilterList(), context.read().populateRequestsFilterList(), context.read().populateAdsFilterList(), ]); } Future _onRefresh() async { AdVM adVM = Provider.of(context, listen: false); AppointmentsVM appointmentsVM = Provider.of(context, listen: false); RequestsVM requestsVM = Provider.of(context, listen: false); ChatVM chatVM = Provider.of(context, listen: false); if (appointmentsVM.myAppointments.isEmpty) { await appointmentsVM.getMyAppointments(); } if (appointmentsVM.nearbyBranches.isEmpty) { await appointmentsVM.applyFilterOnBranches(index: 0); // to get all branches! } if (adVM.myAds.isEmpty) { await adVM.getMyAds(); } if (adVM.exploreAds.isEmpty) { await adVM.getExploreAds(); } if (requestsVM.myRequests.isEmpty) { await requestsVM.getRequests(appType: AppType.customer); } if (adVM.vehicleTypes.isEmpty) { await adVM.getVehicleTypes(); } if (adVM.vehicleAdsDurations.isEmpty) { await adVM.getVehicleAdsDuration(); } await chatVM.buildHubConnection(context); adVM.updateVehicleAdDurationId( SelectionModel( selectedId: adVM.vehicleAdsDurations.first.id ?? 0, selectedOption: "${adVM.vehicleAdsDurations.first.days} Days", itemPrice: adVM.vehicleAdsDurations.first.price!.toInt().toString(), ), ); } List fragments = [ const BranchesFragment(), const AppointmentsFragment(), const HomeFragment(), AdsFragment(), MyRequestsFragment(), ]; String getPageTitle(int index) { if (index == 0) { return LocaleKeys.branches.tr(); } if (index == 1) { return LocaleKeys.appointments.tr(); } if (index == 2) { return ""; } if (index == 3) { return LocaleKeys.ads.tr(); } if (index == 4) { return LocaleKeys.myRequests.tr(); } return ""; } @override Widget build(BuildContext context) { DashboardVmCustomer dashboardVM = context.read(); bool isHomePage = dashboardVM.selectedNavbarBarIndex == 2; return PopScope( canPop: false, child: Scaffold( appBar: CustomAppBar( backgroundColor: null, leadingWidth: 100, title: getPageTitle(dashboardVM.selectedNavbarBarIndex), isRemoveBackButton: true, isDrawerEnabled: isHomePage ? true : false, onTap: () { if (isHomePage) { navigateWithName(context, AppRoutes.settingOptionsLanguages); } }, actions: [ (isHomePage ? Row( children: [ "${AppState().currentAppType}".toText(color: MyColors.darkTextColor).onPress( () { print("userId: ${AppState().getUser.data!.userInfo!.userId}"); print("customerId: ${AppState().getUser.data!.userInfo!.customerId}"); // context.read().buildHubConnection(); }, ), 10.width, MyAssets.notificationsBellIcon.buildSvg().onPress(() {}), 15.width, Icon(Icons.message, color: MyColors.darkTextColor) ], ) : InkWell( onTap: () async { if (dashboardVM.selectedNavbarBarIndex == 0) { navigateWithName(context, AppRoutes.branchSearchFilterPage); } if (dashboardVM.selectedNavbarBarIndex == 1) { navigateWithName(context, AppRoutes.appoinmentSearchFilterPage); } if (dashboardVM.selectedNavbarBarIndex == 3) { await context.read().populateDataForAdFilter(); navigateWithName(context, AppRoutes.adsFilterView); } }, child: Consumer2( builder: (BuildContext context, AppointmentsVM appointmentsVM, AdVM adVM, Widget? child) { if (dashboardVM.selectedNavbarBarIndex == 0) { if (appointmentsVM.branchFiltersCounter > 0) { return Padding( padding: const EdgeInsets.only(top: 20), child: Badge( largeSize: 15, smallSize: 20, backgroundColor: MyColors.darkPrimaryColor, label: Text('${appointmentsVM.branchFiltersCounter}'), child: MyAssets.searchIcon.buildSvg(), ), ); } else { return MyAssets.searchIcon.buildSvg(); } } if (dashboardVM.selectedNavbarBarIndex == 1) { if (appointmentsVM.appointmentFiltersCounter > 0) { return Padding( padding: const EdgeInsets.only(top: 20), child: Badge( largeSize: 15, smallSize: 20, backgroundColor: MyColors.darkPrimaryColor, label: Text('${appointmentsVM.appointmentFiltersCounter}'), child: MyAssets.searchIcon.buildSvg(), ), ); } else { return MyAssets.searchIcon.buildSvg(); } } if (dashboardVM.selectedNavbarBarIndex == 3) { if (adVM.adsFiltersCounter > 0) { return Padding( padding: const EdgeInsets.only(top: 20), child: Badge( largeSize: 15, smallSize: 20, backgroundColor: MyColors.darkPrimaryColor, label: Text('${adVM.adsFiltersCounter}'), child: MyAssets.searchIcon.buildSvg(), ), ); } else { return MyAssets.searchIcon.buildSvg(); } } return MyAssets.searchIcon.buildSvg(); }, ), )) .paddingOnly(right: 21) ], ), bottomNavigationBar: CustomBottomNavbar(), body: fragments[context.watch().selectedNavbarBarIndex], ), ); } }