Code Refactoring

aamir_dev
Faiz Hashmi 2 years ago
parent 082cd766a5
commit a25ec69694

@ -1,13 +1,12 @@
import 'package:mc_common_app/repositories/branch_repo.dart';
import 'package:car_provider_app/repositories/items_repo.dart';
import 'package:car_provider_app/repositories/schedule_repo.dart';
import 'package:mc_common_app/repositories/items_repo.dart';
import 'package:mc_common_app/repositories/schedule_repo.dart';
import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/repositories/subscription_repo.dart';
class ProviderAppDependencies {
static void addDependencies() {
AppDependencies.addDependencies();
injector.registerSingleton<BranchRepo>(() => BranchRepoImp());
injector.registerSingleton<ItemsRepo>(() => ItemsRepoImp());
injector.registerSingleton<SubscriptionRepo>(() => SubscriptionRepoImp());
injector.registerSingleton<ScheduleRepo>(() => ScheduleRepoImp());

@ -1,6 +1,6 @@
import 'package:car_provider_app/config/provider_dependencies.dart';
import 'package:car_provider_app/repositories/items_repo.dart';
import 'package:car_provider_app/repositories/schedule_repo.dart';
import 'package:mc_common_app/repositories/items_repo.dart';
import 'package:mc_common_app/repositories/schedule_repo.dart';
import 'package:car_provider_app/view_models/dashboard_view_model.dart';
import 'package:car_provider_app/view_models/items_view_model.dart';
import 'package:car_provider_app/view_models/schedule_view_model.dart';
@ -102,7 +102,7 @@ Future<void> main() async {
),
ChangeNotifierProvider<AppointmentsVM>(
create: (_) => AppointmentsVM(
scheduleRepo: injector.get<AppointmentRepo>(),
appointmentRepo: injector.get<AppointmentRepo>(),
commonServices: injector.get<CommonAppServices>(),
commonRepo: injector.get<CommonRepo>(),
branchRepo: injector.get<BranchRepo>(),

@ -1,43 +0,0 @@
import 'package:flutter/material.dart';
import 'package:mc_common_app/api/api_client.dart';
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/models/general_models/m_response.dart';
import 'package:mc_common_app/models/services_models/item_model.dart';
abstract class ItemsRepo {
Future<MResponse> createServiceItems(Map map);
Future<ItemModel> getServiceItems(int serviceId);
Future<MResponse> updateServiceItem(Map map);
}
class ItemsRepoImp implements ItemsRepo {
@override
Future<MResponse> createServiceItems(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
debugPrint(t);
return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createItems, map, token: t);
}
@override
Future<ItemModel> getServiceItems(int serviceId) async {
var queryParameters = {
"ServiceProviderServiceID": serviceId.toString(),
};
String? token = AppState().getUser.data?.accessToken;
debugPrint(token);
return await injector
.get<ApiClient>()
.getJsonForObject((json) => ItemModel.fromJson(json), ApiConsts.getServiceItems, queryParameters: queryParameters, token: AppState().getUser.data!.accessToken ?? "");
}
@override
Future<MResponse> updateServiceItem(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
debugPrint(t);
return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateServiceItem, map, token: t);
}
}

@ -1,62 +0,0 @@
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';
import 'package:mc_common_app/api/api_client.dart';
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';
abstract class ScheduleRepo {
Future<Services> getAllServices(String branchId);
Future<MResponse> createSchedule(Map map);
Future<MResponse> addServicesInSchedule(Map map);
Future<MResponse> updateSchedule(Map map);
Future<Schedule> getSchedules(String branchId);
Future<MResponse> updateServicesInSchedule(Map map);
}
class ScheduleRepoImp implements ScheduleRepo {
@override
Future<Services> getAllServices(String branchId) async {
print("braanchId $branchId");
Map<String, dynamic> map = {"ProviderBranchID": branchId};
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().getJsonForObject((json) => Services.fromJson(json), ApiConsts.getServicesOfBranch, token: t, queryParameters: map);
}
@override
Future<MResponse> createSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createSchedule, map, token: t);
}
@override
Future<MResponse> addServicesInSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createGroup, map, token: t);
}
@override
Future<Schedule> getSchedules(String branchId) async {
Map<String, dynamic> map = {"ServiceProviderBranchID": branchId};
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().getJsonForObject((json) => Schedule.fromJson(json), ApiConsts.getSchedule, token: t, queryParameters: map);
}
@override
Future<MResponse> updateSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateSchedule, map, token: t);
}
@override
Future<MResponse> updateServicesInSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateGroup, map, token: t);
}
}

@ -1,6 +1,6 @@
import 'dart:io';
import 'package:car_provider_app/repositories/items_repo.dart';
import 'package:mc_common_app/repositories/items_repo.dart';
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/models/general_models/m_response.dart';
import 'package:mc_common_app/models/services_models/item_model.dart';

@ -1,7 +1,7 @@
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';
import 'package:car_provider_app/repositories/schedule_repo.dart';
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';

@ -263,7 +263,7 @@ class AddNewServiceAppointmentPage extends StatelessWidget {
}
Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getProviderMyAppointments({
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector
.get<AppState>()
.getUser

@ -1,18 +1,16 @@
import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/views/dashboard/widget/appointment_slider_widget.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/view_models/appointments_view_model.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import '../../config/provider_routes.dart';
import '../dashboard/widget/appointment_slider_widget.dart';
import 'package:provider/provider.dart';
class AppointmentDetailListPage extends StatelessWidget {
AppointmentDetailListPage({Key? key}) : super(key: key);
const AppointmentDetailListPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
@ -26,47 +24,29 @@ class AppointmentDetailListPage extends StatelessWidget {
child: Column(
children: [
Expanded(
child: Consumer(builder: (BuildContext context,
AppointmentsVM appointmentsVM, Widget? child) {
child: Consumer(builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
if (appointmentsVM.state == ViewState.busy) {
return const Center(child: CircularProgressIndicator());
} else {
return ListView.separated(
itemBuilder: (context, index) {
return AppointmentSliderWidget(
appointmentListModel: appointmentsVM
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.customerAppointmentList![index],
appointmentListModel: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index],
isNeedTotalPayment: true,
isNeedToShowAppointmentStatus: true,
isNeedToShowMergeStatus: true,
onTap: () {
appointmentsVM.selectedAppointmentId =
appointmentsVM
.myFilteredAppointments2[appointmentsVM
.selectedAppointmentIndex]
.customerAppointmentList![index]
.id ??
0;
appointmentsVM.selectedAppointmentId = appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index].id ?? 0;
appointmentsVM.selectedAppointmentSubIndex = index;
navigateWithName(context,
ProviderAppRoutes.updateAppointmentPage,
arguments: appointmentsVM
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.customerAppointmentList![index]);
navigateWithName(context, ProviderAppRoutes.updateAppointmentPage,
arguments: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index]);
},
);
},
separatorBuilder: (context, snapchat) {
return 21.height;
},
itemCount: appointmentsVM
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.customerAppointmentList!
.length,
itemCount: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList!.length,
padding: const EdgeInsets.all(21),
);
}
@ -77,8 +57,7 @@ class AppointmentDetailListPage extends StatelessWidget {
maxWidth: double.infinity,
margin: const EdgeInsets.all(21),
onPressed: () {
navigateWithName(
context, ProviderAppRoutes.mergeAppointments);
navigateWithName(context, ProviderAppRoutes.mergeAppointments);
},
),
],

@ -28,28 +28,16 @@ class AppointmentPage extends StatelessWidget {
Key? key,
}) : super(key: key);
GlobalKey<RefreshIndicatorState> refreshIndicatorKey =
GlobalKey<RefreshIndicatorState>();
GlobalKey<RefreshIndicatorState> refreshIndicatorKey = GlobalKey<RefreshIndicatorState>();
Future<void> _pullRefresh(BuildContext context) async {
await context.read<AppointmentsVM>().getAppointmentSlotsInfo(
context: context,
map: {
"ProviderBranchID": branch.id.toString(),
"FromDate": date,
"ToDate": date
},
map: {"ProviderBranchID": branch.id.toString(), "FromDate": date, "ToDate": date},
isNeedToRebuild: true,
);
await context.read<AppointmentsVM>().getProviderMyAppointments({
"ServiceProviderID": injector
.get<AppState>()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"0",
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branch.id.toString(),
"FromDate": date,
"DateTo": date,
@ -59,7 +47,7 @@ class AppointmentPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
date = DateHelper.formatAsYearMonthDay(DateTime.now());
context.read<AppointmentsVM>().setupProviderAppointmentFilter();
context.read<AppointmentsVM>().populateAppointmentsFilterList();
_pullRefresh(context);
context.read<AppointmentsVM>().selectedBranch = branch.id ?? 0;
@ -71,8 +59,7 @@ class AppointmentPage extends StatelessWidget {
body: SizedBox(
width: double.infinity,
height: double.infinity,
child: Consumer(builder: (BuildContext context,
AppointmentsVM appointmentsVM, Widget? child) {
child: Consumer(builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
if (appointmentsVM.state == ViewState.busy) {
return const Center(child: CircularProgressIndicator());
} else {
@ -89,8 +76,7 @@ class AppointmentPage extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 18),
onFilterTapped: (index, selectedFilterId) {
appointmentsVM.applyFilterOnAppointmentsVM(
appointmentStatusEnum:
selectedFilterId.toAppointmentStatusEnum(),
appointmentStatusEnum: selectedFilterId.toAppointmentStatusEnum(),
isNeedCustomerFilter: true,
);
},
@ -103,13 +89,10 @@ class AppointmentPage extends StatelessWidget {
ListView.separated(
itemBuilder: (context, index) {
return AppointmentSliderWidget(
appointmentListModel:
appointmentsVM.myFilteredAppointments2[index],
appointmentListModel: appointmentsVM.myFilteredAppointments2[index],
isNeedTotalPayment: false,
onTap: () {
context
.read<AppointmentsVM>()
.selectedAppointmentIndex = index;
context.read<AppointmentsVM>().selectedAppointmentIndex = index;
navigateWithName(
context,
ProviderAppRoutes.appointmentDetailList,
@ -139,10 +122,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 ?? 0.0 / (appointmentsVM.appointmentSlots?.totalSlots ?? 0.0)).toDouble() * 100;
return Column(
children: [
Row(
@ -201,9 +181,7 @@ class AppointmentPage extends StatelessWidget {
fontSize: 8,
color: Colors.white,
),
(appointmentsVM.appointmentSlots?.emptySlots ?? 0)
.toString()
.toText(
(appointmentsVM.appointmentSlots?.emptySlots ?? 0).toString().toText(
fontSize: 9,
fontWeight: FontWeight.bold,
color: Colors.white,
@ -225,9 +203,7 @@ class AppointmentPage extends StatelessWidget {
fontSize: 8,
color: Colors.white,
),
(appointmentsVM.appointmentSlots?.occupiedSlots ?? 0)
.toString()
.toText(
(appointmentsVM.appointmentSlots?.occupiedSlots ?? 0).toString().toText(
fontSize: 9,
fontWeight: FontWeight.bold,
color: Colors.white,
@ -250,9 +226,7 @@ class AppointmentPage extends StatelessWidget {
fontSize: 13,
fontWeight: FontWeight.bold,
),
(appointmentsVM.appointmentSlots?.totalSlots ?? 0)
.toString()
.toText(
(appointmentsVM.appointmentSlots?.totalSlots ?? 0).toString().toText(
fontSize: 24,
fontWeight: FontWeight.bold,
),

@ -144,7 +144,7 @@ class MergeAppointmentListPage extends StatelessWidget {
}
Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getProviderMyAppointments({
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector
.get<AppState>()
.getUser

@ -33,13 +33,8 @@ class UpdateAppointmentPage extends StatelessWidget {
body: SizedBox(
width: double.infinity,
height: double.infinity,
child: Consumer(builder: (BuildContext context,
AppointmentsVM appointmentsVM, Widget? child) {
appointmentListModel = appointmentsVM
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.customerAppointmentList![
appointmentsVM.selectedAppointmentSubIndex];
child: Consumer(builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
appointmentListModel = appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![appointmentsVM.selectedAppointmentSubIndex];
if (appointmentsVM.state == ViewState.busy) {
return const Center(child: CircularProgressIndicator());
} else {
@ -72,11 +67,8 @@ class UpdateAppointmentPage extends StatelessWidget {
],
),
),
if (appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.cancelled)
"Appointment is Canceled".toText(),
if (appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.booked)
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.cancelled) "Appointment is Canceled".toText(),
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.booked)
Column(
children: [
showPayNowButton(context, appointmentsVM),
@ -85,20 +77,14 @@ class UpdateAppointmentPage extends StatelessWidget {
],
).paddingAll(21),
if (appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.confirmed &&
appointmentListModel.appointmentPaymentStatusEnum ==
AppointmentPaymentStatusEnum.defaultStatus)
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.confirmed && appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.defaultStatus)
Column(
children: [
showArrivedutton(context, appointmentsVM),
],
).paddingAll(21),
if (appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.arrived &&
appointmentListModel.appointmentPaymentStatusEnum ==
AppointmentPaymentStatusEnum.defaultStatus)
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.arrived && appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.defaultStatus)
Column(
children: [
showPayNowButton(context, appointmentsVM),
@ -107,32 +93,20 @@ class UpdateAppointmentPage extends StatelessWidget {
],
).paddingAll(21),
if ((appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.arrived ||
appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.workStarted) &&
appointmentListModel.appointmentPaymentStatusEnum ==
AppointmentPaymentStatusEnum.payNow)
"Waiting for the payment from the customer"
.toText()
.paddingAll(21),
if ((appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.arrived || appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.workStarted) &&
appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.payNow)
"Waiting for the payment from the customer".toText().paddingAll(21),
if (appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.arrived &&
(appointmentListModel.appointmentPaymentStatusEnum ==
AppointmentPaymentStatusEnum.paid ||
appointmentListModel.appointmentPaymentStatusEnum ==
AppointmentPaymentStatusEnum.payLater))
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.arrived &&
(appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.paid ||
appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.payLater))
Column(
children: [
showWorkStartButton(context, appointmentsVM),
],
).paddingAll(21),
if (appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.workStarted &&
appointmentListModel.appointmentPaymentStatusEnum ==
AppointmentPaymentStatusEnum.payPartial)
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.workStarted && appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.payPartial)
Column(
children: [
showPayLaterButton(context, appointmentsVM),
@ -142,25 +116,17 @@ class UpdateAppointmentPage extends StatelessWidget {
).paddingAll(21),
// "Show Pay Now".toText(),
if (appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.workStarted &&
appointmentListModel.appointmentPaymentStatusEnum ==
AppointmentPaymentStatusEnum.paid)
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.workStarted && appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.paid)
Column(
children: [
showCompleteButton(context, appointmentsVM),
],
).paddingAll(21),
// "Show Complete Button".toText(),
if (appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.workStarted &&
appointmentListModel.appointmentPaymentStatusEnum ==
AppointmentPaymentStatusEnum.payLater)
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.workStarted && appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.payLater)
showPayNowButton(context, appointmentsVM).paddingAll(21),
if (appointmentListModel.appointmentStatusEnum ==
AppointmentStatusEnum.visitCompleted)
"Appointment is completed".toText().paddingAll(21),
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.visitCompleted) "Appointment is completed".toText().paddingAll(21),
// Padding(
// padding: const EdgeInsets.all(21.0),
@ -203,17 +169,13 @@ class UpdateAppointmentPage extends StatelessWidget {
);
}
Widget showWorkStartButton(
BuildContext context, AppointmentsVM appointmentsVM) {
Widget showWorkStartButton(BuildContext context, AppointmentsVM appointmentsVM) {
return ShowFillButton(
title: "Work Start",
maxWidth: double.infinity,
onPressed: () async {
Utils.showLoading(context);
await appointmentsVM.updateAppointmentStatus({
"appointmentID": appointmentListModel.id.toString(),
"appointmentStatusID": 7
});
await appointmentsVM.updateAppointmentStatus({"appointmentID": appointmentListModel.id.toString(), "appointmentStatusID": 7});
Utils.hideLoading(context);
// showMyBottomSheet(
// context,
@ -232,10 +194,7 @@ class UpdateAppointmentPage extends StatelessWidget {
maxWidth: double.infinity,
onPressed: () async {
Utils.showLoading(context);
await appointmentsVM.updateAppointmentPaymentStatus({
"appointmentID": appointmentListModel.id.toString(),
"appointmentServicePaymentStatusID": 2
});
await appointmentsVM.updateAppointmentPaymentStatus({"appointmentID": appointmentListModel.id.toString(), "appointmentServicePaymentStatusID": 2});
_updateAppointment(context, appointmentListModel.branchId ?? 0);
Utils.hideLoading(context);
},
@ -248,44 +207,33 @@ class UpdateAppointmentPage extends StatelessWidget {
maxWidth: double.infinity,
onPressed: () async {
Utils.showLoading(context);
await appointmentsVM.updateAppointmentStatus({
"appointmentID": appointmentListModel.id.toString(),
"appointmentStatusID": 3
});
await appointmentsVM.updateAppointmentStatus({"appointmentID": appointmentListModel.id.toString(), "appointmentStatusID": 3});
_updateAppointment(context, appointmentListModel.branchId ?? 0);
Utils.hideLoading(context);
},
);
}
Widget showPayLaterButton(
BuildContext context, AppointmentsVM appointmentsVM) {
Widget showPayLaterButton(BuildContext context, AppointmentsVM appointmentsVM) {
return ShowFillButton(
title: "Pay Later",
maxWidth: double.infinity,
onPressed: () async {
Utils.showLoading(context);
await appointmentsVM.updateAppointmentPaymentStatus({
"appointmentID": appointmentListModel.id.toString(),
"appointmentServicePaymentStatusID": 4
});
await appointmentsVM.updateAppointmentPaymentStatus({"appointmentID": appointmentListModel.id.toString(), "appointmentServicePaymentStatusID": 4});
_updateAppointment(context, appointmentListModel.branchId ?? 0);
Utils.hideLoading(context);
},
);
}
Widget showCompleteButton(
BuildContext context, AppointmentsVM appointmentsVM) {
Widget showCompleteButton(BuildContext context, AppointmentsVM appointmentsVM) {
return ShowFillButton(
title: "Complete",
maxWidth: double.infinity,
onPressed: () async {
Utils.showLoading(context);
await appointmentsVM.updateAppointmentStatus({
"appointmentID": appointmentListModel.id.toString(),
"appointmentStatusID": 8
});
await appointmentsVM.updateAppointmentStatus({"appointmentID": appointmentListModel.id.toString(), "appointmentStatusID": 8});
_updateAppointment(context, appointmentListModel.branchId ?? 0);
Utils.hideLoading(context);
},
@ -312,15 +260,8 @@ class UpdateAppointmentPage extends StatelessWidget {
}
Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getProviderMyAppointments({
"ServiceProviderID": injector
.get<AppState>()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"0",
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
}, isNeedToRebuild: true);
}

@ -44,29 +44,19 @@ class _DashboardPageState extends State<DashboardPage> {
super.initState();
dashboardVM = Provider.of<DashboardVM>(context, listen: false);
context.read<RequestsVM>().populateRequestsFilterList();
context.read<AppointmentsVM>().populateAppointmentsFilterList();
_onRefresh();
}
Future<void> _onRefresh() async {
final requestsVM = context.read<RequestsVM>();
final chatVM = context.read<ChatVM>();
// final chatVM = context.read<ChatVM>();
// context.read<AdVM>().populateAdsFilterList();
context.read<ServiceVM>().getBranchAndServices();
AdVM adVm = Provider.of<AdVM>(context, listen: false);
AppointmentsVM appointmentsVM =
Provider.of<AppointmentsVM>(context, listen: false);
AppointmentsVM appointmentsVM = Provider.of<AppointmentsVM>(context, listen: false);
if (appointmentsVM.myAppointments.isEmpty) {
await appointmentsVM.getProviderMyAppointments({
"ServiceProviderID": injector
.get<AppState>()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"0"
});
await appointmentsVM.getMyAppointmentsForProvider({"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0"});
}
adVm.populateAdsFilterList();
if (adVm.myAds.isEmpty) {

@ -8,44 +8,29 @@ 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/view_models/appointments_view_model.dart';
import 'package:mc_common_app/views/appointments/widgets/customer_appointment_slider_widget.dart';
import 'package:mc_common_app/widgets/common_widgets/categories_list.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:mc_common_app/widgets/tab/menu_tabs.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/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
import 'package:percent_indicator/percent_indicator.dart';
import 'package:provider/provider.dart';
class AppointmentFragment extends StatelessWidget {
String date = "";
VoidCallback onBackButtonTapped;
final VoidCallback onBackButtonTapped;
AppointmentFragment({Key? key, required this.onBackButtonTapped})
: super(key: key);
AppointmentFragment({Key? key, required this.onBackButtonTapped}) : super(key: key);
GlobalKey<RefreshIndicatorState> refreshIndicatorKey =
GlobalKey<RefreshIndicatorState>();
GlobalKey<RefreshIndicatorState> refreshIndicatorKey = GlobalKey<RefreshIndicatorState>();
Future<void> _pullRefresh(BuildContext context) async {
await context.read<AppointmentsVM>().getProviderMyAppointments({
"ServiceProviderID": injector
.get<AppState>()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"0"
});
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0"});
}
@override
Widget build(BuildContext context) {
context.read<AppointmentsVM>().setupProviderAppointmentFilter();
date = DateHelper.formatAsDayMonthYear(DateTime.now());
return Scaffold(
appBar: CustomAppBar(
@ -63,8 +48,7 @@ class AppointmentFragment extends StatelessWidget {
body: SizedBox(
width: double.infinity,
height: double.infinity,
child: Consumer(builder: (BuildContext context,
AppointmentsVM appointmentsVM, Widget? child) {
child: Consumer(builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
return RefreshIndicator(
onRefresh: () => _pullRefresh(context),
key: refreshIndicatorKey,
@ -78,25 +62,20 @@ class AppointmentFragment extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 18),
onFilterTapped: (index, selectedFilterId) {
appointmentsVM.applyFilterOnAppointmentsVM(
appointmentStatusEnum:
selectedFilterId.toAppointmentStatusEnum(),
appointmentStatusEnum: selectedFilterId.toAppointmentStatusEnum(),
);
},
),
ListView.separated(
itemBuilder: (context, index) {
return AppointmentSliderWidget(
appointmentListModel:
appointmentsVM.myFilteredAppointments2[index],
appointmentListModel: appointmentsVM.myFilteredAppointments2[index],
isNeedTotalPayment: false,
onTap: () {
navigateWithName(
context,
ProviderAppRoutes.appointmentDetailList,
arguments: appointmentsVM
.myFilteredAppointments2[index]
.customerAppointmentList,
arguments: appointmentsVM.myFilteredAppointments2[index].customerAppointmentList,
);
},
);

@ -28,8 +28,7 @@ class DefineBranchPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
ServiceVM branchVM = context.read<ServiceVM>();
branchVM.getAllCountriesList(branchData,
EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
branchVM.getAllCountriesList(branchData, EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
return Scaffold(
appBar: CustomAppBar(
title: LocaleKeys.defineBranches.tr(),
@ -51,16 +50,10 @@ class DefineBranchPage extends StatelessWidget {
model.country != null
? DropdownField(
(DropValue value) {
model.countryValue =
DropValue(value.id, value.value, "");
model.countryValue = DropValue(value.id, value.value, "");
model.countryCode = value.subValue;
model.countryId = value.id;
model.getAllCities(
branchData,
EasyLocalization.of(context)
?.currentLocale
?.countryCode ??
"SA");
model.getAllCities(branchData, EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
},
isSelectAble: branchData == null ? true : false,
list: model.countryDropList,
@ -75,8 +68,7 @@ class DefineBranchPage extends StatelessWidget {
? Text(LocaleKeys.no_city_available.tr())
: DropdownField(
(DropValue value) {
model.cityValue = DropValue(
value.id, value.value, "");
model.cityValue = DropValue(value.id, value.value, "");
model.setOnlyState(ViewState.busy);
model.cityId = value.id;
model.setState(ViewState.idle);
@ -121,8 +113,7 @@ class DefineBranchPage extends StatelessWidget {
navigateTo(
context,
PickLocationPage(
onPickAddress: (double latitude,
double longitude, String address) {
onPickAddress: (double latitude, double longitude, String address) {
print("tesssgngl " + address);
model.latitude = latitude;
model.longitude = longitude;
@ -137,16 +128,12 @@ class DefineBranchPage extends StatelessWidget {
height: 45,
decoration: BoxDecoration(
color: Colors.transparent,
border: Border.all(
color: MyColors.darkPrimaryColor,
width: 2),
borderRadius: const BorderRadius.all(
Radius.circular(8)),
border: Border.all(color: MyColors.darkPrimaryColor, width: 2),
borderRadius: const BorderRadius.all(Radius.circular(8)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Icon(
Icons.place_outlined,
@ -179,24 +166,14 @@ class DefineBranchPage extends StatelessWidget {
SizedBox(
width: double.infinity,
child: Padding(
padding:
const EdgeInsets.only(left: 20, right: 20, bottom: 20),
padding: const EdgeInsets.only(left: 20, right: 20, bottom: 20),
child: ShowFillButton(
title: branchData != null
? (branchData!.id == null
? LocaleKeys.createBranch.tr()
: LocaleKeys.updateBranch.tr())
: LocaleKeys.createBranch.tr(),
title: branchData != null ? (branchData!.id == null ? LocaleKeys.createBranch.tr() : LocaleKeys.updateBranch.tr()) : LocaleKeys.createBranch.tr(),
onPressed: () async {
if (branchData == null) {
Utils.showLoading(context);
MResponse res = await model.createBranch(
model.branchName,
model.branchDescription,
model.cityId.toString(),
model.address,
model.latitude.toString(),
model.longitude.toString());
MResponse res =
await model.createBranch(model.branchName, model.branchDescription, model.cityId.toString(), model.address, model.latitude.toString(), model.longitude.toString());
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast(LocaleKeys.branch_created.tr());
@ -208,13 +185,7 @@ class DefineBranchPage extends StatelessWidget {
} else {
Utils.showLoading(context);
MResponse res = await model.updateBranch(
branchData!.id ?? 0,
model.branchName,
model.branchDescription,
model.cityId.toString(),
model.address,
model.latitude.toString(),
model.longitude.toString());
branchData!.id ?? 0, model.branchName, model.branchDescription, model.cityId.toString(), model.address, model.latitude.toString(), model.longitude.toString());
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast(LocaleKeys.branch_updated.tr());

Loading…
Cancel
Save