You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
car_customer_app/lib/views/dashboard/dashboard_page.dart

164 lines
5.9 KiB
Dart

import 'dart:async';
import 'package:car_customer_app/views/dashboard/fragments/my_requests_fragment.dart';
import 'package:mc_common_app/classes/app_state.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/utils/enums.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: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/widgets/bottom_nav_bar.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/models/general_models/widgets_models.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/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
import 'fragments/branches_fragment.dart';
class DashboardPage extends StatefulWidget {
const DashboardPage({Key? key}) : super(key: key);
@override
State<DashboardPage> createState() => _DashboardPageState();
}
class _DashboardPageState extends State<DashboardPage> {
// late DashboardVM dashboardVM;
@override
void initState() {
super.initState();
// dashboardVM = Provider.of<DashboardVM>(context, listen: false);
scheduleMicrotask(() {
context.read<AppointmentsVM>().populateAppointmentsFilterList();
context.read<AppointmentsVM>().populateBranchesFilterList();
context.read<RequestsVM>().populateRequestsFilterList();
context.read<AdVM>().populateAdsFilterList();
_onRefresh();
});
}
Future<void> _onRefresh() async {
AdVM adVM = Provider.of<AdVM>(context, listen: false);
AppointmentsVM appointmentsVM = Provider.of<AppointmentsVM>(context, listen: false);
RequestsVM requestsVM = Provider.of<RequestsVM>(context, listen: false);
ChatVM chatVM = Provider.of<ChatVM>(context, listen: false);
if (appointmentsVM.myAppointments.isEmpty) {
await appointmentsVM.getMyAppointments();
}
if (appointmentsVM.nearbyBranches.isEmpty) {
await appointmentsVM.getAllNearBranches();
}
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<Widget> fragments = [
const BranchesFragment(),
const AppointmentsFragment(),
const HomeFragment(),
AdsFragment(),
MyRequestsFragment(),
];
String getPageTitle(int index) {
if (index == 0) {
return "Select Branch";
}
if (index == 1) {
return "Appointments";
}
if (index == 2) {
return "";
}
if (index == 3) {
return "Ads";
}
if (index == 4) {
return "My Requests";
}
return "";
}
@override
Widget build(BuildContext context) {
DashboardVmCustomer dashboardVM = context.read<DashboardVmCustomer>();
bool isHomePage = dashboardVM.selectedNavbarBarIndex == 2;
return Scaffold(
appBar: CustomAppBar(
backgroundColor: null,
leadingWidth: 100,
title: getPageTitle(dashboardVM.selectedNavbarBarIndex),
profileImageUrl: MyAssets.bnCar,
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("myId: ${AppState().getUser.data!.userInfo!.userId}");
// context.read<ChatVM>().buildHubConnection();
}),
10.width,
MyAssets.notificationsBellIcon.buildSvg().onPress(() {}),
15.width,
Icon(Icons.message, color: MyColors.darkTextColor).onPress(() {}),
],
)
: InkWell(
onTap: () async {
if (dashboardVM.selectedNavbarBarIndex == 3) {
await context.read<AdVM>().populateDataForAdFilter();
navigateWithName(context, AppRoutes.adsFilterView);
}
},
child: MyAssets.searchIcon.buildSvg(),
))
.paddingOnly(right: 21)
],
),
bottomNavigationBar: CustomBottomNavbar(),
body: fragments[context.watch<DashboardVmCustomer>().selectedNavbarBarIndex],
);
}
}