minor fixes

aamir_dev
Faiz Hashmi 1 year ago
parent af3d63a80f
commit 0fdb9b4acc

@ -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);
}
}

@ -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,

@ -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 ?? []);

@ -77,7 +77,9 @@ 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) {
if (index == -1) {
isCategoryActive = false;
} else {
isCategoryActive = true;
}
screenState = ViewState.idle;
@ -93,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,

@ -24,23 +24,6 @@ class BranchAppointmentFragment extends StatelessWidget {
appBar: CustomAppBar(
title: LocaleKeys.selectBranch.tr(),
isRemoveBackButton: true,
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,
@ -111,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),
],
),
),

Loading…
Cancel
Save