fixed Things before QA

aamir_dev
Faiz Hashmi 1 year ago
parent aad7b199da
commit e7c6c044e0

@ -308,12 +308,15 @@ class BranchDetailPage extends StatelessWidget {
],
)
.toContainer(
borderRadius: 0,
backgroundColor: MyColors.darkWhiteColor,
width: double.infinity,
paddingAll: 25,
margin: const EdgeInsets.only(left: 20, right: 20, top: 20),
)
borderRadius: 0,
backgroundColor: MyColors.darkWhiteColor,
width: double.infinity,
paddingAll: 25,
margin: const EdgeInsets.only(
left: 20,
right: 20,
top: 20,
))
.onPress(() {
if (branchData.branchStatus == BranchStatusEnum.pending || branchData.branchStatus == BranchStatusEnum.rejected) {
Utils.showToast("Please wait for the branch verification.");

@ -13,6 +13,7 @@ import 'package:mc_common_app/models/appointments_models/schedule_model.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/date_helper.dart';
import 'package:mc_common_app/utils/dialogs_and_bottomsheets.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
@ -246,7 +247,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
ShowFillButton(
title: LocaleKeys.create.tr(),
maxWidth: double.infinity,
margin: const EdgeInsets.symmetric(horizontal: 20),
margin: const EdgeInsets.all(20),
onPressed: () {
if (validation(model)) {
if (scheduleData.id != null) {
@ -341,8 +342,8 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
pop(context);
} else {
Utils.showToast(servicesResponse.message ?? "");
context.read<ScheduleVM>().getSchedules(scheduleData.branchId ?? "");
pop(context);
// context.read<ScheduleVM>().getSchedules(scheduleData.branchId ?? "");
// pop(context);
}
} else {
Utils.hideLoading(context);

@ -9,10 +9,12 @@ import 'package:mc_common_app/models/appointments_models/schedule_model.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/date_helper.dart';
import 'package:mc_common_app/utils/dialogs_and_bottomsheets.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.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/empty_widget.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
import 'package:flutter_svg/flutter_svg.dart';
@ -34,25 +36,64 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
context.read<ScheduleVM>().getSchedules(widget.branchId ?? "");
}
void deleteScheduleConfirmationSheet(int index, ScheduleVM serviceVM, BuildContext context) {
return actionConfirmationBottomSheet(
context: context,
title: LocaleKeys.deleteScheduleConfirmation.tr().toText(fontSize: 28, isBold: true, letterSpacing: -1.44),
subtitle: LocaleKeys.deleteScheduleAdConfirmationMessage.tr(),
actionButtonYes: Expanded(
child: ShowFillButton(
maxHeight: 55,
title: LocaleKeys.yes.tr(),
fontSize: 15,
onPressed: () async {
Navigator.pop(context);
Utils.showLoading(context);
GenericRespModel res = await serviceVM.setScheduleInactive(serviceVM.schedule!.data![index].id!, serviceVM.schedule!.data![index].serviceProviderBranchId!);
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast(LocaleKeys.branch_deleted.tr());
} else {
Utils.showToast(res.message ?? "");
}
},
),
),
actionButtonNo: Expanded(
child: ShowFillButton(
maxHeight: 55,
isFilled: false,
borderColor: MyColors.darkPrimaryColor,
title: LocaleKeys.no.tr(),
txtColor: MyColors.darkPrimaryColor,
fontSize: 15,
onPressed: () {
Navigator.pop(context);
},
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: const CustomAppBar(
title: "Schedules",
),
appBar: CustomAppBar(title: LocaleKeys.branchSchedules.tr()),
body: SizedBox(
width: double.infinity,
child: Column(
children: [
Expanded(
child: Consumer<ScheduleVM>(
builder: (BuildContext context, value, Widget? child) {
return value.schedule == null
builder: (BuildContext context, scheduleVM, Widget? child) {
return scheduleVM.schedule == null
? const Center(
child: CircularProgressIndicator(),
)
: value.schedule!.data!.isEmpty
? "No Schedule Found".toText()
: scheduleVM.schedule!.data!.isEmpty
? EmptyWidget(
text: LocaleKeys.noSchedulesFound.tr(),
)
: ListView.separated(
itemBuilder: (BuildContext context, int index) {
return Column(
@ -61,21 +102,10 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: value.schedule!.data![index].scheduleName.toString().toText(
fontSize: 16,
),
),
Expanded(child: scheduleVM.schedule!.data![index].scheduleName.toString().toText(fontSize: 16)),
IconButton(
onPressed: () async {
Utils.showLoading(context);
GenericRespModel res = await value.setScheduleInactive(value.schedule!.data![index].id!, value.schedule!.data![index].serviceProviderBranchId!);
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast(LocaleKeys.branch_deleted.tr());
} else {
Utils.showToast(res.message ?? "");
}
return deleteScheduleConfirmationSheet(index, scheduleVM, context);
},
icon: const Icon(Icons.delete),
color: Colors.red,
@ -88,24 +118,24 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
height: 16,
),
).onPress(() {
value.schedule!.data![index].branchId = widget.branchId ?? "";
navigateWithName(context, ProviderAppRoutes.addSchedule, arguments: value.schedule!.data![index]);
scheduleVM.schedule!.data![index].branchId = widget.branchId ?? "";
navigateWithName(context, ProviderAppRoutes.addSchedule, arguments: scheduleVM.schedule!.data![index]);
}),
],
),
8.height,
showItem("${LocaleKeys.startDate.tr()}:", DateHelper.formatAsDayMonthYear(value.schedule!.data![index].fromDate)),
showItem("${LocaleKeys.endDate.tr()}:", DateHelper.formatAsDayMonthYear(value.schedule!.data![index].toDate)),
showItem("${LocaleKeys.shiftStartTime.tr()}:", value.schedule!.data![index].startTime ?? ""),
showItem("${LocaleKeys.shiftEndTime.tr()}:", value.schedule!.data![index].endTime ?? ""),
showItem("${LocaleKeys.slotsTime.tr()}:", "${value.schedule!.data![index].slotDurationMinute} Mins"),
showItem("${LocaleKeys.appointmentPerSlot.tr()}:", value.schedule!.data![index].perSlotAppointment.toString()),
showItem("${LocaleKeys.offDays.tr()}:", offDays(value.schedule!.data![index])),
showItem("${LocaleKeys.startDate.tr()}:", DateHelper.formatAsDayMonthYear(scheduleVM.schedule!.data![index].fromDate)),
showItem("${LocaleKeys.endDate.tr()}:", DateHelper.formatAsDayMonthYear(scheduleVM.schedule!.data![index].toDate)),
showItem("${LocaleKeys.shiftStartTime.tr()}:", scheduleVM.schedule!.data![index].startTime ?? ""),
showItem("${LocaleKeys.shiftEndTime.tr()}:", scheduleVM.schedule!.data![index].endTime ?? ""),
showItem("${LocaleKeys.slotsTime.tr()}:", "${scheduleVM.schedule!.data![index].slotDurationMinute} Mins"),
showItem("${LocaleKeys.appointmentPerSlot.tr()}:", scheduleVM.schedule!.data![index].perSlotAppointment.toString()),
showItem("${LocaleKeys.offDays.tr()}:", offDays(scheduleVM.schedule!.data![index])),
12.height,
"${LocaleKeys.services.tr()}:".toText(fontSize: 12, color: MyColors.lightTextColor),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: value.schedule!.data![index].scheduleServices!
children: scheduleVM.schedule!.data![index].scheduleServices!
.map(
(element) => Container(
child: element.serviceDescription.toString().toText(fontSize: 12),
@ -120,7 +150,7 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
return 12.height;
},
padding: const EdgeInsets.all(20),
itemCount: value.schedule!.data!.length,
itemCount: scheduleVM.schedule!.data!.length,
);
},
),

@ -25,7 +25,7 @@ class ChipsPickerItem extends StatelessWidget {
Widget build(BuildContext context) {
return Row(
children: [
if (itemsList.isEmpty) Expanded(child: hint.toText(fontSize: 14, color: borderColor)),
if (itemsList.isEmpty) Expanded(child: hint.toText(fontSize: 15, fontWeight: MyFonts.Medium, color: borderColor)),
if (itemsList.isNotEmpty)
Expanded(
child: ListView(

@ -60,20 +60,15 @@ class _SelectDaysSheetState extends State<SelectDaysSheet> {
Expanded(
child: ListView.separated(
itemBuilder: (BuildContext context, int index) {
return Row(
children: [
Checkbox(
value: list[index].isSelected,
onChanged: (bool? v) {
list[index].isSelected = v;
setState(() {});
},
),
12.width,
Expanded(
child: list[index].title.toText(fontSize: 16),
),
],
return CheckboxListTile(
contentPadding: EdgeInsets.zero,
controlAffinity: ListTileControlAffinity.leading,
title: list[index].title.toText(fontSize: 16),
value: list[index].isSelected,
onChanged: (bool? v) {
list[index].isSelected = v;
setState(() {});
},
);
},
separatorBuilder: (BuildContext context, int index) {

@ -61,20 +61,15 @@ class SelectServicesSheet extends StatelessWidget {
? const Center(child: CircularProgressIndicator())
: ListView.separated(
itemBuilder: (BuildContext context, int index) {
return Row(
children: [
Checkbox(
value: model.servicesList![index].isSelected,
onChanged: (bool? v) {
model.servicesList![index].isSelected = v;
model.notifyListeners();
},
),
12.width,
Expanded(
child: model.servicesList![index].description!.toText(fontSize: 16),
),
],
return CheckboxListTile(
contentPadding: EdgeInsets.zero,
controlAffinity: ListTileControlAffinity.leading,
title: model.servicesList![index].description!.toText(fontSize: 16),
value: model.servicesList![index].isSelected,
onChanged: (bool? v) {
model.servicesList![index].isSelected = v;
model.notifyListeners();
},
);
},
separatorBuilder: (BuildContext context, int index) {
@ -99,7 +94,7 @@ class SelectServicesSheet extends StatelessWidget {
onSelectServices();
Navigator.pop(context);
},
).paddingOnly(bottom: 20)
)
],
),
);

@ -123,6 +123,7 @@ class _CreateItemPageState extends State<CreateItemPage> {
isPdf: false,
isReview: false,
isFromNetwork: false,
allowAdButton: false,
onAddFilePressed: () async {
file = await itemsVM!.pickSingleFile(context);
setState(() {});
@ -131,12 +132,13 @@ class _CreateItemPageState extends State<CreateItemPage> {
] else ...[
10.height,
DottedRectContainer(
onTap: () async {
file = await itemsVM!.pickSingleFile(context);
setState(() {});
},
text: LocaleKeys.attachImage.tr(),
icon: MyAssets.attachmentIcon.buildSvg())
onTap: () async {
file = await itemsVM!.pickSingleFile(context);
setState(() {});
},
text: LocaleKeys.attachImage.tr(),
icon: MyAssets.attachmentIcon.buildSvg(),
)
],
20.height,
CheckBoxWithTitleDescription(
@ -204,9 +206,9 @@ class _CreateItemPageState extends State<CreateItemPage> {
Utils.hideLoading(context);
if (mResponse.messageStatus == 1) {
itemsVM!.getServiceItems(itemData!.serviceProviderServiceId ?? 0);
pop(context);
}
Utils.showToast(mResponse.message ?? "");
pop(context);
} else {
Map map = {
"id": itemData!.id,
@ -227,6 +229,7 @@ class _CreateItemPageState extends State<CreateItemPage> {
Utils.hideLoading(context);
if (mResponse.messageStatus == 1) {
itemsVM!.getServiceItems(itemData!.serviceProviderServiceId ?? 0);
pop(context);
}
Utils.showToast(mResponse.message ?? "");
pop(context);
@ -242,6 +245,10 @@ class _CreateItemPageState extends State<CreateItemPage> {
bool validation() {
bool valid = true;
if (file == null) {
Utils.showToast("Please add al least one item image.");
valid = false;
}
if (name == null || name!.length < 3) {
Utils.showToast("Please add valid item name");
valid = false;

@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:developer';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/utils/navigator.dart';
@ -15,10 +16,15 @@ import 'package:mc_common_app/widgets/checkbox_with_title_desc.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:easy_localization/easy_localization.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/txt_field.dart';
import 'package:provider/provider.dart';
// [log] 1035 -> branch ID
// [log] HMG Branch QA II -> branchName
// [log] 8 -> category ID
// [log] Sell Car -> categegory name
// [log] New Car -> service name
class CreateServicesPage3 extends StatefulWidget {
final CreateBranchModel? branchModel;
@ -41,19 +47,23 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
@override
void initState() {
super.initState();
scheduleMicrotask(() {
scheduleMicrotask(() async {
ServiceVM serviceVM = context.read<ServiceVM>();
if (widget.branchModel!.categoryId == null) {
serviceVM.fetchBranchCategory(EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
} else {
if (widget.branchModel!.categoryId != null) {
await serviceVM.fetchServicesByCategoryId(int.parse(widget.branchModel!.categoryId ?? "0"));
category = DropValue(int.parse(widget.branchModel!.categoryId ?? "0"), widget.branchModel!.categoryName ?? "", "");
service = serviceVM.servicesDropList.firstWhere((element) => element.id == widget.branchModel!.serviceProviderService!.serviceId);
isAppointmentAvailable = widget.branchModel?.serviceProviderService?.isAllowAppointment ?? false;
// isHomeAppointmentAvailable=branchModel.serviceProviderService.
serviceRage = widget.branchModel?.serviceProviderService?.customerLocationRange ?? 0;
if (serviceRage > 0) {
isHomeAppointmentAvailable = true;
}
chargersPerKm = widget.branchModel?.serviceProviderService?.rangePricePerKm ?? "";
serviceId = widget.branchModel?.serviceProviderService?.serviceId ?? -1;
serviceId = widget.branchModel?.serviceProviderService?.serviceProviderServiceId ?? -1;
setState(() {});
}
});
}
@ -61,7 +71,7 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(title: LocaleKeys.addServices.tr()),
appBar: CustomAppBar(title: LocaleKeys.editServices.tr()),
body: SizedBox(
width: double.infinity,
height: double.infinity,
@ -75,87 +85,46 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
padding: const EdgeInsets.all(20.0),
child: Column(
children: [
// Text(
// widget.branchModel!.branchName ?? "N/A",
// style: const TextStyle(
// fontSize: 12,
// fontWeight: FontWeight.bold,
// ),
// ).toContainer(
// padding: const EdgeInsets.only(left: 8, right: 8, bottom: 12, top: 12),
// backgroundColor: MyColors.textFieldColor,
// borderRadius: 0,
// width: double.infinity,
// ),
// 12.height,
(widget.branchModel!.categoryId != null)
? Text(
widget.branchModel!.categoryName ?? "N/A",
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
),
).toContainer(
padding: const EdgeInsets.only(left: 8, right: 8, bottom: 12, top: 12),
backgroundColor: MyColors.textFieldColor,
borderRadius: 0,
width: double.infinity,
? DropdownField(
isSelectAble: false,
(DropValue value) async {
// categoryId = value.id;
// category = value;
// service = null;
// serviceId = -1;
// isAppointmentAvailable = false;
// isHomeAppointmentAvailable = false;
// model.fetchServicesByCategoryId(value.id);
},
dropdownValue: category,
list: model.categoryDropList,
hint: category != null ? category!.value : LocaleKeys.selectServiceCategory.tr(),
)
: (widget.branchModel!.categoryId == null && model.categoryDropList.isNotEmpty)
? DropdownField(
(DropValue value) async {
categoryId = value.id;
category = value;
service = null;
serviceId = -1;
isAppointmentAvailable = false;
isHomeAppointmentAvailable = false;
model.fetchServicesByCategoryId(value.id);
},
dropdownValue: category,
list: model.categoryDropList,
hint: LocaleKeys.selectServiceCategory.tr(),
)
: const CircularProgressIndicator(),
: const CircularProgressIndicator(),
12.height,
widget.branchModel!.serviceProviderService != null
? Text(
widget.branchModel!.serviceProviderService!.serviceDescription ?? "N/A",
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
),
).toContainer(
padding: const EdgeInsets.only(left: 8, right: 8, bottom: 12, top: 12),
backgroundColor: MyColors.textFieldColor,
borderRadius: 0,
width: double.infinity,
model.servicesDropList.isNotEmpty
? DropdownField(
(DropValue value) {
service = value;
isAppointmentAvailable = false;
isHomeAppointmentAvailable = false;
model.setState(ViewState.idle);
},
dropdownValue: service,
list: model.servicesDropList,
hint: LocaleKeys.defineServices.tr(),
)
: model.servicesDropList.isNotEmpty
? DropdownField(
(DropValue value) {
serviceId = value.id;
service = value;
isAppointmentAvailable = false;
isHomeAppointmentAvailable = false;
model.setState(ViewState.idle);
},
dropdownValue: service,
list: model.servicesDropList,
hint: LocaleKeys.defineServices.tr(),
)
: categoryId == null
? Container()
: const CircularProgressIndicator(),
: Container(),
12.height,
if (serviceId != -1)
if (serviceId != -1) ...[
Column(
children: [
20.height,
CheckBoxWithTitleDescription(
isSelected: isAppointmentAvailable,
title: 'Available for appointment',
description: 'This option will allow customer to book appointment for these services',
title: LocaleKeys.availableforAppointment.tr(),
description: LocaleKeys.bookAppointmentForServices.tr(),
onSelection: (bool v) {
isAppointmentAvailable = v;
model.setState(ViewState.idle);
@ -164,8 +133,8 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
20.height,
CheckBoxWithTitleDescription(
isSelected: isHomeAppointmentAvailable,
title: 'Allow home services',
description: 'This option will allow customer to book appointment at their desired location',
title: LocaleKeys.allowingHomeService.tr(),
description: LocaleKeys.bookAppointmentAtLocation.tr(),
onSelection: (bool v) {
isHomeAppointmentAvailable = v;
model.setState(ViewState.idle);
@ -176,7 +145,7 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
Column(
children: [
TxtField(
hint: "Home Services Range",
hint: LocaleKeys.homeServiceRange.tr(),
keyboardType: TextInputType.number,
value: serviceRage == 0 ? null : serviceRage.toString(),
postfixWidget: Row(
@ -197,7 +166,7 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
),
12.height,
TxtField(
hint: "Charges per Kilometer",
hint: LocaleKeys.chargesPerKM.tr(),
keyboardType: TextInputType.number,
value: chargersPerKm == "" ? null : chargersPerKm,
onChanged: (v) {
@ -220,6 +189,7 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
),
],
),
]
],
),
),
@ -229,7 +199,7 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
ShowFillButton(
title: LocaleKeys.save.tr(),
maxWidth: double.infinity,
margin: const EdgeInsets.symmetric(horizontal: 20),
margin: const EdgeInsets.all(20),
onPressed: () {
if (widget.branchModel!.serviceProviderService != null) {
updateService(context, model);
@ -267,7 +237,7 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
"isAllowAppointment": isAppointmentAvailable,
"isActive": true,
"customerLocationRange": serviceRage,
"rangePricePerKm": chargersPerKm
"rangePricePerKm": chargersPerKm.isEmpty ? "0.0" : chargersPerKm,
};
map.add(postParams);
}
@ -278,13 +248,33 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
await model.getBranchAndServices();
Utils.hideLoading(context);
Utils.showToast(mResponse.message ?? "");
pop(context);
if (mResponse.messageStatus == 1) {
context.read<ServiceVM>().filterUserBranchCategories();
pop(context);
}
}
updateService(BuildContext context, ServiceVM model) async {
List<Map<String, dynamic>> map = [
{"id": widget.branchModel!.serviceProviderService!.serviceId.toString(), "isAllowAppointment": isAppointmentAvailable, "isActive": true, "customerLocationRange": serviceRage, "rangePricePerKm": chargersPerKm}
];
List<Map<String, dynamic>> map = [];
if (isHomeAppointmentAvailable) {
map = [
{
"id": widget.branchModel!.serviceProviderService!.serviceProviderServiceId.toString(),
"isAllowAppointment": isAppointmentAvailable,
"isActive": true,
"customerLocationRange": serviceRage,
"rangePricePerKm": chargersPerKm.isEmpty ? "0.0" : chargersPerKm,
}
];
} else {
map = [
{
"id": widget.branchModel!.serviceProviderService!.serviceProviderServiceId.toString(),
"isAllowAppointment": isAppointmentAvailable,
"isActive": true,
}
];
}
// print(map);
Utils.showLoading(context);
@ -293,6 +283,9 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
model.filterUserBranchCategories();
Utils.hideLoading(context);
Utils.showToast(mResponse.message ?? "");
pop(context);
if (mResponse.messageStatus == 1) {
context.read<ServiceVM>().filterUserBranchCategories();
pop(context);
}
}
}

@ -1,10 +1,10 @@
import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/view_models/items_view_model.dart';
import 'package:flutter/material.dart';
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/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/services_models/item_model.dart';
import 'package:mc_common_app/models/services_models/service_model.dart';
import 'package:mc_common_app/theme/colors.dart';
@ -16,6 +16,7 @@ import 'package:mc_common_app/widgets/empty_widget.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
import 'package:flutter_svg/svg.dart';
import 'package:easy_localization/easy_localization.dart';
class ItemsListPage extends StatelessWidget {
ServiceModel? serviceProviderService;
@ -41,7 +42,7 @@ class ItemsListPage extends StatelessWidget {
return model.state == ViewState.busy
? const Center(child: CircularProgressIndicator())
: model.serviceItems!.data!.isEmpty
? const EmptyWidget(text: "No Service Items found", isWrappedColumn: false)
? EmptyWidget(text: LocaleKeys.noItemstoShow.tr(), isWrappedColumn: false)
: ListView.separated(
itemBuilder: (BuildContext context, int index) {
return SizedBox(
@ -57,11 +58,11 @@ class ItemsListPage extends StatelessWidget {
children: [
model.serviceItems!.data![index].name.toString().toText(fontSize: 16, isBold: true),
4.height,
showItem("Available for appointment:", (model.serviceItems!.data![index].isAllowAppointment ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("Allowing Workshop service:", (model.serviceItems!.data![index].isAppointmentCompanyLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("Allowing home service:", (model.serviceItems!.data![index].isAppointmentCustomerLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("${LocaleKeys.availableforAppointment.tr()}:", (model.serviceItems!.data![index].isAllowAppointment ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("${LocaleKeys.allowingWorkshopService.tr()}:", (model.serviceItems!.data![index].isAppointmentCompanyLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("${LocaleKeys.allowingHomeService.tr()}:", (model.serviceItems!.data![index].isAppointmentCustomerLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
12.height,
"Service Amount".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
LocaleKeys.serviceAmount.tr().toText(fontSize: 13, color: MyColors.lightTextColor),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
@ -69,7 +70,7 @@ class ItemsListPage extends StatelessWidget {
2.width,
Padding(
padding: const EdgeInsets.only(bottom: 4),
child: "SAR".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
child: LocaleKeys.sar.tr().toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
),
],
),
@ -104,7 +105,7 @@ class ItemsListPage extends StatelessWidget {
),
),
ShowFillButton(
title: "Add Item",
title: LocaleKeys.addItems.tr(),
maxWidth: double.infinity,
margin: const EdgeInsets.all(20),
onPressed: () {
@ -126,11 +127,10 @@ class ItemsListPage extends StatelessWidget {
Widget showItem(String item, String value, {Color valueColor = Colors.black}) {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
item.toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
4.width,
value.toText(fontSize: 12, color: valueColor, isBold: true),
item.toText(color: MyColors.lightTextColor),
const SizedBox(width: 2),
value.toText(color: MyColors.greenColor),
],
);
}

@ -1,8 +1,11 @@
import 'dart:developer';
import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/views/settings/services/duplication/sheet/approved_branches_list_sheet.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
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/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/categroy.dart';
@ -10,6 +13,7 @@ import 'package:mc_common_app/models/services_models/service_model.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/utils/utils.dart';
import 'package:mc_common_app/widgets/bottom_sheet.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
@ -56,7 +60,7 @@ class _ServicesListPageState extends State<ServicesListPage> {
return Scaffold(
appBar: CustomAppBar(
title: 'Services',
title: LocaleKeys.services.tr(),
actions: [
IconButton(
icon: const Icon(Icons.copy),
@ -110,13 +114,14 @@ class _ServicesListPageState extends State<ServicesListPage> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (services[index].serviceStatus == 1) ...[
Utils.statusContainerChip(text: "Pending", chipColor: MyColors.adPendingStatusColor),
5.height,
],
Row(
children: [
Expanded(
child: Text(
services[index].serviceDescription.toString(),
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
child: (services[index].serviceDescription ?? "").toText(fontSize: 16),
),
Padding(
padding: const EdgeInsets.all(4.0),
@ -126,6 +131,11 @@ class _ServicesListPageState extends State<ServicesListPage> {
height: 16,
),
).onPress(() {
// log("${categoryData.branchId}");
// log("${categoryData.branchName}");
// log("${categoryData.id}");
// log("${categoryData.categoryName}");
// log("${services[index].serviceDescription}");
navigateWithName(
context,
ProviderAppRoutes.createServices3,
@ -150,31 +160,23 @@ class _ServicesListPageState extends State<ServicesListPage> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 4),
showItem('Available for appointment:', 'Yes', valueColor: Colors.green),
showItem('Allowing home service:', (services[index].isAllowAppointment ?? false) ? 'Yes' : 'No', valueColor: Colors.green),
showItem('Home service range:', services[index].customerLocationRange.toString()),
showItem('Charges per KM:', services[index].rangePricePerKm.toString()),
showItem('${LocaleKeys.availableforAppointment.tr()}:', (services[index].isAllowAppointment ?? false) ? LocaleKeys.yes.tr() : LocaleKeys.no.tr(), valueColor: Colors.green),
showItem('${LocaleKeys.allowingHomeService.tr()}:', (services[index].isAllowAppointmentHome ?? false) ? LocaleKeys.yes.tr() : LocaleKeys.no.tr(), valueColor: Colors.green),
if ((services[index].isAllowAppointmentHome ?? false)) ...[
showItem('${LocaleKeys.homeServiceRange.tr()}:', services[index].customerLocationRange.toString()),
showItem('${LocaleKeys.chargesPerKM.tr()}:', services[index].rangePricePerKm.toString()),
],
],
),
),
const Icon(
Icons.arrow_forward_rounded,
size: 16,
),
const Icon(Icons.arrow_forward_rounded, size: 20),
],
),
],
),
)
.toWhiteContainer(
width: double.infinity,
allPading: 12,
)
.onPress(
() {
navigateWithName(context, ProviderAppRoutes.itemsList, arguments: services[index]);
},
);
).toWhiteContainer(width: double.infinity, allPading: 12).onPress(
() => navigateWithName(context, ProviderAppRoutes.itemsList, arguments: services[index]),
);
},
separatorBuilder: (context, index) {
return const SizedBox(height: 12);
@ -193,9 +195,9 @@ class _ServicesListPageState extends State<ServicesListPage> {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(item, style: const TextStyle(fontSize: 12, color: MyColors.lightTextColor, fontWeight: FontWeight.bold)),
const SizedBox(width: 4),
Text(value, style: TextStyle(fontSize: 12, color: valueColor, fontWeight: FontWeight.bold)),
item.toText(color: MyColors.lightTextColor),
const SizedBox(width: 2),
value.toText(color: MyColors.greenColor),
],
);
}

@ -68,9 +68,14 @@ class MySubscriptionsCard extends StatelessWidget {
],
),
6.height,
showItem("Ads:", "${pvm.adsRemaining.toString()} of ${pvm.totalAds.toString()} remaining"),
showItem("Users:", "${pvm.subUsersRemaining.toString()} of ${pvm.totalSubUsers.toString()} remaining"),
showItem("Branches:", "${pvm.branchesRemaining.toString()} of ${pvm.totalBranches.toString()} remaining"),
// showItem("Ads:", "${pvm.adsRemaining.toString()} of ${pvm.totalAds.toString()} remaining"),
// showItem("Users:", "${pvm.subUsersRemaining.toString()} of ${pvm.totalSubUsers.toString()} remaining"),
// showItem("Branches:", "${pvm.branchesRemaining.toString()} of ${pvm.totalBranches.toString()} remaining"),
showItem("Ads: ", "${pvm.adsRemaining.toString()} remaining"),
showItem("Users: ", "${pvm.subUsersRemaining.toString()} remaining"),
showItem("Branches: ", "${pvm.branchesRemaining.toString()} remaining"),
14.height,
Row(
crossAxisAlignment: CrossAxisAlignment.center,

Loading…
Cancel
Save