Completed Ads with NEW ui

merge-requests/2/head
FaizHashmiCS22 3 years ago
parent 1b59c8f31a
commit bb4e3d3c3a

@ -1,6 +1,6 @@
import 'package:car_customer_app/views/appointment_detail_view.dart';
import 'package:car_customer_app/views/book_provider_app_view.dart';
import 'package:car_customer_app/views/appointments/appointment_detail_view.dart';
import 'package:car_customer_app/views/dashboard/dashboard_page.dart';
import 'package:car_customer_app/views/providers/book_provider_app_view.dart';
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';

@ -1,26 +1,26 @@
import 'package:car_customer_app/config/customer_dependencies.dart';
import 'package:car_customer_app/config/customer_routes.dart';
import 'package:car_customer_app/view_models/appointments_view_model.dart';
import 'package:car_customer_app/view_models/dashboard_view_model.dart';
import 'package:car_customer_app/view_models/providers_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/services/services.dart';
import 'package:mc_common_app/theme/app_theme.dart';
import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/models/post_params_model.dart';
import 'package:mc_common_app/repositories/common_repo.dart';
import 'package:mc_common_app/repositories/user_repo.dart';
import 'package:mc_common_app/services/services.dart';
import 'package:mc_common_app/theme/app_theme.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:mc_common_app/view_models/base_view_model.dart';
import 'package:mc_common_app/view_models/user_view_model.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:sizer/sizer.dart';
import 'package:provider/provider.dart';
import 'package:provider/single_child_widget.dart';
import 'package:mc_common_app/repositories/common_repo.dart';
import 'package:sizer/sizer.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
@ -31,9 +31,7 @@ Future<void> main() async {
runApp(
MultiProvider(
providers: <SingleChildWidget>[
ChangeNotifierProvider<BaseVM>(
create: (_) => BaseVM(),
),
ChangeNotifierProvider<BaseVM>(create: (_) => BaseVM()),
ChangeNotifierProvider<DashboardVM>(
create: (_) => DashboardVM(
userRepo: injector.get<UserRepo>(),
@ -44,7 +42,22 @@ Future<void> main() async {
create: (_) => UserVM(userRepo: injector.get<UserRepo>()),
),
ChangeNotifierProvider<AdVM>(
create: (_) => AdVM(commonServices: injector.get<CommonServices>(), commonRepo: injector.get<CommonRepo>()),
create: (_) => AdVM(
commonServices: injector.get<CommonServices>(),
commonRepo: injector.get<CommonRepo>(),
),
),
ChangeNotifierProvider<ProvidersVM>(
create: (_) => ProvidersVM(
commonServices: injector.get<CommonServices>(),
commonRepo: injector.get<CommonRepo>(),
),
),
ChangeNotifierProvider<AppointmentsVM>(
create: (_) => AppointmentsVM(
commonServices: injector.get<CommonServices>(),
commonRepo: injector.get<CommonRepo>(),
),
),
],
child: const MyApp(),

@ -0,0 +1,33 @@
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/models/widgets_models.dart';
import 'package:mc_common_app/repositories/common_repo.dart';
import 'package:mc_common_app/services/services.dart';
class AppointmentsVM extends ChangeNotifier {
final CommonRepo commonRepo;
final CommonServices commonServices;
AppointmentsVM({required this.commonServices, required this.commonRepo});
List<FilterListModel> appointmentsFilterOptions = [];
populateAppointmentsFilterList() {
appointmentsFilterOptions.clear();
appointmentsFilterOptions = [
FilterListModel(title: "All Appointments", isSelected: true),
FilterListModel(title: "Booked", isSelected: false),
FilterListModel(title: "Confirmed", isSelected: false),
FilterListModel(title: "Arrived", isSelected: false),
];
notifyListeners();
}
applyFilterOnAppointmentsVM({required int index}) {
if (appointmentsFilterOptions.isEmpty) return;
for (var value in appointmentsFilterOptions) {
value.isSelected = false;
}
appointmentsFilterOptions[index].isSelected = true;
notifyListeners();
}
}

@ -0,0 +1,35 @@
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/models/widgets_models.dart';
import 'package:mc_common_app/repositories/common_repo.dart';
import 'package:mc_common_app/services/services.dart';
class ProvidersVM extends ChangeNotifier {
final CommonRepo commonRepo;
final CommonServices commonServices;
ProvidersVM({required this.commonServices, required this.commonRepo});
List<FilterListModel> providersFilterOptions = [];
populateProvidersFilterList() {
providersFilterOptions.clear();
providersFilterOptions = [
FilterListModel(title: "All Providers", isSelected: true),
FilterListModel(title: "Maintenance", isSelected: false),
FilterListModel(title: "Oil Service", isSelected: false),
FilterListModel(title: "Accessories", isSelected: false),
FilterListModel(title: "Tire Service", isSelected: false),
FilterListModel(title: "Dent and Paint", isSelected: false),
];
notifyListeners();
}
applyFilterOnProviders({required int index}) {
if (providersFilterOptions.isEmpty) return;
for (var value in providersFilterOptions) {
value.isSelected = false;
}
providersFilterOptions[index].isSelected = true;
notifyListeners();
}
}

@ -5,8 +5,8 @@ import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/theme/colors.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/common_widgets/card_button_with_icon.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
class AppointmentDetailView extends StatelessWidget {
AppointmentDetailView({Key? key}) : super(key: key);

@ -1,4 +1,7 @@
import 'dart:async';
import 'package:car_customer_app/view_models/appointments_view_model.dart';
import 'package:car_customer_app/view_models/dashboard_view_model.dart';
import 'package:car_customer_app/view_models/providers_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';
@ -8,6 +11,7 @@ import 'package:car_customer_app/views/dashboard/widgets/bottom_nav_bar.dart';
import 'package:car_customer_app/views/dashboard/widgets/drawer_widget.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/consts.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';
@ -27,6 +31,11 @@ class _DashboardPageState extends State<DashboardPage> {
super.initState();
// dashboardVM = Provider.of<DashboardVM>(context, listen: false);
fetchUsername();
scheduleMicrotask(() {
context.read<AppointmentsVM>().populateAppointmentsFilterList();
context.read<ProvidersVM>().populateProvidersFilterList();
context.read<AdVM>().populateAdsFilterList();
});
}
fetchUsername() async {}

@ -1,13 +1,14 @@
import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:mc_common_app/views/advertisement/ads_list.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/theme/colors.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/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/common_widgets/categories_list.dart';
import 'package:provider/provider.dart';
import 'package:mc_common_app/views/advertisement/ads_list.dart';
class AdsFragment extends StatelessWidget {
AdsFragment({Key? key}) : super(key: key);
@ -30,43 +31,52 @@ class AdsFragment extends StatelessWidget {
16.height,
Consumer(
builder: (BuildContext context, AdVM adVM, Widget? child) {
return Row(
return Column(
children: [
Expanded(
child: ShowFillButton(
isFilled: adVM.isExploreAdsTapped,
maxHeight: 55,
title: "Explore Ads",
txtColor: adVM.isExploreAdsTapped ? MyColors.white : MyColors.darkTextColor,
onPressed: () {
adVM.updateIsExploreAds(true);
},
),
),
12.width,
Expanded(
child: ShowFillButton(
isFilled: !adVM.isExploreAdsTapped,
txtColor: !adVM.isExploreAdsTapped ? MyColors.white : MyColors.darkTextColor,
maxHeight: 55,
title: "My Ads",
onPressed: () {
adVM.updateIsExploreAds(false);
},
),
Row(
children: [
Expanded(
child: ShowFillButton(
isFilled: adVM.isExploreAdsTapped,
maxHeight: 55,
title: "Explore Ads",
txtColor: adVM.isExploreAdsTapped ? MyColors.white : MyColors.darkTextColor,
onPressed: () {
print("ads: ${AppState().getUser.data!.accessToken}");
adVM.updateIsExploreAds(true);
},
),
),
12.width,
Expanded(
child: ShowFillButton(
isFilled: !adVM.isExploreAdsTapped,
txtColor: !adVM.isExploreAdsTapped ? MyColors.white : MyColors.darkTextColor,
maxHeight: 55,
title: "My Ads",
onPressed: () {
adVM.updateIsExploreAds(false);
},
),
),
],
),
if (adVM.isExploreAdsTapped) ...[
16.height,
FiltersList(filterList: adVM.adsFilterOptions, onFilterTapped: (index) => adVM.applyFilterOnAds(index: index), needLeftPadding: false),
],
],
);
},
),
24.height,
16.height,
Expanded(
child: RefreshIndicator(
onRefresh: () => onRefreshAds(context),
child: Consumer(
builder: (BuildContext context, AdVM adVM, Widget? child) {
return BuildAdsList(
adsList: adVM.isExploreAdsTapped ? adVM.allAds : adVM.myAds,
adsList: adVM.isExploreAdsTapped && adVM.adsFilteredList.isNotEmpty ? adVM.adsFilteredList : adVM.myAds,
);
},
),

@ -1,10 +1,12 @@
import 'package:car_customer_app/view_models/appointments_view_model.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/widgets/common_widgets/customer_appointment_slider_widget.dart';
import 'package:mc_common_app/widgets/common_widgets/categories_list.dart';
import 'package:mc_common_app/widgets/common_widgets/customer_appointment_slider_widget.dart';
import 'package:provider/provider.dart';
class AppointmentsFragment extends StatelessWidget {
const AppointmentsFragment({Key? key}) : super(key: key);
@ -15,26 +17,33 @@ class AppointmentsFragment extends StatelessWidget {
color: MyColors.backgroundColor,
width: double.infinity,
height: double.infinity,
child: Column(
children: [
16.height,
CategoriesList(name: "Upcoming", onTapped: () {}),
16.height,
Expanded(
child: Container(
child: ListView.builder(
shrinkWrap: true,
itemCount: 30,
itemBuilder: (BuildContext context, int index) {
return BuildAppointmentContainerForCustomer(
onTapped: () {
navigateWithName(context, AppRoutes.appointmentDetailView);
},
);
}),
),
),
],
child: Consumer(
builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
return Column(
children: [
16.height,
FiltersList(
filterList: appointmentsVM.appointmentsFilterOptions,
onFilterTapped: (index) => appointmentsVM.applyFilterOnAppointmentsVM(index: index),
),
16.height,
Expanded(
child: Container(
child: ListView.builder(
shrinkWrap: true,
itemCount: 30,
itemBuilder: (BuildContext context, int index) {
return BuildAppointmentContainerForCustomer(
onTapped: () {
navigateWithName(context, AppRoutes.appointmentDetailView);
},
);
}),
),
),
],
);
},
),
);
}

@ -1,12 +1,15 @@
import 'dart:async';
import 'package:mc_common_app/views/advertisement/ads_list.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:car_customer_app/view_models/dashboard_view_model.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:mc_common_app/widgets/common_widgets/view_all_widget.dart';
import 'package:mc_common_app/widgets/common_widgets/my_service_provider.dart';
import 'package:mc_common_app/views/advertisement/ads_list.dart';
import 'package:mc_common_app/widgets/common_widgets/customer_appointment_slider_widget.dart';
import 'package:mc_common_app/widgets/common_widgets/my_service_provider.dart';
import 'package:mc_common_app/widgets/common_widgets/view_all_widget.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
class HomeFragment extends StatefulWidget {
@ -47,27 +50,44 @@ class _HomeFragmentState extends State<HomeFragment> {
mainAxisSize: MainAxisSize.max,
children: [
16.height,
ViewAllWidget(title: "Upcoming Appointment".toUpperCase(), subTitle: "View All").horPaddingMain(),
ViewAllWidget(
title: "Upcoming Appointment".toUpperCase(),
subTitle: "View All",
onSubtitleTapped: () {},
).horPaddingMain(),
const CustomerAppointmentSliderWidget(),
7.height,
ViewAllWidget(title: "My Recent Service Providers".toUpperCase(), subTitle: "View All").horPaddingMain(),
ViewAllWidget(title: "My Recent Service Providers".toUpperCase(), subTitle: "View All", onSubtitleTapped: () {}).horPaddingMain(),
const ServiceProviderWidget().horPaddingMain(),
15.height,
ViewAllWidget(title: "My Active Ads".toUpperCase(), subTitle: "View All").horPaddingMain(),
ViewAllWidget(
title: "My Active Ads".toUpperCase(),
subTitle: "View All",
onSubtitleTapped: () {
context.read<DashboardVM>().onNavbarTapped(3);
context.read<AdVM>().updateIsExploreAds(false);
}).horPaddingMain(),
Consumer(
builder: (BuildContext context, AdVM adVM, Widget? child) {
return BuildAdsList(
adsList: adVM.myAds,
adsList: adVM.myAds.length >= 3 ? adVM.myAds.take(3).toList() : adVM.myAds,
scrollPhysics: NeverScrollableScrollPhysics(),
).horPaddingMain();
},
),
20.height,
ViewAllWidget(title: "My Recommended Ads".toUpperCase(), subTitle: "View All").horPaddingMain(),
ViewAllWidget(
title: "My Recommended Ads".toUpperCase(),
subTitle: "View All",
onSubtitleTapped: () {
context.read<DashboardVM>().onNavbarTapped(3);
context.read<AdVM>().updateIsExploreAds(true);
context.read<AdVM>().applyFilterOnAds(index: 0);
}).horPaddingMain(),
Consumer(
builder: (BuildContext context, AdVM adVM, Widget? child) {
return BuildAdsList(
adsList: adVM.allAds,
adsList: adVM.allAds.length >= 3 ? adVM.allAds.take(3).toList() : adVM.allAds,
scrollPhysics: NeverScrollableScrollPhysics(),
).horPaddingMain();
},

@ -1,11 +1,13 @@
import 'package:car_customer_app/view_models/providers_view_model.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/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/widgets/common_widgets/provider_details_card.dart';
import 'package:mc_common_app/widgets/common_widgets/categories_list.dart';
import 'package:mc_common_app/widgets/common_widgets/provider_details_card.dart';
import 'package:provider/provider.dart';
class ProvidersFragment extends StatelessWidget {
const ProvidersFragment({Key? key}) : super(key: key);
@ -16,30 +18,37 @@ class ProvidersFragment extends StatelessWidget {
color: MyColors.backgroundColor,
width: double.infinity,
height: double.infinity,
child: Column(
children: [
16.height,
CategoriesList(name: "Oil Services", onTapped: () {}),
16.height,
Expanded(
child: Container(
child: ListView.builder(
shrinkWrap: true,
itemCount: 30,
itemBuilder: (BuildContext context, int index) {
return ProviderDetailsCard(
onCardTapped: () {
navigateWithName(context, AppRoutes.bookProviderAppView);
},
providerImageUrl: MyAssets.bnCar,
providerLocation: " 3km",
providerName: "Al Ahmed Maintenance",
providerRatings: "4.9",
);
}),
),
),
],
child: Consumer(
builder: (BuildContext context, ProvidersVM providersVM, Widget? child) {
return Column(
children: [
16.height,
FiltersList(
filterList: providersVM.providersFilterOptions,
onFilterTapped: (index) => providersVM.applyFilterOnProviders(index: index),
),
16.height,
Expanded(
child: Container(
child: ListView.builder(
shrinkWrap: true,
itemCount: 30,
itemBuilder: (BuildContext context, int index) {
return ProviderDetailsCard(
onCardTapped: () {
navigateWithName(context, AppRoutes.bookProviderAppView);
},
providerImageUrl: MyAssets.bnCar,
providerLocation: " 3km",
providerName: "Al Ahmed Maintenance",
providerRatings: "4.9",
);
}),
),
),
],
);
},
),
);
}

@ -1,14 +1,13 @@
import 'package:car_customer_app/view_models/dashboard_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
class CustomBottomNavbar extends StatelessWidget {
const CustomBottomNavbar({Key? key}) : super(key: key);

@ -1,3 +1,7 @@
import 'package:car_customer_app/view_models/dashboard_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.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';
@ -8,12 +12,8 @@ import 'package:mc_common_app/models/user/image_response.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:car_customer_app/view_models/dashboard_view_model.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
class CustomDrawer extends StatefulWidget {
final DashboardVM dashboardVM;
@ -161,8 +161,7 @@ class _CustomDrawerState extends State<CustomDrawer> {
title: LocaleKeys.account.tr().toText(fontSize: 12),
),
ListTile(
leading:
Image.asset(
leading: Image.asset(
MyAssets.icWorldPng,
width: 20,
height: 20,

@ -3,11 +3,12 @@ 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/theme/colors.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/common_widgets/provider_details_card.dart';
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/common_widgets/time_slots.dart';
class BookProviderAppView extends StatefulWidget {
const BookProviderAppView({Key? key}) : super(key: key);
@ -166,38 +167,3 @@ class ReviewAppointmentSection extends StatelessWidget {
}
}
class BuildTimeSlots extends StatelessWidget {
const BuildTimeSlots({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return SizedBox(
height: 37,
width: double.infinity,
child: ListView.builder(
itemCount: 20,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {},
child: Container(
alignment: Alignment.center,
margin: EdgeInsets.only(right: 8),
width: 50,
decoration: BoxDecoration(
color: index < 1 ? MyColors.darkIconColor : null,
border: Border.all(
color: index < 1 ? MyColors.darkIconColor : MyColors.primaryColor,
width: 2,
),
),
child: "09:00".toText(
fontSize: 12,
color: index < 1 ? MyColors.white : null,
),
),
);
}),
);
}
}
Loading…
Cancel
Save