Updated the MOdels

pull/3/head
FaizHashmiCS22 3 years ago
parent 83287f3b37
commit 436befd111

@ -4,7 +4,7 @@ import 'package:mc_common_app/config/dependencies.dart';
class CustomerDependencies {
static void addDependencies() {
AppDependencies.addDependencies();
injector.registerSingleton<BranchRepo>(() => BranchRepoImp());
injector.registerSingleton<ProviderRepo>(() => ProviderRepoImp());
}
}

@ -58,7 +58,6 @@ Future<void> main() async {
create: (_) => AppointmentsVM(
providerRepo: injector.get<ProviderRepo>(),
commonServices: injector.get<CommonAppServices>(),
branchRepo: injector.get<BranchRepo>(),
commonRepo: injector.get<CommonRepo>(),
),
),

@ -1,6 +1,5 @@
import 'dart:async';
import 'package:flutter/cupertino.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';
@ -13,7 +12,7 @@ import 'package:mc_common_app/models/services/item_model.dart';
abstract class ProviderRepo {
Future<List<BranchDetailModel>> getAllNearBranchAndServices();
Future<ItemModel> getServiceItems(int serviceId);
Future<List<ServiceItemModel>> getServiceItems(int serviceId);
Future<ProviderProfileModel> getBranchAndServices(int providerId);
}
@ -30,13 +29,19 @@ class ProviderRepoImp implements ProviderRepo {
}
@override
Future<ItemModel> getServiceItems(int serviceId) async {
Future<List<ServiceItemModel>> getServiceItems(int serviceId) async {
var queryParameters = {
"ServiceProviderServiceID": serviceId.toString(),
};
String? token = appState.getUser.data?.accessToken;
debugPrint(token);
return await apiClient.getJsonForObject((json) => ItemModel.fromJson(json), ApiConsts.getServiceItems, queryParameters: queryParameters, token: AppState().getUser.data!.accessToken ?? "");
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getServiceItems,
token: appState.getUser.data!.accessToken,
queryParameters: queryParameters,
);
List<ServiceItemModel> serviceItems = List.generate(adsGenericModel.data.length, (index) => ServiceItemModel.fromJson(adsGenericModel.data[index]));
return serviceItems;
}
@override

@ -1,15 +1,16 @@
import 'package:car_customer_app/repositories/provider_repo.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/models/provider_branches_models/provider_profile_model.dart';
import 'package:mc_common_app/models/provider_category_model.dart';
import 'package:mc_common_app/models/provider_service_model.dart';
import 'package:mc_common_app/models/services/item_model.dart';
import 'package:mc_common_app/models/services/service_model.dart';
import 'package:mc_common_app/models/widgets_models.dart';
import 'package:mc_common_app/repositories/common_repo.dart';
import 'package:mc_common_app/services/common_services.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/view_models/base_view_model.dart';
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
class AppointmentsVM extends BaseVM {
final CommonRepo commonRepo;
@ -25,7 +26,7 @@ class AppointmentsVM extends BaseVM {
bool isFetchingServices = false;
List<ProviderCategoryModel> providerCategories = [];
List<DropValue> branchCategories = [];
bool isHomeTapped = false;
@ -41,37 +42,31 @@ class AppointmentsVM extends BaseVM {
notifyListeners();
}
SelectionModel providerCategoryId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
SelectionModel branchSelectedCategoryId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
void updateProviderCategoryId(SelectionModel id) async {
providerCategoryId = id;
branchSelectedCategoryId = id;
await getProviderServices(id.selectedId);
notifyListeners();
}
List<ProviderServiceModel> providerServices = [];
List<ServiceModel> branchServices = [];
SelectionModel providerServiceId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
SelectionModel branchSelectedServiceId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
void updateProviderServiceId(SelectionModel id) async {
providerServiceId = id;
notifyListeners();
}
void getProviderCategories() async {
notifyListeners();
providerCategories = await commonRepo.getProviderServiceCategories();
void updateBranchServiceId(SelectionModel id) async {
branchSelectedServiceId = id;
notifyListeners();
}
getProviderServices(int categoryId) async {
providerServiceId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
branchSelectedServiceId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
isHomeTapped = false;
pickedHomeLocation = "";
if (categoryId != -1) {
isFetchingServices = true;
notifyListeners();
providerServices = await commonRepo.getProviderServices(categoryId: categoryId);
// branchServices = await commonRepo.getProviderServices(categoryId: categoryId);
isFetchingServices = false;
notifyListeners();
@ -108,7 +103,7 @@ class AppointmentsVM extends BaseVM {
List<FilterListModel> providersFilterOptions = [];
List<BranchDetailModel> nearbyBranches = [];
ItemModel? serviceItems;
List<ServiceItemModel> serviceItems = [];
ProviderProfileModel? providerProfileModel;
populateProvidersFilterList() {
@ -142,8 +137,8 @@ class AppointmentsVM extends BaseVM {
setState(ViewState.idle);
}
Future<ItemModel?> getServiceItems(int serviceId) async {
serviceItems = null;
Future<List<ServiceItemModel>> getServiceItems(int serviceId) async {
serviceItems.clear();
serviceItems = await providerRepo.getServiceItems(serviceId);
setState(ViewState.idle);
return serviceItems;
@ -154,4 +149,64 @@ class AppointmentsVM extends BaseVM {
providerProfileModel = await providerRepo.getBranchAndServices(providerId);
setState(ViewState.idle);
}
String pickHomeLocationError = "";
SelectionModel branchServiceId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
bool isCategoryAlreadyPresent(int id) {
final contain = branchCategories.where((element) => element.id == id);
if (contain.isEmpty) {
return false;
}
return true;
}
void getBranchCategories() async {
for (var value in branchServices) {
if (!isCategoryAlreadyPresent(value.categoryId!)) {
branchCategories.add(DropValue(value.categoryId!, value.categoryName!, ""));
}
}
notifyListeners();
}
getBranchServices(int categoryId) async {
branchServiceId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
isHomeTapped = false;
pickedHomeLocation = "";
pickHomeLocationError = "";
if (categoryId != -1) {
isFetchingServices = true;
notifyListeners();
branchServices = getFilteredBranchServices(categoryId: categoryId, branchId: 6);
isFetchingServices = false;
notifyListeners();
}
}
List<ServiceModel> getFilteredBranchServices({required int branchId, required int categoryId}) {
// List<BranchServices> filteredServices = nearbyBranchesList.where((element) => element)
return [];
}
void updatePickHomeLocationError(String value) {
pickHomeLocationError = value;
notifyListeners();
}
bool isServiceSelectionValidated() {
if (branchServiceId.selectedId == -1) {
return false;
}
if (isHomeTapped) {
if (pickedHomeLocation == "") {
updatePickHomeLocationError(GlobalConsts.homeLocationEmptyError);
return false;
}
}
return true;
}
}

@ -16,8 +16,8 @@ import 'package:mc_common_app/widgets/common_widgets/time_slots.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
class AppointmentServicesListView extends StatelessWidget {
AppointmentServicesListView({Key? key}) : super(key: key);
class BookAppointmentServicesView extends StatelessWidget {
BookAppointmentServicesView({Key? key}) : super(key: key);
void openTheAddServiceBottomSheet(BuildContext context, AppointmentsVM appointmentsVM) {
showModalBottomSheet(

@ -41,18 +41,12 @@ class AppointmentServicePickBottomSheet extends StatelessWidget {
children: [
Builder(
builder: (context) {
List<DropValue> serviceCategories = [];
for (var element in appointmentsVM.branchCategories) {
if (!element.isSelected!) {
serviceCategories.add(DropValue(element.id?.toInt() ?? 0, element.categoryName ?? "", ""));
}
}
return DropdownField(
(DropValue value) => appointmentsVM.updateProviderCategoryId(SelectionModel(selectedId: value.id, selectedOption: value.value, itemPrice: value.subValue)),
list: serviceCategories,
(DropValue value) => appointmentsVM.updateProviderCategoryId(SelectionModel(selectedId: value.id, selectedOption: value.value, itemPrice: value.subValue)),
list: appointmentsVM.branchCategories,
hint: "Select Category",
dropdownValue: appointmentsVM.providerCategoryId.selectedId != -1
? DropValue(appointmentsVM.providerCategoryId.selectedId, appointmentsVM.providerCategoryId.selectedOption, "")
dropdownValue: appointmentsVM.branchSelectedCategoryId.selectedId != -1
? DropValue(appointmentsVM.branchSelectedCategoryId.selectedId, appointmentsVM.branchSelectedCategoryId.selectedOption, "")
: null,
);
},
@ -68,17 +62,14 @@ class AppointmentServicePickBottomSheet extends StatelessWidget {
builder: (context) {
List<DropValue> serviceCategories = [];
for (var element in appointmentsVM.branchServices) {
if (!element.isSelected!) {
serviceCategories.add(DropValue(element.providerBranchServiceID ?? 0, element.providerBranchServiceID.toString(), ""));
}
serviceCategories.add(DropValue(element.serviceProviderServiceId ?? 0, element.serviceProviderServiceId.toString(), ""));
}
return DropdownField(
(DropValue value) => appointmentsVM.updateProviderServiceId(SelectionModel(selectedId: value.id, selectedOption: value.value, itemPrice: value.subValue)),
(DropValue value) => appointmentsVM.updateBranchServiceId(SelectionModel(selectedId: value.id, selectedOption: value.value, itemPrice: value.subValue)),
list: serviceCategories,
hint: "Select Services",
dropdownValue: appointmentsVM.branchServiceId.selectedId != -1
? DropValue(appointmentsVM.branchServiceId.selectedId, appointmentsVM.branchServiceId.selectedOption, "")
: null,
dropdownValue:
appointmentsVM.branchServiceId.selectedId != -1 ? DropValue(appointmentsVM.branchServiceId.selectedId, appointmentsVM.branchServiceId.selectedOption, "") : null,
);
},
),

@ -1,60 +1,60 @@
import 'package:car_customer_app/view_models/appointments_view_model.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/widgets/common_widgets/categories_list.dart';
import 'package:mc_common_app/widgets/common_widgets/provider_details_card.dart';
import 'package:provider/provider.dart';
class ProvidersFragment extends StatelessWidget {
const ProvidersFragment({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
color: MyColors.backgroundColor,
width: double.infinity,
height: double.infinity,
child: Consumer(
builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
return Column(
children: [
16.height,
FiltersList(
filterList: appointmentsVM.providersFilterOptions,
onFilterTapped: (index, selectedFilterId) => appointmentsVM.applyFilterOnProviders(index: index),
),
16.height,
Expanded(
child: Container(
child: ListView.builder(
shrinkWrap: true,
itemCount: 30,
itemBuilder: (BuildContext context, int index) {
return ProviderDetailsCard(
onCardTapped: () {
if (context.read<AppointmentsVM>().providerCategories.isEmpty) {
context.read<AppointmentsVM>().getProviderCategories();
}
navigateWithName(context, AppRoutes.bookAppointmenServicesView);
},
providerImageUrl: MyAssets.bnCar,
title: "",
providerLocation: " 3km",
providerName: "Al Ahmed Maintenance",
providerRatings: "4.9",
);
},
),
),
),
],
);
},
),
);
}
}
// import 'package:car_customer_app/view_models/appointments_view_model.dart';
// import 'package:flutter/material.dart';
// import 'package:mc_common_app/classes/consts.dart';
// import 'package:mc_common_app/config/routes.dart';
// import 'package:mc_common_app/extensions/int_extensions.dart';
// import 'package:mc_common_app/theme/colors.dart';
// import 'package:mc_common_app/utils/navigator.dart';
// import 'package:mc_common_app/widgets/common_widgets/categories_list.dart';
// import 'package:mc_common_app/widgets/common_widgets/provider_details_card.dart';
// import 'package:provider/provider.dart';
//
// class ProvidersFragment extends StatelessWidget {
// const ProvidersFragment({Key? key}) : super(key: key);
//
// @override
// Widget build(BuildContext context) {
// return Container(
// color: MyColors.backgroundColor,
// width: double.infinity,
// height: double.infinity,
// child: Consumer(
// builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
// return Column(
// children: [
// 16.height,
// FiltersList(
// filterList: appointmentsVM.providersFilterOptions,
// onFilterTapped: (index, selectedFilterId) => appointmentsVM.applyFilterOnProviders(index: index),
// ),
// 16.height,
// Expanded(
// child: Container(
// child: ListView.builder(
// shrinkWrap: true,
// itemCount: 30,
// itemBuilder: (BuildContext context, int index) {
// return ProviderDetailsCard(
// onCardTapped: () {
// if (context.read<AppointmentsVM>().branchCategories.isEmpty) {
// context.read<AppointmentsVM>().getBranchCategories();
// }
// navigateWithName(context, AppRoutes.bookAppointmenServicesView);
// },
// providerImageUrl: MyAssets.bnCar,
// title: "",
// providerLocation: " 3km",
// providerName: "Al Ahmed Maintenance",
// providerRatings: "4.9",
// );
// },
// ),
// ),
// ),
// ],
// );
// },
// ),
// );
// }
// }

@ -2,6 +2,7 @@ import 'package:car_customer_app/view_models/appointments_view_model.dart';
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/models/services/item_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/widgets/empty_widget.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
@ -28,66 +29,65 @@ class _ItemsListSheetState extends State<ItemsListSheet> {
return SizedBox(
height: MediaQuery.of(context).size.height / 1.2,
child: Consumer<AppointmentsVM>(
builder: (context, model, _) {
return model.serviceItems == null
? const Center(child: CircularProgressIndicator())
: model.serviceItems!.data!.isEmpty
? const EmptyWidget()
: ListView.separated(
itemBuilder: (BuildContext context, int index) {
return SizedBox(
width: double.infinity,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
builder: (context, appointmentsVM, _) {
return appointmentsVM.serviceItems.isEmpty
? const EmptyWidget()
: ListView.separated(
itemCount: appointmentsVM.serviceItems.length,
itemBuilder: (BuildContext context, int index) {
ServiceItemModel serviceItemModel = appointmentsVM.serviceItems[index];
return SizedBox(
width: double.infinity,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
serviceItemModel.name.toString().toText(fontSize: 16, isBold: true),
4.height,
showItem("Available for appointment:", (serviceItemModel.isAllowAppointment ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("Allowing Workshop service:", (serviceItemModel.isAppointmentCompanyLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("Allowing home service:", (serviceItemModel.isAppointmentCustomerLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
12.height,
"Service Amount".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
model.serviceItems!.data![index].name.toString().toText(fontSize: 16, isBold: true),
4.height,
showItem("Available for appointment:", (model.serviceItems!.data![index].isAllowAppointment ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("Allowing Workshop service:", (model.serviceItems!.data![index].isAppointmentCompanyLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
showItem("Allowing home service:", (model.serviceItems!.data![index].isAppointmentCustomerLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
12.height,
"Service Amount".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
model.serviceItems!.data![index].price!.toText(fontSize: 22, isBold: true),
2.width,
Padding(
padding: const EdgeInsets.only(bottom: 4),
child: "SAR".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
),
],
serviceItemModel.price!.toText(fontSize: 22, isBold: true),
2.width,
Padding(
padding: const EdgeInsets.only(bottom: 4),
child: "SAR".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
),
],
),
),
// Padding(
// padding: const EdgeInsets.all(4.0),
// child: SvgPicture.asset(
// MyAssets.icEdit,
// width: 16,
// height: 16,
// ),
// )
],
],
),
),
).toWhiteContainer(
width: double.infinity,
allPading: 12,
);
},
separatorBuilder: (BuildContext context, int index) {
return 12.height;
},
padding: const EdgeInsets.all(20),
itemCount: model.serviceItems!.data!.length,
// Padding(
// padding: const EdgeInsets.all(4.0),
// child: SvgPicture.asset(
// MyAssets.icEdit,
// width: 16,
// height: 16,
// ),
// )
],
),
).toWhiteContainer(
width: double.infinity,
allPading: 12,
);
},
separatorBuilder: (BuildContext context, int index) {
return 12.height;
},
padding: const EdgeInsets.all(20),
);
},
),
);

Loading…
Cancel
Save