Merge branch 'refs/heads/master' into aamir_dev

# Conflicts:
#	lib/main.dart
#	pubspec.yaml
aamir_dev
Aamir Muhammad 1 year ago
commit 95473d339a

@ -23,6 +23,7 @@ import 'package:flutter/material.dart';
import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/views/appointments/appointments_filter_view.dart';
import 'package:mc_common_app/views/setting_options/provider_accepted_requests_view.dart';
class ProviderAppRoutes {
@ -42,6 +43,7 @@ class ProviderAppRoutes {
AppRoutes.updateAppointmentPage: (context) => const UpdateAppointmentPage(),
AppRoutes.addServiceInAppointment: (context) => AddNewServiceAppointmentPage(ModalRoute.of(context)!.settings.arguments as AppointmentListModel),
AppRoutes.mergeAppointments: (context) => const MergeAppointmentListPage(),
AppRoutes.appoinmentSearchFilterPage: (context) => const AppointmentsFilterView(),
//Subscriptions
AppRoutes.mySubscriptionsPage: (context) => const MySubscriptionsPage(),

@ -169,7 +169,6 @@ class MyApp extends StatelessWidget {
DeviceOrientation.portraitDown,
]);
return Sizer(
return ResponsiveSizer(
builder: (context, orientation, deviceType) {
injector.get<AppState>().setAppType(AppType.provider);
AppState().setPostParamsModel(

@ -269,11 +269,6 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
}
Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getMyAppointmentsForProvider(
{
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
},
);
await context.read<AppointmentsVM>().getMyAppointmentsForProvider(branchID: branchId);
}
}

@ -26,45 +26,37 @@ import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart';
class AppointmentPage extends StatefulWidget {
BranchDetailModel branch;
final BranchDetailModel branch;
AppointmentPage({
required this.branch,
Key? key,
}) : super(key: key);
const AppointmentPage({required this.branch, super.key});
@override
State<AppointmentPage> createState() => _AppointmentPageState();
}
class _AppointmentPageState extends State<AppointmentPage> {
String date = "";
late AppointmentsVM appointmentsVM;
GlobalKey<RefreshIndicatorState> refreshIndicatorKey = GlobalKey<RefreshIndicatorState>();
Future<void> _pullRefresh(BuildContext context) async {
await context.read<AppointmentsVM>().getAppointmentSlotsInfo(
context: context,
map: {"ProviderBranchID": widget.branch.id.toString(), "FromDate": date, "ToDate": date},
isNeedToRebuild: true,
);
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": widget.branch.id.toString(),
"FromDate": date,
"DateTo": date,
});
await appointmentsVM.getAppointmentSlotsInfo(
context: context,
branchID: widget.branch.id!,
isNeedToRebuild: true,
);
await appointmentsVM.getAppointmentsBasedOnFiltersForProviders(branchID: widget.branch.id!);
}
@override
void initState() {
// TODO: implement initState
super.initState();
appointmentsVM = context.read<AppointmentsVM>();
appointmentsVM.selectedBranchIdForAppointments = widget.branch.id!;
scheduleMicrotask(() {
date = DateHelper.formatAsYearMonthDay(DateTime.now());
context.read<AppointmentsVM>().populateAppointmentsFilterList();
appointmentsVM.selectedDateForAppointments = DateHelper.formatAsYearMonthDay(DateTime.now());
appointmentsVM.populateAppointmentsFilterList();
_pullRefresh(context);
context.read<AppointmentsVM>().selectedBranch = widget.branch.id ?? 0;
});
}
@ -74,6 +66,23 @@ class _AppointmentPageState extends State<AppointmentPage> {
appBar: CustomAppBar(
//profileImageUrl: MyAssets.carBanner,
title: widget.branch.branchName,
actions: [
Consumer(builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
return Padding(
padding: EdgeInsets.only(top: appointmentsVM.appointmentFiltersCounter > 0 ? 20 : 0, right: 21),
child: Badge(
isLabelVisible: appointmentsVM.appointmentFiltersCounter > 0,
largeSize: 15,
smallSize: 20,
backgroundColor: MyColors.darkPrimaryColor,
label: Text('${appointmentsVM.appointmentFiltersCounter}'),
child: MyAssets.searchIcon.buildSvg(),
),
).onPress(() {
navigateWithName(context, AppRoutes.appoinmentSearchFilterPage);
});
}),
],
),
body: SizedBox(
width: double.infinity,
@ -113,7 +122,7 @@ class _AppointmentPageState extends State<AppointmentPage> {
appointmentListModel: appointmentsVM.myFilteredAppointments2[index],
isNeedTotalPayment: false,
onTap: () {
context.read<AppointmentsVM>().selectedAppointmentIndex = index;
appointmentsVM.selectedAppointmentIndex = index;
navigateWithName(
context,
AppRoutes.appointmentDetailList,
@ -124,9 +133,7 @@ class _AppointmentPageState extends State<AppointmentPage> {
},
);
},
separatorBuilder: (context, snapchat) {
return 21.height;
},
separatorBuilder: (context, snapchat) => 21.height,
itemCount: appointmentsVM.myFilteredAppointments2.length,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
@ -160,7 +167,7 @@ class _AppointmentPageState extends State<AppointmentPage> {
),
Row(
children: [
date.toText(
appointmentsVM.selectedDateForAppointments.toText(
fontWeight: FontWeight.bold,
),
const Icon(
@ -178,12 +185,12 @@ class _AppointmentPageState extends State<AppointmentPage> {
),
)
.onPress(() async {
date = await Utils.pickDateFromDatePicker(
String date = await Utils.pickDateFromDatePicker(
context,
firstDate: null,
);
appointmentsVM.selectedDateForAppointments = date;
_pullRefresh(context);
// context.read<AppointmentsVM>().notifyListeners();
}),
],
),

@ -111,9 +111,6 @@ class MergeAppointmentListPage extends StatelessWidget {
}
Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
});
await context.read<AppointmentsVM>().getMyAppointmentsForProvider(branchID: branchId);
}
}

@ -313,9 +313,6 @@ class _UpdateAppointmentPageState extends State<UpdateAppointmentPage> {
}
Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
});
await context.read<AppointmentsVM>().getMyAppointmentsForProvider(branchID: branchId);
}
}

@ -23,7 +23,7 @@ import 'package:mc_common_app/widgets/tab/role_type_tab.dart';
import 'package:provider/provider.dart';
class BranchListPage extends StatelessWidget {
const BranchListPage({Key? key}) : super(key: key);
const BranchListPage({super.key});
void deleteBranchBottomSheet(BuildContext context, int branchID) {
return actionConfirmationBottomSheet(

@ -134,8 +134,11 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
value: isServiceActive,
onChanged: (value) async {
if (isEditDisabled) return;
bool status = await updateServiceStatus(context, value);
isServiceActive = await updateServiceStatus(context, value);
if (status) {
isServiceActive = value;
}
setState(() {});
},
),
@ -385,12 +388,11 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
if (list.isEmpty) {
bool status = await serviceVM.updateServiceStatus(
context: context,
serviceStatusEnum: ServiceStatusEnum.deactivated,
serviceStatusEnum: value ? ServiceStatusEnum.approvedOrActive : ServiceStatusEnum.deactivated,
branchId: int.parse(widget.branchModel!.branchId),
providerServiceIds: providerServiceIds,
);
return !status;
return status;
} else {
serviceVM.buildDealNotCompletedBottomSheetOptions(
mainContext: context,
@ -402,7 +404,7 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
} catch (e) {
Utils.hideLoading(context);
log(e.toString());
Utils.showToast(e.toString() ?? "");
Utils.showToast(e.toString());
return value;
}
}

@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:developer';
import 'package:car_provider_app/views/branch_management/services/duplication/sheet/approved_branches_list_sheet.dart';
@ -38,6 +39,8 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
super.initState();
serviceVM = Provider.of<ServiceVM>(context, listen: false);
getMatchedServices();
serviceVM.isAllSelected = false;
setState(() {});
}
getMatchedServices() {
@ -60,40 +63,44 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
child: Column(
children: [
12.height,
DropDownText(
title: widget.matchServicesArguments!.oldBranchName,
showDropDownIcon: false,
),
12.height,
GestureDetector(
onTap: () {
bool newValue = !context.read<ServiceVM>().isAllSelected;
serviceVM.selectAllServices(newValue);
},
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
SizedBox(
height: 30,
width: 30,
child: Checkbox(
value: context.watch<ServiceVM>().isAllSelected,
onChanged: (v) {
serviceVM.selectAllServices(v ?? false);
},
),
),
LocaleKeys.selectAll.tr().toText(fontSize: 14),
],
),
),
DropDownText(title: widget.matchServicesArguments!.oldBranchName, showDropDownIcon: false),
// 12.height,
// Consumer(
// builder: (BuildContext context, ServiceVM serviceVM, Widget? child) {
// if (serviceVM.matchedServices == null || serviceVM.matchedServices!.isEmpty) {
// return const SizedBox();
// }
// return GestureDetector(
// onTap: () {
// bool newValue = !context.read<ServiceVM>().isAllSelected;
// serviceVM.selectAllServices(newValue);
// },
// child: Row(
// mainAxisAlignment: MainAxisAlignment.end,
// children: [
// SizedBox(
// height: 30,
// width: 30,
// child: Checkbox(
// value: context.watch<ServiceVM>().isAllSelected,
// onChanged: (v) {
// serviceVM.selectAllServices(v ?? false);
// },
// ),
// ),
// LocaleKeys.selectAll.tr().toText(fontSize: 14),
// ],
// ),
// );
// },
// ),
12.height,
Expanded(
child: Consumer<ServiceVM>(builder: (context, ServiceVM serviceVM, _) {
if (serviceVM.matchedServices == null) {
return const Center(child: CircularProgressIndicator());
} else if (serviceVM.matchedServices!.isEmpty) {
return EmptyWidget(text: LocaleKeys.noServicesAvailable.tr(), isWrappedColumn: false);
return EmptyWidget(text: LocaleKeys.noServicesAvailableToCopy.tr(), isWrappedColumn: false);
}
return ListView.separated(
itemBuilder: (context, index) {
@ -101,17 +108,35 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Checkbox(
value: serviceVM.matchedServices![index].isExpandedOrSelected,
onChanged: (v) {
if (serviceVM.matchedServices![index].serviceItems!.isEmpty) {
Utils.showToast(LocaleKeys.noAvailableItems.tr());
} else {
serviceVM.matchedServices![index].isExpandedOrSelected = v ?? false;
serviceVM.updateServiceItem(index, serviceVM.matchedServices![index].isExpandedOrSelected);
}
},
),
Builder(builder: (context) {
int lengthSelected = serviceVM.matchedServices![index].serviceItems!.where((c) => c.isUpdateOrSelected == true).length;
int totalLength = serviceVM.matchedServices![index].serviceItems!.length;
if (lengthSelected == 0 || lengthSelected < totalLength) {
serviceVM.matchedServices![index].isExpandedOrSelected = false;
serviceVM.isAllSelected = false;
}
return Checkbox(
value: lengthSelected == totalLength ? true : serviceVM.matchedServices![index].isExpandedOrSelected,
onChanged: (v) {
if (serviceVM.matchedServices![index].serviceItems!.isEmpty) {
Utils.showToast(LocaleKeys.noAvailableItems.tr());
} else {
serviceVM.matchedServices![index].isExpandedOrSelected = v ?? false;
serviceVM.updateServiceItem(index, serviceVM.matchedServices![index].isExpandedOrSelected);
bool isAllChecked = true;
for (var service in serviceVM.matchedServices!) {
if (service.isExpandedOrSelected == false) {
isAllChecked = false;
break;
}
}
serviceVM.isAllSelected = isAllChecked;
setState(() {});
}
},
);
}),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
@ -120,7 +145,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
serviceVM.matchedServices![index].serviceDescription.toString().toText(fontSize: 16, isBold: true),
"${serviceVM.matchedServices![index].serviceItems!.where((c) => c.isUpdateOrSelected == true).length} items selected out of ${serviceVM.matchedServices![index].serviceItems!.length}"
.toText(color: MyColors.lightTextColor),
LocaleKeys.tapToSeeItems.toText(color: MyColors.lightTextColor),
LocaleKeys.tapToSeeItems.tr().toText(color: MyColors.lightTextColor),
],
),
),
@ -129,6 +154,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
() {
showMyBottomSheet(
context,
isDismissible: false,
child: ItemsSelectionSheet(
serviceVM.matchedServices![index].serviceItems ?? [],
onItemCopied: (List<ItemData> selected) {

@ -3,7 +3,6 @@ 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/services_models/item_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/checkbox_with_title_desc.dart';
@ -30,8 +29,20 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
@override
void initState() {
super.initState();
tempItems = widget.serviceItems.map((item) => ItemData.fromJson(item.toJson())).toList();
tempItems = List.from(widget.serviceItems);
setState(() {});
filteredItems = List.from(tempItems!); // Initially show all items
bool isAllChecked = true;
for (var item in filteredItems!) {
if (item.isUpdateOrSelected == false) {
isAllChecked = false;
break;
}
}
isAllItemsSelected = isAllChecked;
}
// Method to filter items based on search query
@ -56,6 +67,15 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
updateTempItem(int index, bool value) {
filteredItems![index].isUpdateOrSelected = value;
bool isAllChecked = true;
for (var item in filteredItems!) {
if (item.isUpdateOrSelected == false) {
isAllChecked = false;
break;
}
}
isAllItemsSelected = isAllChecked;
setState(() {});
}
@ -78,29 +98,23 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
},
),
6.height,
GestureDetector(
onTap: () {
isAllItemsSelected = false;
selectAllTempItems(false);
},
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
SizedBox(
height: 30,
width: 30,
child: Checkbox(
value: isAllItemsSelected,
onChanged: (v) {
if (v == null) return;
isAllItemsSelected = v;
selectAllTempItems(v);
},
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
SizedBox(
height: 30,
width: 30,
child: Checkbox(
value: isAllItemsSelected,
onChanged: (v) {
if (v == null) return;
isAllItemsSelected = v;
selectAllTempItems(v);
},
),
LocaleKeys.selectAll.tr().toText(fontSize: 14),
],
),
),
LocaleKeys.selectAll.tr().toText(fontSize: 14),
],
),
Flexible(
child: ListView.separated(
@ -124,7 +138,7 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
),
12.height,
ShowFillButton(
title: "Copy Selected Item",
title: LocaleKeys.done.tr(),
maxWidth: double.infinity,
onPressed: () {
widget.onItemCopied(filteredItems ?? []);

@ -76,7 +76,12 @@ class _ServicesListPageState extends State<ServicesListPage> {
);
context.read<ServiceVM>().applyFilterOnBranchServices(serviceStatusEnum: status);
filteredServices = categoryData.services!.where((i) => i.serviceStatusEnum == status).toList();
int index = categoryData.services!.indexWhere((i) => i.serviceStatusEnum != ServiceStatusEnum.deactivated);
if (index == -1) {
isCategoryActive = false;
} else {
isCategoryActive = true;
}
screenState = ViewState.idle;
setState(() {});
}
@ -90,20 +95,17 @@ class _ServicesListPageState extends State<ServicesListPage> {
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 1,
child: Padding(
padding: const EdgeInsets.only(top: 5),
child: SvgPicture.asset(
MyAssets.maintenanceIcon,
width: 14,
height: 14,
),
Padding(
padding: const EdgeInsets.only(top: 5),
child: SvgPicture.asset(
MyAssets.maintenanceIcon,
width: 14,
height: 14,
),
),
8.width,
Expanded(
flex: 20,
flex: 10,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
@ -132,38 +134,44 @@ class _ServicesListPageState extends State<ServicesListPage> {
],
),
),
// TODO: NEED TO CONFIRM CATEGORY DEACTIVATION FROM ZAHOOR
const Expanded(
Expanded(
flex: 4,
child: Column(
children: [
// LocaleKeys.active.tr().toText(fontSize: 16),
// 8.width,
// Container(
// width: 50,
// height: 30,
// decoration: BoxDecoration(
// color: isCategoryActive ? MyColors.darkPrimaryColor : MyColors.white,
// borderRadius: BorderRadius.circular(25.0),
// border: Border.all(color: MyColors.lightTextColor, width: 1),
// ),
// child: Transform.scale(
// scale: 0.8,
// child: CupertinoSwitch(
// activeColor: MyColors.darkPrimaryColor,
// trackColor: MyColors.white,
// thumbColor: MyColors.greyACColor,
// value: isCategoryActive,
// onChanged: (value) async {
// if (isEditDisabled) return;
// isCategoryActive = value;
// // isCategoryActive = await updateServiceStatus(context, value);
// setState(() {});
// },
// ),
// ),
// ),
LocaleKeys.active.tr().toText(fontSize: 16),
8.width,
Container(
width: 50,
height: 30,
decoration: BoxDecoration(
color: isCategoryActive ? MyColors.darkPrimaryColor : MyColors.white,
borderRadius: BorderRadius.circular(25.0),
border: Border.all(color: MyColors.lightTextColor, width: 1),
),
child: Transform.scale(
scale: 0.8,
child: CupertinoSwitch(
activeColor: MyColors.darkPrimaryColor,
trackColor: MyColors.white,
thumbColor: MyColors.greyACColor,
value: isCategoryActive,
onChanged: (value) async {
if (isEditDisabled) return;
final status = await updateCategoryStatus(
isCategoryActive: value,
categoryId: categoryData.id!,
branchId: int.parse(categoryData.branchId!),
);
if (status) {
isCategoryActive = value;
_onRefresh(value ? ServiceStatusEnum.pending : ServiceStatusEnum.deactivated);
}
setState(() {});
},
),
),
),
],
),
),
@ -171,6 +179,19 @@ class _ServicesListPageState extends State<ServicesListPage> {
).toWhiteContainer(width: double.infinity, allPading: 12);
}
Future<bool> updateCategoryStatus({required bool isCategoryActive, required int categoryId, required int branchId}) async {
log("isCategoryActive: $isCategoryActive");
final serviceVM = context.read<ServiceVM>();
bool status = await serviceVM.updateCategoryStatus(
context: context,
serviceStatusEnum: isCategoryActive ? ServiceStatusEnum.approvedOrActive : ServiceStatusEnum.deactivated,
branchId: branchId,
categoryId: categoryId,
);
return status;
}
@override
Widget build(BuildContext context) {
categoryData = ModalRoute.of(context)!.settings.arguments as CategoryData;

@ -8,6 +8,7 @@ import 'package:mc_common_app/models/provider_branches_models/branch_detail_mode
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/appointments_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
@ -20,8 +21,8 @@ class BranchAppointmentFragment extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: const CustomAppBar(
title: "Select Branch",
appBar: CustomAppBar(
title: LocaleKeys.selectBranch.tr(),
isRemoveBackButton: true,
),
body: SizedBox(
@ -93,7 +94,7 @@ class BranchAppointmentFragment extends StatelessWidget {
fontWeight: FontWeight.bold,
),
),
"Tap to view".toText(fontSize: 10, color: MyColors.grey70Color),
LocaleKeys.tapToView.tr().toText(fontSize: 10, color: MyColors.grey70Color),
],
),
),

@ -101,7 +101,7 @@ class HomeFragment extends StatelessWidget {
onSubtitleTapped: () {
context.read<DashboardVMProvider>().onNavbarTapped(3);
context.read<AdVM>().updateIsExploreAds(true);
context.read<AdVM>().applyFilterOnExploreAds(createdByRoleFilter: CreatedByRoleEnum.allAds);
context.read<AdVM>().applyFilterOnExploreAds(vehicleBrandId: 0); // allAds
},
).horPaddingMain(),
AdsListWidget(
@ -109,6 +109,7 @@ class HomeFragment extends StatelessWidget {
isAdsFragment: false,
adsList: adVM.myActiveAdsForHome,
scrollPhysics: const NeverScrollableScrollPhysics(),
hasMoreData: adVM.isExploreAdsTapped ? adVM.hasMoreDataForExploreAds : adVM.hasMoreDataForMyAds,
),
],
)
@ -123,7 +124,7 @@ class HomeFragment extends StatelessWidget {
onSubtitleTapped: () {
context.read<DashboardVMProvider>().onNavbarTapped(3);
context.read<AdVM>().updateIsExploreAds(true);
context.read<AdVM>().applyFilterOnExploreAds(createdByRoleFilter: CreatedByRoleEnum.allAds);
context.read<AdVM>().applyFilterOnExploreAds(vehicleBrandId: 0); // allAds
},
).horPaddingMain(),
AdsListWidget(
@ -131,6 +132,7 @@ class HomeFragment extends StatelessWidget {
adsList: adVM.exploreAds.length >= 3 ? adVM.exploreAds.take(3).toList() : adVM.exploreAds,
isAdsFragment: false,
scrollPhysics: const NeverScrollableScrollPhysics(),
hasMoreData: adVM.isExploreAdsTapped ? adVM.hasMoreDataForExploreAds : adVM.hasMoreDataForMyAds,
),
],
)

@ -40,8 +40,10 @@ dependencies:
# path: C:/Users/mirza.shafique/AndroidStudioProjects/mc_common_app
mc_common_app:
path: /Users/amir/StudioProjects/car_common_app
# path: /Volumes/Data/Projects/Flutter/car_common_app
# path: D:\Development\car_common_app
path: /Users/aamir/StudioProjects/car_common_app
# path: /Users/faizhashmi/Development/Projects/MyProjects/CloudSolutions/car_common_app

Loading…
Cancel
Save