From 79d1f37b122ee9f3265f0e1aee6bdbb30a1e6c0e Mon Sep 17 00:00:00 2001
From: "Aamir.Muhammad" <>
Date: Mon, 10 Jun 2024 16:38:16 +0300
Subject: [PATCH] changes & updates
---
android/app/src/main/AndroidManifest.xml | 7 ++
gradle.properties | 2 +
lib/view_models/dashboard_view_model.dart | 2 +-
lib/view_models/schedule_view_model.dart | 15 +++
lib/view_models/service_view_model.dart | 3 +-
.../add_new_service_appointment_page.dart | 103 +++++++----------
.../appoinment_detail_list_page.dart | 2 +-
lib/views/appoinments/appointment_page.dart | 37 ++++--
lib/views/dashboard/dashboard_page.dart | 2 +
lib/views/dashboard/widget/drawer_widget.dart | 58 +++-------
.../dashboard/widget/my_service_provider.dart | 4 +-
lib/views/settings/define_license_page.dart | 6 +-
.../settings/schedule/add_schedules_page.dart | 75 ++++++------
.../schedule/schedules_list_page.dart | 108 +++++++-----------
.../services/create_services_page3.dart | 69 +++++++----
15 files changed, 245 insertions(+), 248 deletions(-)
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 08f3a9d..4ec8a32 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -5,6 +5,13 @@
+
+
+
+
+
+
1000) {
+ if (sizeInBytes > 1000000) {
Utils.showToast(LocaleKeys.fileLarger.tr());
return;
} else {
diff --git a/lib/view_models/schedule_view_model.dart b/lib/view_models/schedule_view_model.dart
index 456b927..4b8bd4e 100644
--- a/lib/view_models/schedule_view_model.dart
+++ b/lib/view_models/schedule_view_model.dart
@@ -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/general_models/m_response.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: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';
List initDaysList = [
@@ -31,6 +33,19 @@ class ScheduleVM extends BaseVM {
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 {
// if (servicesList == null) {
servicesList = null;
diff --git a/lib/view_models/service_view_model.dart b/lib/view_models/service_view_model.dart
index afb58aa..1ea6eb6 100644
--- a/lib/view_models/service_view_model.dart
+++ b/lib/view_models/service_view_model.dart
@@ -320,7 +320,7 @@ class ServiceVM extends BaseVM {
if (file != null) {
int sizeInBytes = file.lengthSync();
// double sizeInMb = sizeInBytes / (1024 * 1024);
- if (sizeInBytes > 1000) {
+ if (sizeInBytes > 1000000) {
Utils.showToast("File is larger then 1KB");
} else {
document!.data![index].document = Utils.convertFileToBase64(file);
@@ -486,7 +486,6 @@ class ServiceVM extends BaseVM {
servicesDropList = [];
setState(ViewState.busy);
services = await branchRepo.fetchServicesByCategoryId(serviceCategoryId: categoryId); // to get all the services
-
for (var element in services!.data!) {
servicesDropList.add(
DropValue(
diff --git a/lib/views/appoinments/add_new_service_appointment_page.dart b/lib/views/appoinments/add_new_service_appointment_page.dart
index ae2f72e..e8ea043 100644
--- a/lib/views/appoinments/add_new_service_appointment_page.dart
+++ b/lib/views/appoinments/add_new_service_appointment_page.dart
@@ -1,3 +1,5 @@
+import 'dart:async';
+
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:flutter/material.dart';
@@ -25,22 +27,37 @@ import '../../generated/locale_keys.g.dart';
import '../dashboard/widget/appointment_slider_widget.dart';
import '../settings/schedule/widgets/chips_picker_item.dart';
-class AddNewServiceAppointmentPage extends StatelessWidget {
+class AddNewServiceAppointmentPage extends StatefulWidget {
AppointmentListModel appointmentListModel;
- AddNewServiceAppointmentPage(this.appointmentListModel, {Key? key})
- : super(key: key);
+ AddNewServiceAppointmentPage(this.appointmentListModel, {Key? key}) : super(key: key);
+ @override
+ State createState() => _AddNewServiceAppointmentPageState();
+}
+
+class _AddNewServiceAppointmentPageState extends State {
DropValue? category;
+
DropValue? service;
+
List selectedList = [];
+
List? pickedItems;
+ ServiceVM? serviceVM;
+
+ @override
+ void initState() {
+ // TODO: implement initState
+ super.initState();
+ scheduleMicrotask(() {
+ serviceVM = context.read();
+ serviceVM!.fetchBranchCategory(EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
+ });
+ }
@override
Widget build(BuildContext context) {
- ServiceVM serviceVM = context.read();
- serviceVM.fetchBranchCategory(
- EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
return Scaffold(
appBar: const CustomAppBar(
title: "Add Service",
@@ -50,7 +67,7 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
child: Column(
children: [
AppointmentSliderWidget(
- appointmentListModel: appointmentListModel,
+ appointmentListModel: widget.appointmentListModel,
isNeedTotalPayment: true,
isNeedToShowItems: true,
isNeedToShowToMoreText: false,
@@ -79,15 +96,11 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
(DropValue value) async {
category = value;
service = null;
- model.fetchProviderServices(
- appointmentListModel.branchId
- .toString(),
- value.id.toString());
+ model.fetchProviderServices(widget.appointmentListModel.branchId.toString(), value.id.toString());
},
dropdownValue: category,
list: model.categoryDropList,
- hint:
- LocaleKeys.selectServiceCategory.tr(),
+ hint: LocaleKeys.selectServiceCategory.tr(),
)
: const Center(
child: CircularProgressIndicator(),
@@ -103,18 +116,13 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
context,
child: SelectItemsSheet(
serviceId: service?.id ?? 0,
- onSelectItems:
- (List selectedList) {
+ onSelectItems: (List selectedList) {
this.selectedList.clear();
this.selectedList = selectedList;
pickedItems = [];
- for (var element
- in selectedList) {
+ for (var element in selectedList) {
pickedItems!.add(
- PickerItem(
- id: element.id ?? 0,
- title:
- element.name ?? ""),
+ PickerItem(id: element.id ?? 0, title: element.name ?? ""),
);
}
model.notifyListeners();
@@ -128,14 +136,11 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
)
: category == null
? Container()
- : model.services != null &&
- model.servicesDropList.isEmpty
+ : model.services != null && model.servicesDropList.isEmpty
? const Text("No Service Found")
: const CircularProgressIndicator(),
12.height,
- (service != null &&
- pickedItems != null &&
- pickedItems!.length > 0)
+ (service != null && pickedItems != null && pickedItems!.length > 0)
? ChipsPickerItem(
hint: 'Select Items',
itemsList: [...pickedItems ?? []],
@@ -145,16 +150,11 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
child: SelectItemsSheet(
serviceId: service?.id ?? 0,
list: pickedItems,
- onSelectItems:
- (List selectedList) {
+ onSelectItems: (List selectedList) {
pickedItems = [];
- for (var element
- in selectedList) {
+ for (var element in selectedList) {
pickedItems!.add(
- PickerItem(
- id: element.id ?? 0,
- title:
- element.name ?? ""),
+ PickerItem(id: element.id ?? 0, title: element.name ?? ""),
);
}
model.notifyListeners();
@@ -166,9 +166,7 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
: service != null
? const Text("No Item Selected Yet")
: const SizedBox(),
- if ((service != null &&
- pickedItems != null &&
- pickedItems!.length > 0))
+ if ((service != null && pickedItems != null && pickedItems!.length > 0))
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -179,8 +177,7 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
color: MyColors.lightTextColor,
),
Row(
- crossAxisAlignment:
- CrossAxisAlignment.end,
+ crossAxisAlignment: CrossAxisAlignment.end,
children: [
calculatePrice().toString().toText(
fontSize: 29,
@@ -218,27 +215,18 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
title: "Add",
maxWidth: double.infinity,
onPressed: () async {
- if (pickedItems != null &&
- pickedItems!.length > 0) {
+ if (pickedItems != null && pickedItems!.length > 0) {
List items = [];
pickedItems?.forEach((element) {
items.add(element.id);
});
Utils.showLoading(context);
- var postParams = {
- "providerBranchID":
- appointmentListModel.branchId,
- "appointmentID": appointmentListModel.id,
- "serviceItemID": items
- };
- MResponse res = await serviceVM
- .addNewServiceInAppointment(postParams);
- _updateAppointment(context,
- appointmentListModel.branchId ?? 0);
+ var postParams = {"providerBranchID": widget.appointmentListModel.branchId, "appointmentID": widget.appointmentListModel.id, "serviceItemID": items};
+ MResponse res = await serviceVM!.addNewServiceInAppointment(postParams);
+ _updateAppointment(context, widget.appointmentListModel.branchId ?? 0);
Utils.hideLoading(context);
if (res.messageStatus == 1) {
- Utils.showToast(
- "Items are added Successfully");
+ Utils.showToast("Items are added Successfully");
pop(context);
} else {
Utils.showToast(res.message.toString());
@@ -264,14 +252,7 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
Future _updateAppointment(BuildContext context, int branchId) async {
await context.read().getMyAppointmentsForProvider({
- "ServiceProviderID": injector
- .get()
- .getUser
- .data
- ?.userInfo
- ?.providerId
- .toString() ??
- "0",
+ "ServiceProviderID": injector.get().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
}, isNeedToRebuild: true);
}
diff --git a/lib/views/appoinments/appoinment_detail_list_page.dart b/lib/views/appoinments/appoinment_detail_list_page.dart
index 86dfa5a..f6419c4 100644
--- a/lib/views/appoinments/appoinment_detail_list_page.dart
+++ b/lib/views/appoinments/appoinment_detail_list_page.dart
@@ -34,7 +34,7 @@ class AppointmentDetailListPage extends StatelessWidget {
appointmentListModel: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index],
isNeedTotalPayment: true,
isNeedToShowAppointmentStatus: true,
- isNeedToShowMergeStatus: true,
+ isNeedToShowMergeStatus: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index].isMerged ?? false,
onTap: () {
appointmentsVM.selectedAppointmentId = appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index].id ?? 0;
appointmentsVM.selectedAppointmentSubIndex = index;
diff --git a/lib/views/appoinments/appointment_page.dart b/lib/views/appoinments/appointment_page.dart
index 4de335d..1c58ade 100644
--- a/lib/views/appoinments/appointment_page.dart
+++ b/lib/views/appoinments/appointment_page.dart
@@ -1,3 +1,5 @@
+import 'dart:async';
+
import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/views/dashboard/widget/appointment_slider_widget.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:provider/provider.dart';
-class AppointmentPage extends StatelessWidget {
+class AppointmentPage extends StatefulWidget {
BranchDetailModel branch;
- String date = "";
AppointmentPage({
required this.branch,
Key? key,
}) : super(key: key);
+ @override
+ State createState() => _AppointmentPageState();
+}
+
+class _AppointmentPageState extends State {
+ String date = "";
+
GlobalKey refreshIndicatorKey = GlobalKey();
Future _pullRefresh(BuildContext context) async {
await context.read().getAppointmentSlotsInfo(
context: context,
- map: {"ProviderBranchID": branch.id.toString(), "FromDate": date, "ToDate": date},
+ map: {"ProviderBranchID": widget.branch.id.toString(), "FromDate": date, "ToDate": date},
isNeedToRebuild: true,
);
await context.read().getMyAppointmentsForProvider({
"ServiceProviderID": injector.get().getUser.data?.userInfo?.providerId.toString() ?? "0",
- "ProviderBranchID": branch.id.toString(),
+ "ProviderBranchID": widget.branch.id.toString(),
"FromDate": date,
"DateTo": date,
});
}
@override
- Widget build(BuildContext context) {
- date = DateHelper.formatAsYearMonthDay(DateTime.now());
- context.read().populateAppointmentsFilterList();
- _pullRefresh(context);
- context.read().selectedBranch = branch.id ?? 0;
+ void initState() {
+ // TODO: implement initState
+ super.initState();
+ scheduleMicrotask(() {
+ date = DateHelper.formatAsYearMonthDay(DateTime.now());
+ context.read().populateAppointmentsFilterList();
+ _pullRefresh(context);
+ context.read().selectedBranch = widget.branch.id ?? 0;
+ });
+ }
+ @override
+ Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
profileImageUrl: MyAssets.carBanner,
- title: branch.branchName,
+ title: widget.branch.branchName,
),
body: SizedBox(
width: double.infinity,
@@ -122,7 +137,7 @@ class AppointmentPage extends StatelessWidget {
}
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(
children: [
Row(
diff --git a/lib/views/dashboard/dashboard_page.dart b/lib/views/dashboard/dashboard_page.dart
index 228ad3b..c642880 100644
--- a/lib/views/dashboard/dashboard_page.dart
+++ b/lib/views/dashboard/dashboard_page.dart
@@ -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/config/dependencies.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/utils/enums.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart';
@@ -54,6 +55,7 @@ class _DashboardPageState extends State {
// context.read().populateAdsFilterList();
context.read().getBranchAndServices();
AdVM adVm = Provider.of(context, listen: false);
+ // context.read().myUpComingAppointments,
AppointmentsVM appointmentsVM = Provider.of(context, listen: false);
if (appointmentsVM.myAppointments.isEmpty) {
await appointmentsVM.getMyAppointmentsForProvider({"ServiceProviderID": injector.get().getUser.data?.userInfo?.providerId.toString() ?? "0"});
diff --git a/lib/views/dashboard/widget/drawer_widget.dart b/lib/views/dashboard/widget/drawer_widget.dart
index e366ac4..90f6b08 100644
--- a/lib/views/dashboard/widget/drawer_widget.dart
+++ b/lib/views/dashboard/widget/drawer_widget.dart
@@ -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/models/user_models/image_response.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/utils.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
@@ -35,14 +36,8 @@ class _CustomDrawerState extends State {
builder: (context) => AlertDialog(
content: const Text("Choose image source"),
actions: [
- TextButton(
- child: const Text("Camera"),
- onPressed: () =>
- widget.dashboardVM.pickImageFromPhone(context, 0)),
- TextButton(
- child: const Text("Gallery"),
- onPressed: () =>
- widget.dashboardVM.pickImageFromPhone(context, 1)),
+ TextButton(child: const Text("Camera"), 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 {
height: 200,
color: MyColors.darkPrimaryColor.withOpacity(0.01),
child: Image.network(
- ApiConsts.baseUrlServices +
- AppState()
- .getUser
- .data!
- .userInfo!
- .userImageUrl
- .toString(),
+ // ApiConsts.baseUrlServices +
+ AppState().getUser.data!.userInfo!.userImageUrl.toString(),
),
),
Positioned(
@@ -106,16 +96,11 @@ class _CustomDrawerState extends State {
color: Colors.red,
).onPress(() async {
Utils.showLoading(context);
- ImageResponse response =
- await widget.dashboardVM.updateUserImage("");
+ ImageResponse response = await widget.dashboardVM.updateUserImage("");
if (response.messageStatus == 1) {
Utils.showToast("Image is Deleted");
setState(() {
- AppState()
- .getUser
- .data!
- .userInfo!
- .userImageUrl = response.data;
+ AppState().getUser.data!.userInfo!.userImageUrl = response.data;
});
}
Utils.hideLoading(context);
@@ -139,17 +124,14 @@ class _CustomDrawerState extends State {
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- "userName".toText(
- isBold: true,
- fontSize: 20,
- letterSpacing: -1.44,
- ),
- AppState()
- .getUser
- .data!
- .userInfo!
- .roleName!
- .toText(fontSize: 10),
+ AppState().getUser.data!.userInfo!.firstName!.toText(
+ isBold: true,
+ fontSize: 20,
+ letterSpacing: -1.44,
+ ),
+ AppState().getUser.data!.userInfo!.roleName! == "ServiceProvider_Dealership" || AppState().getUser.data!.userInfo!.roleName! == "ServiceProvider_Individual"
+ ? (AppState().getUser.data!.userInfo!.roleName!.split("_").first.toString() + " " + AppState().getUser.data!.userInfo!.roleName!.split("_").last.toString()).toText()
+ : AppState().getUser.data!.userInfo!.roleName!.toText(fontSize: 10),
],
),
),
@@ -166,16 +148,15 @@ class _CustomDrawerState extends State {
),
),
ListTile(
- leading: SvgPicture.asset(MyAssets.nextIcon,
- color: MyColors.darkPrimaryColor),
+ leading: SvgPicture.asset(MyAssets.nextIcon, color: MyColors.darkPrimaryColor),
title: LocaleKeys.defineLicences.tr().toText(fontSize: 12),
onTap: () {
+ // AppPermissions.checkStoragePermissions(context);
navigateWithName(context, ProviderAppRoutes.defineLicense);
},
),
ListTile(
- leading: SvgPicture.asset(MyAssets.nextIcon,
- color: MyColors.darkPrimaryColor),
+ leading: SvgPicture.asset(MyAssets.nextIcon, color: MyColors.darkPrimaryColor),
title: "Subscriptions".toText(fontSize: 12),
onTap: () {
navigateWithName(context, ProviderAppRoutes.mySubscriptionsPage);
@@ -190,8 +171,7 @@ class _CustomDrawerState extends State {
),
title: LocaleKeys.english.tr().toText(fontSize: 12),
onTap: () {
- if (EasyLocalization.of(context)?.currentLocale?.countryCode ==
- "SA") {
+ if (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA") {
context.setLocale(const Locale("en", "US"));
} else {
context.setLocale(const Locale('ar', 'SA'));
diff --git a/lib/views/dashboard/widget/my_service_provider.dart b/lib/views/dashboard/widget/my_service_provider.dart
index e66240b..0d74cff 100644
--- a/lib/views/dashboard/widget/my_service_provider.dart
+++ b/lib/views/dashboard/widget/my_service_provider.dart
@@ -24,9 +24,9 @@ class ServiceProviderWidget extends StatelessWidget {
if (model.state == ViewState.busy) {
return const Center(child: CircularProgressIndicator());
} else {
- return model.branches!.data! == null
+ return model.branches!.data == null
? 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()))
: ListView.builder(
itemCount: model.branches!.data!.serviceProviderBranch!.length,
diff --git a/lib/views/settings/define_license_page.dart b/lib/views/settings/define_license_page.dart
index 84b7650..7beb79e 100644
--- a/lib/views/settings/define_license_page.dart
+++ b/lib/views/settings/define_license_page.dart
@@ -1,4 +1,3 @@
-
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@@ -144,9 +143,10 @@ class _DefineLicensePageState extends State {
8.height,
InkWell(
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) {
- model.selectFile(context,index);
+ model.selectFile(context, index);
}
},
child: Container(
diff --git a/lib/views/settings/schedule/add_schedules_page.dart b/lib/views/settings/schedule/add_schedules_page.dart
index 645efa1..bdb8030 100644
--- a/lib/views/settings/schedule/add_schedules_page.dart
+++ b/lib/views/settings/schedule/add_schedules_page.dart
@@ -1,3 +1,5 @@
+import 'dart:async';
+
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/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:mc_common_app/extensions/int_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/general_models/m_response.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:mc_common_app/widgets/bottom_sheet.dart';
-class AddSchedulesPage extends StatelessWidget {
+class AddSchedulesPage extends StatefulWidget {
+ AddSchedulesPage({Key? key}) : super(key: key);
+
+ @override
+ State createState() => _AddSchedulesPageState();
+}
+
+class _AddSchedulesPageState extends State {
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() {
name = scheduleData.scheduleName ?? "";
- startDate = DateHelper.formatAsYearMonthDay(
- scheduleData.fromDate ?? DateTime.now());
- endDate =
- DateHelper.formatAsYearMonthDay(scheduleData.toDate ?? DateTime.now());
+ startDate = DateHelper.formatAsYearMonthDay(scheduleData.fromDate ?? DateTime.now());
+ endDate = DateHelper.formatAsYearMonthDay(scheduleData.toDate ?? DateTime.now());
startTime = scheduleData.startTime ?? "";
endTime = scheduleData.endTime ?? "";
slotsTime = scheduleData.slotDurationMinute.toString();
@@ -44,9 +45,7 @@ class AddSchedulesPage extends StatelessWidget {
// mModel.selectedServicesItems.clear();
scheduleData.scheduleServices?.forEach((element) {
- mModel.selectedServicesItems.add(PickerItem(
- id: element.providerServiceId ?? 0,
- title: element.serviceDescription ?? ""));
+ mModel.selectedServicesItems.add(PickerItem(id: element.providerServiceId ?? 0, title: element.serviceDescription ?? ""));
});
mModel.selectedDaysItems.clear();
scheduleData.weeklyOffDays?.forEach((element) {
@@ -59,16 +58,23 @@ class AddSchedulesPage extends StatelessWidget {
});
}
+ @override
+ void initState() {
+ super.initState();
+ scheduleMicrotask(() {
+ mModel = context.read();
+ scheduleData = ModalRoute.of(context)!.settings.arguments as ScheduleData;
+ mModel.getAllServices(scheduleData.branchId, scheduleData);
+ mModel.selectedServicesItems = [];
+ mModel.selectedDaysItems = [];
+ if (scheduleData.id != null) {
+ setEditData();
+ }
+ });
+ }
+
@override
Widget build(BuildContext context) {
- mModel = context.read();
- scheduleData = ModalRoute.of(context)!.settings.arguments as ScheduleData;
- mModel.getAllServices(scheduleData.branchId, scheduleData);
- mModel.selectedServicesItems = [];
- mModel.selectedDaysItems = [];
- if (scheduleData.id != null) {
- setEditData();
- }
return Scaffold(
appBar: const CustomAppBar(
title: "Create Schedules",
@@ -190,12 +196,7 @@ class AddSchedulesPage extends StatelessWidget {
isNeedClickAll: true,
onTap: () async {
TimeOfDay _startTime = TimeOfDay.now();
- if (startTime.isNotEmpty)
- _startTime = TimeOfDay(
- hour:
- int.parse(startTime.split(":")[0]),
- minute:
- int.parse(startTime.split(":")[1]));
+ if (startTime.isNotEmpty) _startTime = TimeOfDay(hour: int.parse(startTime.split(":")[0]), minute: int.parse(startTime.split(":")[1]));
endTime = await Utils.pickTime(
context,
initialTime: _startTime,
@@ -340,11 +341,13 @@ class AddSchedulesPage extends StatelessWidget {
}
} else {
Utils.hideLoading(context);
- Utils.showToast(scheduleResponse.message??"");
+ Utils.showToast(scheduleResponse.message ?? "");
}
}
updateSchedule(BuildContext context, ScheduleVM model) async {
+ logger.d(scheduleData);
+ print("-----------");
List days = [];
for (var element in model.selectedDaysItems) {
days.add(element.id);
@@ -361,7 +364,8 @@ class AddSchedulesPage extends StatelessWidget {
"slotDurationMinute": slotsTime,
"perSlotAppointment": appointmentPerSlot,
"deliveryServiceType": 1,
- "weeklyOffDays": days
+ "weeklyOffDays": days,
+ "appointmentType": scheduleData.appointmentType
};
Utils.showLoading(context);
@@ -385,8 +389,7 @@ class AddSchedulesPage extends StatelessWidget {
context.read().getSchedules(scheduleData.branchId ?? "");
pop(context);
} else {
- Utils.showToast(
- "Something went wrong while adding services in schedule");
+ Utils.showToast("Something went wrong while adding services in schedule");
}
} else {
Utils.hideLoading(context);
diff --git a/lib/views/settings/schedule/schedules_list_page.dart b/lib/views/settings/schedule/schedules_list_page.dart
index ab7449a..5f86fc8 100644
--- a/lib/views/settings/schedule/schedules_list_page.dart
+++ b/lib/views/settings/schedule/schedules_list_page.dart
@@ -4,10 +4,12 @@ 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/main.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/utils/date_helper.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/extensions/extensions_widget.dart';
@@ -26,7 +28,6 @@ class SchedulesListPage extends StatefulWidget {
class _SchedulesListPageState extends State {
@override
void initState() {
- // TODO: implement initState
super.initState();
context.read().getSchedules(widget.branchId ?? "");
}
@@ -56,16 +57,30 @@ class _SchedulesListPageState extends State {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
- child: value.schedule!.data![index]
- .scheduleName
- .toString()
- .toText(
+ child: value.schedule!.data![index].scheduleName.toString().toText(
fontSize: 16,
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: const EdgeInsets.all(4.0),
child: SvgPicture.asset(
@@ -74,68 +89,28 @@ class _SchedulesListPageState extends State {
height: 16,
),
).onPress(() {
- value.schedule!.data![index]
- .branchId = widget.branchId ?? "";
- navigateWithName(context,
- ProviderAppRoutes.addSchedule,
- arguments:
- value.schedule!.data![index]);
+ value.schedule!.data![index].branchId = widget.branchId ?? "";
+ navigateWithName(context, ProviderAppRoutes.addSchedule, arguments: value.schedule!.data![index]);
}),
],
- crossAxisAlignment:
- CrossAxisAlignment.center,
),
12.height,
- showItem(
- "Start Date:",
- DateHelper.formatAsDayMonthYear(value
- .schedule!.data![index].fromDate)),
- showItem(
- "End Date:",
- DateHelper.formatAsDayMonthYear(value
- .schedule!.data![index].toDate)),
- 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])),
+ showItem("Start Date:", DateHelper.formatAsDayMonthYear(value.schedule!.data![index].fromDate)),
+ showItem("End Date:", DateHelper.formatAsDayMonthYear(value.schedule!.data![index].toDate)),
+ 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,
- "Services:".toText(
- fontSize: 12,
- isBold: true,
- color: MyColors.lightTextColor),
+ "Services:".toText(fontSize: 12, isBold: true, color: MyColors.lightTextColor),
Column(
- crossAxisAlignment:
- CrossAxisAlignment.start,
- children: value.schedule!.data![index]
- .scheduleServices!
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: value.schedule!.data![index].scheduleServices!
.map(
(element) => Container(
- child: element.serviceDescription
- .toString()
- .toText(
+ child: element.serviceDescription.toString().toText(
fontSize: 12,
isBold: true,
),
@@ -144,11 +119,9 @@ class _SchedulesListPageState extends State {
.toList(),
)
],
- ).toWhiteContainer(
- width: double.infinity, allPading: 12);
+ ).toWhiteContainer(width: double.infinity, allPading: 12);
},
- separatorBuilder:
- (BuildContext context, int index) {
+ separatorBuilder: (BuildContext context, int index) {
return 12.height;
},
padding: const EdgeInsets.all(20),
@@ -162,8 +135,7 @@ class _SchedulesListPageState extends State {
maxWidth: double.infinity,
margin: const EdgeInsets.all(20),
onPressed: () {
- navigateWithName(context, ProviderAppRoutes.addSchedule,
- arguments: ScheduleData(branchId: widget.branchId ?? ""));
+ navigateWithName(context, ProviderAppRoutes.addSchedule, arguments: ScheduleData(branchId: widget.branchId ?? ""));
},
),
],
@@ -175,8 +147,7 @@ class _SchedulesListPageState extends State {
String offDays(ScheduleData scheduleData) {
String offDays = "";
for (int i = 0; i < scheduleData.weeklyOffDays!.length; i++) {
- offDays = offDays +
- initDaysList[scheduleData.weeklyOffDays![i].dayNumber! - 1].title;
+ offDays = offDays + initDaysList[scheduleData.weeklyOffDays![i].dayNumber! - 1].title;
if (i != scheduleData.weeklyOffDays!.length - 1) {
offDays = offDays + " , ";
}
@@ -187,8 +158,7 @@ class _SchedulesListPageState extends State {
Widget showItem(String title, String value) {
return Row(
children: [
- title.toText(
- fontSize: 12, isBold: true, color: MyColors.lightTextColor),
+ title.toText(fontSize: 12, isBold: true, color: MyColors.lightTextColor),
4.width,
value.toText(fontSize: 12, isBold: true),
],
diff --git a/lib/views/settings/services/create_services_page3.dart b/lib/views/settings/services/create_services_page3.dart
index 1c7dae6..0e89bca 100644
--- a/lib/views/settings/services/create_services_page3.dart
+++ b/lib/views/settings/services/create_services_page3.dart
@@ -1,3 +1,5 @@
+import 'dart:async';
+
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/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:provider/provider.dart';
-class CreateServicesPage3 extends StatelessWidget {
+class CreateServicesPage3 extends StatefulWidget {
CreateBranchModel? branchModel;
CreateServicesPage3(this.branchModel, {Key? key}) : super(key: key);
+ @override
+ State createState() => _CreateServicesPage3State();
+}
+
+class _CreateServicesPage3State extends State {
bool isAppointmentAvailable = false;
+
bool isHomeAppointmentAvailable = false;
+
int serviceRage = 0;
+
String chargersPerKm = "0";
+
int? categoryId;
+
int? serviceId = -1;
+
DropValue? category;
+
DropValue? service;
@override
- Widget build(BuildContext context) {
- ServiceVM serviceVM = context.read();
- if (branchModel!.categoryId == null) {
- serviceVM.fetchBranchCategory(EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
- } else {
- isAppointmentAvailable = branchModel?.serviceProviderService?.isAllowAppointment ?? false;
- // isHomeAppointmentAvailable=branchModel.serviceProviderService.
- serviceRage = branchModel?.serviceProviderService?.customerLocationRange ?? 0;
- if (serviceRage > 0) {
- isHomeAppointmentAvailable = true;
+ void initState() {
+ // TODO: implement initState
+ super.initState();
+ scheduleMicrotask(() {
+ ServiceVM serviceVM = context.read();
+ if (widget.branchModel!.categoryId == null) {
+ serviceVM.fetchBranchCategory(EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
+ } else {
+ 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 ?? "0";
+ serviceId = widget.branchModel?.serviceProviderService?.serviceId ?? -1;
}
- chargersPerKm = branchModel?.serviceProviderService?.rangePricePerKm ?? "0";
- serviceId = branchModel?.serviceProviderService?.serviceId ?? -1;
- }
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+
return Scaffold(
appBar: CustomAppBar(title: LocaleKeys.defineServices.tr()),
body: SizedBox(
@@ -62,7 +85,7 @@ class CreateServicesPage3 extends StatelessWidget {
child: Column(
children: [
Text(
- branchModel!.branchName ?? "N/A",
+ widget.branchModel!.branchName ?? "N/A",
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
@@ -74,9 +97,9 @@ class CreateServicesPage3 extends StatelessWidget {
width: double.infinity,
),
12.height,
- (branchModel!.categoryId != null)
+ (widget.branchModel!.categoryId != null)
? Text(
- branchModel!.categoryName ?? "N/A",
+ widget.branchModel!.categoryName ?? "N/A",
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
@@ -87,7 +110,7 @@ class CreateServicesPage3 extends StatelessWidget {
borderRadius: 0,
width: double.infinity,
)
- : (branchModel!.categoryId == null && model.categoryDropList.isNotEmpty)
+ : (widget.branchModel!.categoryId == null && model.categoryDropList.isNotEmpty)
? DropdownField(
(DropValue value) async {
categoryId = value.id;
@@ -104,9 +127,9 @@ class CreateServicesPage3 extends StatelessWidget {
)
: const CircularProgressIndicator(),
12.height,
- branchModel!.serviceProviderService != null
+ widget.branchModel!.serviceProviderService != null
? Text(
- branchModel!.serviceProviderService!.serviceDescription ?? "N/A",
+ widget.branchModel!.serviceProviderService!.serviceDescription ?? "N/A",
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
@@ -209,7 +232,7 @@ class CreateServicesPage3 extends StatelessWidget {
maxWidth: double.infinity,
margin: const EdgeInsets.all(20),
onPressed: () {
- if (branchModel!.serviceProviderService != null) {
+ if (widget.branchModel!.serviceProviderService != null) {
updateService(context, model);
} else {
if (model.services != null) {
@@ -240,7 +263,7 @@ class CreateServicesPage3 extends StatelessWidget {
if (model.services!.data![i].isSelected ?? false) {
var postParams = {
// "id": services!.data![i].id,
- "providerBranchID": branchModel!.branchId,
+ "providerBranchID": widget.branchModel!.branchId,
"serviceID": model.services!.data![i].id,
"isAllowAppointment": isAppointmentAvailable,
"isActive": true,
@@ -261,7 +284,7 @@ class CreateServicesPage3 extends StatelessWidget {
updateService(BuildContext context, ServiceVM model) async {
List