changes & updates

aamir_dev
Aamir.Muhammad 2 years ago
parent c5edccb71f
commit 79d1f37b12

@ -5,6 +5,13 @@
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.USE_FINGERPRINT"/> <uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<!-- Devices running Android 13 (API level 33) or higher -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<!-- To handle the reselection within the app on devices running Android 14
or higher if your app targets Android 14 (API level 34) or higher. -->
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<application <application

@ -12,3 +12,5 @@
# org.gradle.parallel=true # org.gradle.parallel=true
#Wed Dec 13 16:00:22 AST 2023 #Wed Dec 13 16:00:22 AST 2023
org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M" org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M"
android.useAndroidX=true
android.enableJetifier=true

@ -34,7 +34,7 @@ class DashboardVM extends BaseVM {
return; return;
} }
int sizeInBytes = pickedImageFile.lengthSync(); int sizeInBytes = pickedImageFile.lengthSync();
if (sizeInBytes > 1000) { if (sizeInBytes > 1000000) {
Utils.showToast(LocaleKeys.fileLarger.tr()); Utils.showToast(LocaleKeys.fileLarger.tr());
return; return;
} else { } else {

@ -1,3 +1,4 @@
import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/models/appointments_models/schedule_model.dart'; import 'package:mc_common_app/models/appointments_models/schedule_model.dart';
import 'package:mc_common_app/models/general_models/m_response.dart'; import 'package:mc_common_app/models/general_models/m_response.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/services.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/services.dart';
@ -5,6 +6,7 @@ import 'package:mc_common_app/repositories/schedule_repo.dart';
import 'package:car_provider_app/views/settings/schedule/widgets/chips_picker_item.dart'; import 'package:car_provider_app/views/settings/schedule/widgets/chips_picker_item.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/base_view_model.dart'; import 'package:mc_common_app/view_models/base_view_model.dart';
List<PickerItem> initDaysList = [ List<PickerItem> initDaysList = [
@ -31,6 +33,19 @@ class ScheduleVM extends BaseVM {
setState(ViewState.idle); setState(ViewState.idle);
} }
setScheduleInactive(int scheduleId, int branchId) async {
setState(ViewState.busy);
MResponse val = await scheduleRepo.setScheduleInActive(scheduleId, branchId);
if (val.messageStatus == 1) {
if (schedule!.data != null) {
schedule!.data!.removeWhere((element) => element.serviceProviderBranchId == branchId && element.id == scheduleId);
} else {
Utils.showToast(val.message ?? "");
}
}
setState(ViewState.idle);
}
getAllServices(String branchId, ScheduleData selectedSchedule) async { getAllServices(String branchId, ScheduleData selectedSchedule) async {
// if (servicesList == null) { // if (servicesList == null) {
servicesList = null; servicesList = null;

@ -320,7 +320,7 @@ class ServiceVM extends BaseVM {
if (file != null) { if (file != null) {
int sizeInBytes = file.lengthSync(); int sizeInBytes = file.lengthSync();
// double sizeInMb = sizeInBytes / (1024 * 1024); // double sizeInMb = sizeInBytes / (1024 * 1024);
if (sizeInBytes > 1000) { if (sizeInBytes > 1000000) {
Utils.showToast("File is larger then 1KB"); Utils.showToast("File is larger then 1KB");
} else { } else {
document!.data![index].document = Utils.convertFileToBase64(file); document!.data![index].document = Utils.convertFileToBase64(file);
@ -486,7 +486,6 @@ class ServiceVM extends BaseVM {
servicesDropList = []; servicesDropList = [];
setState(ViewState.busy); setState(ViewState.busy);
services = await branchRepo.fetchServicesByCategoryId(serviceCategoryId: categoryId); // to get all the services services = await branchRepo.fetchServicesByCategoryId(serviceCategoryId: categoryId); // to get all the services
for (var element in services!.data!) { for (var element in services!.data!) {
servicesDropList.add( servicesDropList.add(
DropValue( DropValue(

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:car_provider_app/view_models/service_view_model.dart'; import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/appoinments/widget/select_items_sheet.dart'; import 'package:car_provider_app/views/appoinments/widget/select_items_sheet.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -25,22 +27,37 @@ import '../../generated/locale_keys.g.dart';
import '../dashboard/widget/appointment_slider_widget.dart'; import '../dashboard/widget/appointment_slider_widget.dart';
import '../settings/schedule/widgets/chips_picker_item.dart'; import '../settings/schedule/widgets/chips_picker_item.dart';
class AddNewServiceAppointmentPage extends StatelessWidget { class AddNewServiceAppointmentPage extends StatefulWidget {
AppointmentListModel appointmentListModel; AppointmentListModel appointmentListModel;
AddNewServiceAppointmentPage(this.appointmentListModel, {Key? key}) AddNewServiceAppointmentPage(this.appointmentListModel, {Key? key}) : super(key: key);
: super(key: key);
@override
State<AddNewServiceAppointmentPage> createState() => _AddNewServiceAppointmentPageState();
}
class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentPage> {
DropValue? category; DropValue? category;
DropValue? service; DropValue? service;
List<ItemData> selectedList = []; List<ItemData> selectedList = [];
List<PickerItem>? pickedItems; List<PickerItem>? pickedItems;
ServiceVM? serviceVM;
@override
void initState() {
// TODO: implement initState
super.initState();
scheduleMicrotask(() {
serviceVM = context.read<ServiceVM>();
serviceVM!.fetchBranchCategory(EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ServiceVM serviceVM = context.read<ServiceVM>();
serviceVM.fetchBranchCategory(
EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
return Scaffold( return Scaffold(
appBar: const CustomAppBar( appBar: const CustomAppBar(
title: "Add Service", title: "Add Service",
@ -50,7 +67,7 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
child: Column( child: Column(
children: [ children: [
AppointmentSliderWidget( AppointmentSliderWidget(
appointmentListModel: appointmentListModel, appointmentListModel: widget.appointmentListModel,
isNeedTotalPayment: true, isNeedTotalPayment: true,
isNeedToShowItems: true, isNeedToShowItems: true,
isNeedToShowToMoreText: false, isNeedToShowToMoreText: false,
@ -79,15 +96,11 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
(DropValue value) async { (DropValue value) async {
category = value; category = value;
service = null; service = null;
model.fetchProviderServices( model.fetchProviderServices(widget.appointmentListModel.branchId.toString(), value.id.toString());
appointmentListModel.branchId
.toString(),
value.id.toString());
}, },
dropdownValue: category, dropdownValue: category,
list: model.categoryDropList, list: model.categoryDropList,
hint: hint: LocaleKeys.selectServiceCategory.tr(),
LocaleKeys.selectServiceCategory.tr(),
) )
: const Center( : const Center(
child: CircularProgressIndicator(), child: CircularProgressIndicator(),
@ -103,18 +116,13 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
context, context,
child: SelectItemsSheet( child: SelectItemsSheet(
serviceId: service?.id ?? 0, serviceId: service?.id ?? 0,
onSelectItems: onSelectItems: (List<ItemData> selectedList) {
(List<ItemData> selectedList) {
this.selectedList.clear(); this.selectedList.clear();
this.selectedList = selectedList; this.selectedList = selectedList;
pickedItems = []; pickedItems = [];
for (var element for (var element in selectedList) {
in selectedList) {
pickedItems!.add( pickedItems!.add(
PickerItem( PickerItem(id: element.id ?? 0, title: element.name ?? ""),
id: element.id ?? 0,
title:
element.name ?? ""),
); );
} }
model.notifyListeners(); model.notifyListeners();
@ -128,14 +136,11 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
) )
: category == null : category == null
? Container() ? Container()
: model.services != null && : model.services != null && model.servicesDropList.isEmpty
model.servicesDropList.isEmpty
? const Text("No Service Found") ? const Text("No Service Found")
: const CircularProgressIndicator(), : const CircularProgressIndicator(),
12.height, 12.height,
(service != null && (service != null && pickedItems != null && pickedItems!.length > 0)
pickedItems != null &&
pickedItems!.length > 0)
? ChipsPickerItem( ? ChipsPickerItem(
hint: 'Select Items', hint: 'Select Items',
itemsList: [...pickedItems ?? []], itemsList: [...pickedItems ?? []],
@ -145,16 +150,11 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
child: SelectItemsSheet( child: SelectItemsSheet(
serviceId: service?.id ?? 0, serviceId: service?.id ?? 0,
list: pickedItems, list: pickedItems,
onSelectItems: onSelectItems: (List<ItemData> selectedList) {
(List<ItemData> selectedList) {
pickedItems = []; pickedItems = [];
for (var element for (var element in selectedList) {
in selectedList) {
pickedItems!.add( pickedItems!.add(
PickerItem( PickerItem(id: element.id ?? 0, title: element.name ?? ""),
id: element.id ?? 0,
title:
element.name ?? ""),
); );
} }
model.notifyListeners(); model.notifyListeners();
@ -166,9 +166,7 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
: service != null : service != null
? const Text("No Item Selected Yet") ? const Text("No Item Selected Yet")
: const SizedBox(), : const SizedBox(),
if ((service != null && if ((service != null && pickedItems != null && pickedItems!.length > 0))
pickedItems != null &&
pickedItems!.length > 0))
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@ -179,8 +177,7 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
color: MyColors.lightTextColor, color: MyColors.lightTextColor,
), ),
Row( Row(
crossAxisAlignment: crossAxisAlignment: CrossAxisAlignment.end,
CrossAxisAlignment.end,
children: [ children: [
calculatePrice().toString().toText( calculatePrice().toString().toText(
fontSize: 29, fontSize: 29,
@ -218,27 +215,18 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
title: "Add", title: "Add",
maxWidth: double.infinity, maxWidth: double.infinity,
onPressed: () async { onPressed: () async {
if (pickedItems != null && if (pickedItems != null && pickedItems!.length > 0) {
pickedItems!.length > 0) {
List<int> items = []; List<int> items = [];
pickedItems?.forEach((element) { pickedItems?.forEach((element) {
items.add(element.id); items.add(element.id);
}); });
Utils.showLoading(context); Utils.showLoading(context);
var postParams = { var postParams = {"providerBranchID": widget.appointmentListModel.branchId, "appointmentID": widget.appointmentListModel.id, "serviceItemID": items};
"providerBranchID": MResponse res = await serviceVM!.addNewServiceInAppointment(postParams);
appointmentListModel.branchId, _updateAppointment(context, widget.appointmentListModel.branchId ?? 0);
"appointmentID": appointmentListModel.id,
"serviceItemID": items
};
MResponse res = await serviceVM
.addNewServiceInAppointment(postParams);
_updateAppointment(context,
appointmentListModel.branchId ?? 0);
Utils.hideLoading(context); Utils.hideLoading(context);
if (res.messageStatus == 1) { if (res.messageStatus == 1) {
Utils.showToast( Utils.showToast("Items are added Successfully");
"Items are added Successfully");
pop(context); pop(context);
} else { } else {
Utils.showToast(res.message.toString()); Utils.showToast(res.message.toString());
@ -264,14 +252,7 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
Future<void> _updateAppointment(BuildContext context, int branchId) async { Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({ await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector "ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
.get<AppState>()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"0",
"ProviderBranchID": branchId.toString(), "ProviderBranchID": branchId.toString(),
}, isNeedToRebuild: true); }, isNeedToRebuild: true);
} }

@ -34,7 +34,7 @@ class AppointmentDetailListPage extends StatelessWidget {
appointmentListModel: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index], appointmentListModel: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index],
isNeedTotalPayment: true, isNeedTotalPayment: true,
isNeedToShowAppointmentStatus: true, isNeedToShowAppointmentStatus: true,
isNeedToShowMergeStatus: true, isNeedToShowMergeStatus: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index].isMerged ?? false,
onTap: () { onTap: () {
appointmentsVM.selectedAppointmentId = appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index].id ?? 0; appointmentsVM.selectedAppointmentId = appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index].id ?? 0;
appointmentsVM.selectedAppointmentSubIndex = index; appointmentsVM.selectedAppointmentSubIndex = index;

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:car_provider_app/config/provider_routes.dart'; import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/views/dashboard/widget/appointment_slider_widget.dart'; import 'package:car_provider_app/views/dashboard/widget/appointment_slider_widget.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
@ -19,42 +21,55 @@ import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:percent_indicator/percent_indicator.dart'; import 'package:percent_indicator/percent_indicator.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class AppointmentPage extends StatelessWidget { class AppointmentPage extends StatefulWidget {
BranchDetailModel branch; BranchDetailModel branch;
String date = "";
AppointmentPage({ AppointmentPage({
required this.branch, required this.branch,
Key? key, Key? key,
}) : super(key: key); }) : super(key: key);
@override
State<AppointmentPage> createState() => _AppointmentPageState();
}
class _AppointmentPageState extends State<AppointmentPage> {
String date = "";
GlobalKey<RefreshIndicatorState> refreshIndicatorKey = GlobalKey<RefreshIndicatorState>(); GlobalKey<RefreshIndicatorState> refreshIndicatorKey = GlobalKey<RefreshIndicatorState>();
Future<void> _pullRefresh(BuildContext context) async { Future<void> _pullRefresh(BuildContext context) async {
await context.read<AppointmentsVM>().getAppointmentSlotsInfo( await context.read<AppointmentsVM>().getAppointmentSlotsInfo(
context: context, context: context,
map: {"ProviderBranchID": branch.id.toString(), "FromDate": date, "ToDate": date}, map: {"ProviderBranchID": widget.branch.id.toString(), "FromDate": date, "ToDate": date},
isNeedToRebuild: true, isNeedToRebuild: true,
); );
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({ await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0", "ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branch.id.toString(), "ProviderBranchID": widget.branch.id.toString(),
"FromDate": date, "FromDate": date,
"DateTo": date, "DateTo": date,
}); });
} }
@override @override
Widget build(BuildContext context) { void initState() {
// TODO: implement initState
super.initState();
scheduleMicrotask(() {
date = DateHelper.formatAsYearMonthDay(DateTime.now()); date = DateHelper.formatAsYearMonthDay(DateTime.now());
context.read<AppointmentsVM>().populateAppointmentsFilterList(); context.read<AppointmentsVM>().populateAppointmentsFilterList();
_pullRefresh(context); _pullRefresh(context);
context.read<AppointmentsVM>().selectedBranch = branch.id ?? 0; context.read<AppointmentsVM>().selectedBranch = widget.branch.id ?? 0;
});
}
@override
Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: CustomAppBar( appBar: CustomAppBar(
profileImageUrl: MyAssets.carBanner, profileImageUrl: MyAssets.carBanner,
title: branch.branchName, title: widget.branch.branchName,
), ),
body: SizedBox( body: SizedBox(
width: double.infinity, width: double.infinity,
@ -122,7 +137,7 @@ class AppointmentPage extends StatelessWidget {
} }
Widget progressWidget(BuildContext context, AppointmentsVM appointmentsVM) { Widget progressWidget(BuildContext context, AppointmentsVM appointmentsVM) {
double percent = (appointmentsVM.appointmentSlots?.occupiedSlots ?? 0.0 / (appointmentsVM.appointmentSlots?.totalSlots ?? 0.0)).toDouble() * 100; double percent = appointmentsVM.appointmentSlots!.occupiedSlots / appointmentsVM.appointmentSlots!.totalSlots;
return Column( return Column(
children: [ children: [
Row( Row(

@ -16,6 +16,7 @@ import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependencies.dart'; import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.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/ad_view_model.dart';
@ -54,6 +55,7 @@ class _DashboardPageState extends State<DashboardPage> {
// context.read<AdVM>().populateAdsFilterList(); // context.read<AdVM>().populateAdsFilterList();
context.read<ServiceVM>().getBranchAndServices(); context.read<ServiceVM>().getBranchAndServices();
AdVM adVm = Provider.of<AdVM>(context, listen: false); AdVM adVm = Provider.of<AdVM>(context, listen: false);
// context.read<AppointmentsVM>().myUpComingAppointments,
AppointmentsVM appointmentsVM = Provider.of<AppointmentsVM>(context, listen: false); AppointmentsVM appointmentsVM = Provider.of<AppointmentsVM>(context, listen: false);
if (appointmentsVM.myAppointments.isEmpty) { if (appointmentsVM.myAppointments.isEmpty) {
await appointmentsVM.getMyAppointmentsForProvider({"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0"}); await appointmentsVM.getMyAppointmentsForProvider({"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0"});

@ -14,6 +14,7 @@ import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/user_models/image_response.dart'; import 'package:mc_common_app/models/user_models/image_response.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/app_permission_handler.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.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/button/show_fill_button.dart';
@ -35,14 +36,8 @@ class _CustomDrawerState extends State<CustomDrawer> {
builder: (context) => AlertDialog( builder: (context) => AlertDialog(
content: const Text("Choose image source"), content: const Text("Choose image source"),
actions: [ actions: [
TextButton( TextButton(child: const Text("Camera"), onPressed: () => widget.dashboardVM.pickImageFromPhone(context, 0)),
child: const Text("Camera"), TextButton(child: const Text("Gallery"), onPressed: () => widget.dashboardVM.pickImageFromPhone(context, 1)),
onPressed: () =>
widget.dashboardVM.pickImageFromPhone(context, 0)),
TextButton(
child: const Text("Gallery"),
onPressed: () =>
widget.dashboardVM.pickImageFromPhone(context, 1)),
], ],
), ),
); );
@ -60,13 +55,8 @@ class _CustomDrawerState extends State<CustomDrawer> {
height: 200, height: 200,
color: MyColors.darkPrimaryColor.withOpacity(0.01), color: MyColors.darkPrimaryColor.withOpacity(0.01),
child: Image.network( child: Image.network(
ApiConsts.baseUrlServices + // ApiConsts.baseUrlServices +
AppState() AppState().getUser.data!.userInfo!.userImageUrl.toString(),
.getUser
.data!
.userInfo!
.userImageUrl
.toString(),
), ),
), ),
Positioned( Positioned(
@ -106,16 +96,11 @@ class _CustomDrawerState extends State<CustomDrawer> {
color: Colors.red, color: Colors.red,
).onPress(() async { ).onPress(() async {
Utils.showLoading(context); Utils.showLoading(context);
ImageResponse response = ImageResponse response = await widget.dashboardVM.updateUserImage("");
await widget.dashboardVM.updateUserImage("");
if (response.messageStatus == 1) { if (response.messageStatus == 1) {
Utils.showToast("Image is Deleted"); Utils.showToast("Image is Deleted");
setState(() { setState(() {
AppState() AppState().getUser.data!.userInfo!.userImageUrl = response.data;
.getUser
.data!
.userInfo!
.userImageUrl = response.data;
}); });
} }
Utils.hideLoading(context); Utils.hideLoading(context);
@ -139,17 +124,14 @@ class _CustomDrawerState extends State<CustomDrawer> {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
"userName".toText( AppState().getUser.data!.userInfo!.firstName!.toText(
isBold: true, isBold: true,
fontSize: 20, fontSize: 20,
letterSpacing: -1.44, letterSpacing: -1.44,
), ),
AppState() AppState().getUser.data!.userInfo!.roleName! == "ServiceProvider_Dealership" || AppState().getUser.data!.userInfo!.roleName! == "ServiceProvider_Individual"
.getUser ? (AppState().getUser.data!.userInfo!.roleName!.split("_").first.toString() + " " + AppState().getUser.data!.userInfo!.roleName!.split("_").last.toString()).toText()
.data! : AppState().getUser.data!.userInfo!.roleName!.toText(fontSize: 10),
.userInfo!
.roleName!
.toText(fontSize: 10),
], ],
), ),
), ),
@ -166,16 +148,15 @@ class _CustomDrawerState extends State<CustomDrawer> {
), ),
), ),
ListTile( ListTile(
leading: SvgPicture.asset(MyAssets.nextIcon, leading: SvgPicture.asset(MyAssets.nextIcon, color: MyColors.darkPrimaryColor),
color: MyColors.darkPrimaryColor),
title: LocaleKeys.defineLicences.tr().toText(fontSize: 12), title: LocaleKeys.defineLicences.tr().toText(fontSize: 12),
onTap: () { onTap: () {
// AppPermissions.checkStoragePermissions(context);
navigateWithName(context, ProviderAppRoutes.defineLicense); navigateWithName(context, ProviderAppRoutes.defineLicense);
}, },
), ),
ListTile( ListTile(
leading: SvgPicture.asset(MyAssets.nextIcon, leading: SvgPicture.asset(MyAssets.nextIcon, color: MyColors.darkPrimaryColor),
color: MyColors.darkPrimaryColor),
title: "Subscriptions".toText(fontSize: 12), title: "Subscriptions".toText(fontSize: 12),
onTap: () { onTap: () {
navigateWithName(context, ProviderAppRoutes.mySubscriptionsPage); navigateWithName(context, ProviderAppRoutes.mySubscriptionsPage);
@ -190,8 +171,7 @@ class _CustomDrawerState extends State<CustomDrawer> {
), ),
title: LocaleKeys.english.tr().toText(fontSize: 12), title: LocaleKeys.english.tr().toText(fontSize: 12),
onTap: () { onTap: () {
if (EasyLocalization.of(context)?.currentLocale?.countryCode == if (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA") {
"SA") {
context.setLocale(const Locale("en", "US")); context.setLocale(const Locale("en", "US"));
} else { } else {
context.setLocale(const Locale('ar', 'SA')); context.setLocale(const Locale('ar', 'SA'));

@ -24,9 +24,9 @@ class ServiceProviderWidget extends StatelessWidget {
if (model.state == ViewState.busy) { if (model.state == ViewState.busy) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else { } else {
return model.branches!.data! == null return model.branches!.data == null
? const Center(child: Text("No Branch Found")) ? const Center(child: Text("No Branch Found"))
: model.branches!.data!.serviceProviderBranch!.isEmpty : model.branches!.data!.serviceProviderBranch != null && model.branches!.data!.serviceProviderBranch!.isEmpty
? Center(child: Text(LocaleKeys.no_branch.tr())) ? Center(child: Text(LocaleKeys.no_branch.tr()))
: ListView.builder( : ListView.builder(
itemCount: model.branches!.data!.serviceProviderBranch!.length, itemCount: model.branches!.data!.serviceProviderBranch!.length,

@ -1,4 +1,3 @@
import 'package:car_provider_app/view_models/service_view_model.dart'; import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -144,9 +143,10 @@ class _DefineLicensePageState extends State<DefineLicensePage> {
8.height, 8.height,
InkWell( InkWell(
onTap: () async { onTap: () async {
bool isPermissionsAvailable = await requestPermissionGranted(context, Permission.storage); int sdkInt = await AppPermissions().getAndroidDeviceInfo();
bool isPermissionsAvailable = await requestPermissionGranted(context, sdkInt > 32 ? Permission.photos : Permission.storage);
if (isPermissionsAvailable) { if (isPermissionsAvailable) {
model.selectFile(context,index); model.selectFile(context, index);
} }
}, },
child: Container( child: Container(

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:car_provider_app/view_models/schedule_view_model.dart'; import 'package:car_provider_app/view_models/schedule_view_model.dart';
import 'package:car_provider_app/views/settings/schedule/widgets/chips_picker_item.dart'; import 'package:car_provider_app/views/settings/schedule/widgets/chips_picker_item.dart';
import 'package:car_provider_app/views/settings/schedule/widgets/select_days_sheet.dart'; import 'package:car_provider_app/views/settings/schedule/widgets/select_days_sheet.dart';
@ -5,6 +7,7 @@ import 'package:car_provider_app/views/settings/schedule/widgets/select_services
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/models/appointments_models/schedule_model.dart'; import 'package:mc_common_app/models/appointments_models/schedule_model.dart';
import 'package:mc_common_app/models/general_models/m_response.dart'; import 'package:mc_common_app/models/general_models/m_response.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
@ -17,26 +20,24 @@ import 'package:mc_common_app/widgets/txt_field.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:mc_common_app/widgets/bottom_sheet.dart'; import 'package:mc_common_app/widgets/bottom_sheet.dart';
class AddSchedulesPage extends StatelessWidget { class AddSchedulesPage extends StatefulWidget {
AddSchedulesPage({Key? key}) : super(key: key);
@override
State<AddSchedulesPage> createState() => _AddSchedulesPageState();
}
class _AddSchedulesPageState extends State<AddSchedulesPage> {
late ScheduleVM mModel; late ScheduleVM mModel;
String name = "",
startDate = "",
endDate = "",
startTime = "",
endTime = "",
slotsTime = "",
appointmentPerSlot = "",
servicesGroupID = "";
late ScheduleData scheduleData;
AddSchedulesPage({Key? key}) : super(key: key); String name = "", startDate = "", endDate = "", startTime = "", endTime = "", slotsTime = "", appointmentPerSlot = "", servicesGroupID = "";
late ScheduleData scheduleData;
setEditData() { setEditData() {
name = scheduleData.scheduleName ?? ""; name = scheduleData.scheduleName ?? "";
startDate = DateHelper.formatAsYearMonthDay( startDate = DateHelper.formatAsYearMonthDay(scheduleData.fromDate ?? DateTime.now());
scheduleData.fromDate ?? DateTime.now()); endDate = DateHelper.formatAsYearMonthDay(scheduleData.toDate ?? DateTime.now());
endDate =
DateHelper.formatAsYearMonthDay(scheduleData.toDate ?? DateTime.now());
startTime = scheduleData.startTime ?? ""; startTime = scheduleData.startTime ?? "";
endTime = scheduleData.endTime ?? ""; endTime = scheduleData.endTime ?? "";
slotsTime = scheduleData.slotDurationMinute.toString(); slotsTime = scheduleData.slotDurationMinute.toString();
@ -44,9 +45,7 @@ class AddSchedulesPage extends StatelessWidget {
// mModel.selectedServicesItems.clear(); // mModel.selectedServicesItems.clear();
scheduleData.scheduleServices?.forEach((element) { scheduleData.scheduleServices?.forEach((element) {
mModel.selectedServicesItems.add(PickerItem( mModel.selectedServicesItems.add(PickerItem(id: element.providerServiceId ?? 0, title: element.serviceDescription ?? ""));
id: element.providerServiceId ?? 0,
title: element.serviceDescription ?? ""));
}); });
mModel.selectedDaysItems.clear(); mModel.selectedDaysItems.clear();
scheduleData.weeklyOffDays?.forEach((element) { scheduleData.weeklyOffDays?.forEach((element) {
@ -60,7 +59,9 @@ class AddSchedulesPage extends StatelessWidget {
} }
@override @override
Widget build(BuildContext context) { void initState() {
super.initState();
scheduleMicrotask(() {
mModel = context.read<ScheduleVM>(); mModel = context.read<ScheduleVM>();
scheduleData = ModalRoute.of(context)!.settings.arguments as ScheduleData; scheduleData = ModalRoute.of(context)!.settings.arguments as ScheduleData;
mModel.getAllServices(scheduleData.branchId, scheduleData); mModel.getAllServices(scheduleData.branchId, scheduleData);
@ -69,6 +70,11 @@ class AddSchedulesPage extends StatelessWidget {
if (scheduleData.id != null) { if (scheduleData.id != null) {
setEditData(); setEditData();
} }
});
}
@override
Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: const CustomAppBar( appBar: const CustomAppBar(
title: "Create Schedules", title: "Create Schedules",
@ -190,12 +196,7 @@ class AddSchedulesPage extends StatelessWidget {
isNeedClickAll: true, isNeedClickAll: true,
onTap: () async { onTap: () async {
TimeOfDay _startTime = TimeOfDay.now(); TimeOfDay _startTime = TimeOfDay.now();
if (startTime.isNotEmpty) if (startTime.isNotEmpty) _startTime = TimeOfDay(hour: int.parse(startTime.split(":")[0]), minute: int.parse(startTime.split(":")[1]));
_startTime = TimeOfDay(
hour:
int.parse(startTime.split(":")[0]),
minute:
int.parse(startTime.split(":")[1]));
endTime = await Utils.pickTime( endTime = await Utils.pickTime(
context, context,
initialTime: _startTime, initialTime: _startTime,
@ -340,11 +341,13 @@ class AddSchedulesPage extends StatelessWidget {
} }
} else { } else {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.showToast(scheduleResponse.message??""); Utils.showToast(scheduleResponse.message ?? "");
} }
} }
updateSchedule(BuildContext context, ScheduleVM model) async { updateSchedule(BuildContext context, ScheduleVM model) async {
logger.d(scheduleData);
print("-----------");
List<int> days = []; List<int> days = [];
for (var element in model.selectedDaysItems) { for (var element in model.selectedDaysItems) {
days.add(element.id); days.add(element.id);
@ -361,7 +364,8 @@ class AddSchedulesPage extends StatelessWidget {
"slotDurationMinute": slotsTime, "slotDurationMinute": slotsTime,
"perSlotAppointment": appointmentPerSlot, "perSlotAppointment": appointmentPerSlot,
"deliveryServiceType": 1, "deliveryServiceType": 1,
"weeklyOffDays": days "weeklyOffDays": days,
"appointmentType": scheduleData.appointmentType
}; };
Utils.showLoading(context); Utils.showLoading(context);
@ -385,8 +389,7 @@ class AddSchedulesPage extends StatelessWidget {
context.read<ScheduleVM>().getSchedules(scheduleData.branchId ?? ""); context.read<ScheduleVM>().getSchedules(scheduleData.branchId ?? "");
pop(context); pop(context);
} else { } else {
Utils.showToast( Utils.showToast("Something went wrong while adding services in schedule");
"Something went wrong while adding services in schedule");
} }
} else { } else {
Utils.hideLoading(context); Utils.hideLoading(context);

@ -4,10 +4,12 @@ import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/models/appointments_models/schedule_model.dart'; import 'package:mc_common_app/models/appointments_models/schedule_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/utils/date_helper.dart';
import 'package:mc_common_app/utils/navigator.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/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.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/extensions/extensions_widget.dart';
@ -26,7 +28,6 @@ class SchedulesListPage extends StatefulWidget {
class _SchedulesListPageState extends State<SchedulesListPage> { class _SchedulesListPageState extends State<SchedulesListPage> {
@override @override
void initState() { void initState() {
// TODO: implement initState
super.initState(); super.initState();
context.read<ScheduleVM>().getSchedules(widget.branchId ?? ""); context.read<ScheduleVM>().getSchedules(widget.branchId ?? "");
} }
@ -56,16 +57,30 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Expanded( Expanded(
child: value.schedule!.data![index] child: value.schedule!.data![index].scheduleName.toString().toText(
.scheduleName
.toString()
.toText(
fontSize: 16, fontSize: 16,
isBold: true, isBold: true,
), ),
), ),
IconButton(
onPressed: () async {
Utils.showLoading(context);
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());
// model.setState(ViewState.idle);
// } else {
// Utils.showToast(res.message ?? "");
// }
},
icon: const Icon(Icons.delete),
color: Colors.red,
),
Padding( Padding(
padding: const EdgeInsets.all(4.0), padding: const EdgeInsets.all(4.0),
child: SvgPicture.asset( child: SvgPicture.asset(
@ -74,68 +89,28 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
height: 16, height: 16,
), ),
).onPress(() { ).onPress(() {
value.schedule!.data![index] value.schedule!.data![index].branchId = widget.branchId ?? "";
.branchId = widget.branchId ?? ""; navigateWithName(context, ProviderAppRoutes.addSchedule, arguments: value.schedule!.data![index]);
navigateWithName(context,
ProviderAppRoutes.addSchedule,
arguments:
value.schedule!.data![index]);
}), }),
], ],
crossAxisAlignment:
CrossAxisAlignment.center,
), ),
12.height, 12.height,
showItem( showItem("Start Date:", DateHelper.formatAsDayMonthYear(value.schedule!.data![index].fromDate)),
"Start Date:", showItem("End Date:", DateHelper.formatAsDayMonthYear(value.schedule!.data![index].toDate)),
DateHelper.formatAsDayMonthYear(value showItem("Off Days:", DateHelper.formatAsDayMonthYear(value.schedule!.data![index].fromDate)),
.schedule!.data![index].fromDate)), showItem("Shift Start Time:", value.schedule!.data![index].startTime ?? ""),
showItem( showItem("Shift End Time:", value.schedule!.data![index].startTime ?? ""),
"End Date:", showItem("Slots Time:", value.schedule!.data![index].slotDurationMinute.toString() + " Mins"),
DateHelper.formatAsDayMonthYear(value showItem("Appointments Per Slot:", value.schedule!.data![index].perSlotAppointment.toString()),
.schedule!.data![index].toDate)), showItem("Off Days", offDays(value.schedule!.data![index])),
showItem(
"Off Days:",
DateHelper.formatAsDayMonthYear(value
.schedule!.data![index].fromDate)),
showItem(
"Shift Start Time:",
value.schedule!.data![index]
.startTime ??
""),
showItem(
"Shift End Time:",
value.schedule!.data![index]
.startTime ??
""),
showItem(
"Slots Time:",
value.schedule!.data![index]
.slotDurationMinute
.toString() +
" Mins"),
showItem(
"Appointments Per Slot:",
value.schedule!.data![index]
.perSlotAppointment
.toString()),
showItem("Off Days",
offDays(value.schedule!.data![index])),
12.height, 12.height,
"Services:".toText( "Services:".toText(fontSize: 12, isBold: true, color: MyColors.lightTextColor),
fontSize: 12,
isBold: true,
color: MyColors.lightTextColor),
Column( Column(
crossAxisAlignment: crossAxisAlignment: CrossAxisAlignment.start,
CrossAxisAlignment.start, children: value.schedule!.data![index].scheduleServices!
children: value.schedule!.data![index]
.scheduleServices!
.map( .map(
(element) => Container( (element) => Container(
child: element.serviceDescription child: element.serviceDescription.toString().toText(
.toString()
.toText(
fontSize: 12, fontSize: 12,
isBold: true, isBold: true,
), ),
@ -144,11 +119,9 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
.toList(), .toList(),
) )
], ],
).toWhiteContainer( ).toWhiteContainer(width: double.infinity, allPading: 12);
width: double.infinity, allPading: 12);
}, },
separatorBuilder: separatorBuilder: (BuildContext context, int index) {
(BuildContext context, int index) {
return 12.height; return 12.height;
}, },
padding: const EdgeInsets.all(20), padding: const EdgeInsets.all(20),
@ -162,8 +135,7 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
maxWidth: double.infinity, maxWidth: double.infinity,
margin: const EdgeInsets.all(20), margin: const EdgeInsets.all(20),
onPressed: () { onPressed: () {
navigateWithName(context, ProviderAppRoutes.addSchedule, navigateWithName(context, ProviderAppRoutes.addSchedule, arguments: ScheduleData(branchId: widget.branchId ?? ""));
arguments: ScheduleData(branchId: widget.branchId ?? ""));
}, },
), ),
], ],
@ -175,8 +147,7 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
String offDays(ScheduleData scheduleData) { String offDays(ScheduleData scheduleData) {
String offDays = ""; String offDays = "";
for (int i = 0; i < scheduleData.weeklyOffDays!.length; i++) { for (int i = 0; i < scheduleData.weeklyOffDays!.length; i++) {
offDays = offDays + offDays = offDays + initDaysList[scheduleData.weeklyOffDays![i].dayNumber! - 1].title;
initDaysList[scheduleData.weeklyOffDays![i].dayNumber! - 1].title;
if (i != scheduleData.weeklyOffDays!.length - 1) { if (i != scheduleData.weeklyOffDays!.length - 1) {
offDays = offDays + " , "; offDays = offDays + " , ";
} }
@ -187,8 +158,7 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
Widget showItem(String title, String value) { Widget showItem(String title, String value) {
return Row( return Row(
children: [ children: [
title.toText( title.toText(fontSize: 12, isBold: true, color: MyColors.lightTextColor),
fontSize: 12, isBold: true, color: MyColors.lightTextColor),
4.width, 4.width,
value.toText(fontSize: 12, isBold: true), value.toText(fontSize: 12, isBold: true),
], ],

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:car_provider_app/generated/locale_keys.g.dart'; import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/view_models/service_view_model.dart'; import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/services/services_list_page.dart'; import 'package:car_provider_app/views/settings/services/services_list_page.dart';
@ -17,35 +19,56 @@ import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:mc_common_app/widgets/txt_field.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class CreateServicesPage3 extends StatelessWidget { class CreateServicesPage3 extends StatefulWidget {
CreateBranchModel? branchModel; CreateBranchModel? branchModel;
CreateServicesPage3(this.branchModel, {Key? key}) : super(key: key); CreateServicesPage3(this.branchModel, {Key? key}) : super(key: key);
@override
State<CreateServicesPage3> createState() => _CreateServicesPage3State();
}
class _CreateServicesPage3State extends State<CreateServicesPage3> {
bool isAppointmentAvailable = false; bool isAppointmentAvailable = false;
bool isHomeAppointmentAvailable = false; bool isHomeAppointmentAvailable = false;
int serviceRage = 0; int serviceRage = 0;
String chargersPerKm = "0"; String chargersPerKm = "0";
int? categoryId; int? categoryId;
int? serviceId = -1; int? serviceId = -1;
DropValue? category; DropValue? category;
DropValue? service; DropValue? service;
@override @override
Widget build(BuildContext context) { void initState() {
// TODO: implement initState
super.initState();
scheduleMicrotask(() {
ServiceVM serviceVM = context.read<ServiceVM>(); ServiceVM serviceVM = context.read<ServiceVM>();
if (branchModel!.categoryId == null) { if (widget.branchModel!.categoryId == null) {
serviceVM.fetchBranchCategory(EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA"); serviceVM.fetchBranchCategory(EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
} else { } else {
isAppointmentAvailable = branchModel?.serviceProviderService?.isAllowAppointment ?? false; isAppointmentAvailable = widget.branchModel?.serviceProviderService?.isAllowAppointment ?? false;
// isHomeAppointmentAvailable=branchModel.serviceProviderService. // isHomeAppointmentAvailable=branchModel.serviceProviderService.
serviceRage = branchModel?.serviceProviderService?.customerLocationRange ?? 0; serviceRage = widget.branchModel?.serviceProviderService?.customerLocationRange ?? 0;
if (serviceRage > 0) { if (serviceRage > 0) {
isHomeAppointmentAvailable = true; isHomeAppointmentAvailable = true;
} }
chargersPerKm = branchModel?.serviceProviderService?.rangePricePerKm ?? "0"; chargersPerKm = widget.branchModel?.serviceProviderService?.rangePricePerKm ?? "0";
serviceId = branchModel?.serviceProviderService?.serviceId ?? -1; serviceId = widget.branchModel?.serviceProviderService?.serviceId ?? -1;
}
});
} }
@override
Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: CustomAppBar(title: LocaleKeys.defineServices.tr()), appBar: CustomAppBar(title: LocaleKeys.defineServices.tr()),
body: SizedBox( body: SizedBox(
@ -62,7 +85,7 @@ class CreateServicesPage3 extends StatelessWidget {
child: Column( child: Column(
children: [ children: [
Text( Text(
branchModel!.branchName ?? "N/A", widget.branchModel!.branchName ?? "N/A",
style: const TextStyle( style: const TextStyle(
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@ -74,9 +97,9 @@ class CreateServicesPage3 extends StatelessWidget {
width: double.infinity, width: double.infinity,
), ),
12.height, 12.height,
(branchModel!.categoryId != null) (widget.branchModel!.categoryId != null)
? Text( ? Text(
branchModel!.categoryName ?? "N/A", widget.branchModel!.categoryName ?? "N/A",
style: const TextStyle( style: const TextStyle(
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@ -87,7 +110,7 @@ class CreateServicesPage3 extends StatelessWidget {
borderRadius: 0, borderRadius: 0,
width: double.infinity, width: double.infinity,
) )
: (branchModel!.categoryId == null && model.categoryDropList.isNotEmpty) : (widget.branchModel!.categoryId == null && model.categoryDropList.isNotEmpty)
? DropdownField( ? DropdownField(
(DropValue value) async { (DropValue value) async {
categoryId = value.id; categoryId = value.id;
@ -104,9 +127,9 @@ class CreateServicesPage3 extends StatelessWidget {
) )
: const CircularProgressIndicator(), : const CircularProgressIndicator(),
12.height, 12.height,
branchModel!.serviceProviderService != null widget.branchModel!.serviceProviderService != null
? Text( ? Text(
branchModel!.serviceProviderService!.serviceDescription ?? "N/A", widget.branchModel!.serviceProviderService!.serviceDescription ?? "N/A",
style: const TextStyle( style: const TextStyle(
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@ -209,7 +232,7 @@ class CreateServicesPage3 extends StatelessWidget {
maxWidth: double.infinity, maxWidth: double.infinity,
margin: const EdgeInsets.all(20), margin: const EdgeInsets.all(20),
onPressed: () { onPressed: () {
if (branchModel!.serviceProviderService != null) { if (widget.branchModel!.serviceProviderService != null) {
updateService(context, model); updateService(context, model);
} else { } else {
if (model.services != null) { if (model.services != null) {
@ -240,7 +263,7 @@ class CreateServicesPage3 extends StatelessWidget {
if (model.services!.data![i].isSelected ?? false) { if (model.services!.data![i].isSelected ?? false) {
var postParams = { var postParams = {
// "id": services!.data![i].id, // "id": services!.data![i].id,
"providerBranchID": branchModel!.branchId, "providerBranchID": widget.branchModel!.branchId,
"serviceID": model.services!.data![i].id, "serviceID": model.services!.data![i].id,
"isAllowAppointment": isAppointmentAvailable, "isAllowAppointment": isAppointmentAvailable,
"isActive": true, "isActive": true,
@ -261,7 +284,7 @@ class CreateServicesPage3 extends StatelessWidget {
updateService(BuildContext context, ServiceVM model) async { updateService(BuildContext context, ServiceVM model) async {
List<Map<String, dynamic>> map = [ List<Map<String, dynamic>> map = [
{ {
"id": branchModel!.serviceProviderService!.serviceId.toString(), "id": widget.branchModel!.serviceProviderService!.serviceId.toString(),
"isAllowAppointment": isAppointmentAvailable, "isAllowAppointment": isAppointmentAvailable,
"isActive": true, "isActive": true,
"customerLocationRange": serviceRage, "customerLocationRange": serviceRage,

Loading…
Cancel
Save