user profile 7 api's & fixes

aamir_dev
Aamir.Muhammad 2 years ago
parent 79d1f37b12
commit 3b35288c9d

@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
platform :ios, '13.0'
platform :ios, '14.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@ -40,5 +40,15 @@ end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
'PERMISSION_CAMERA=1',
'PERMISSION_PHOTOS=1',
'PERMISSION_LOCATION=1',
'PERMISSION_LOCATION_WHENINUSE=0',
'PERMISSION_NOTIFICATIONS=1',
]
end
end
end

@ -6,16 +6,12 @@ import 'package:car_provider_app/views/appoinments/update_appointment_page.dart'
import 'package:car_provider_app/views/requests/request_detail_page.dart';
import 'package:car_provider_app/views/requests/send_offer_page.dart';
import 'package:car_provider_app/views/settings/branch/branch_detail_page.dart';
import 'package:car_provider_app/views/settings/branch/branch_list_page.dart';
import 'package:car_provider_app/views/settings/branch/dealer/dealer_user_page.dart';
import 'package:car_provider_app/views/settings/branch/define_branch_page.dart';
import 'package:car_provider_app/views/settings/create_services_page.dart';
import 'package:car_provider_app/views/settings/schedule/add_schedules_page.dart';
import 'package:car_provider_app/views/settings/schedule/schedules_list_page.dart';
import 'package:car_provider_app/views/settings/services/create_item_page.dart';
import 'package:car_provider_app/views/settings/services/create_services_page2.dart';
import 'package:car_provider_app/views/settings/dealership_page.dart';
import 'package:car_provider_app/views/settings/define_license_page.dart';
import 'package:car_provider_app/views/settings/services/create_services_page3.dart';
import 'package:car_provider_app/views/settings/services/duplication/matched_services_page.dart';
import 'package:car_provider_app/views/settings/services/duplication/sheet/approved_branches_list_sheet.dart';
@ -25,7 +21,6 @@ import 'package:car_provider_app/views/subscriptions/my_subscritions_page.dart';
import 'package:car_provider_app/views/subscriptions/subscriptions_page.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
import 'package:flutter/material.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';
@ -76,6 +71,7 @@ class ProviderAppRoutes {
//Bracnh Duplication
static const String matchServices = "/matchServices";
static const String userSettings = "/userSettings";
static final Map<String, WidgetBuilder> routes = {
//Home page
@ -86,7 +82,7 @@ class ProviderAppRoutes {
AppRoutes.createAdView: (context) => const CreateAdView(),
//setting
defineLicense: (context) => DefineLicensePage(),
// defineLicense: (context) => DefineLicensePage(),
dealershipSetting: (context) => DealershipPage(),
// branchList: (context) => BranchListPage(),
defineBranch: (context) => DefineBranchPage(

@ -4,7 +4,7 @@ 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';
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart';
@ -56,10 +56,9 @@ Future<void> main() async {
),
),
ChangeNotifierProvider<UserVM>(
create: (_) => UserVM(userRepo: injector.get<UserRepo>()),
create: (_) => UserVM(userRepo: injector.get<UserRepo>(), commanServices: injector.get<CommonAppServices>()),
),
// ChangeNotifierProvider<BranchVM>(
// create: (_) => BranchVM(
// branchRepo: injector.get<BranchRepo>(),

@ -1,611 +0,0 @@
// import 'dart:convert';
// import 'dart:io';
//
// import 'package:car_provider_app/repositories/branch_repo.dart';
// import 'package:mc_common_app/models/m_response.dart';
//
// import 'package:mc_common_app/models/model/provider_model.dart';
// import 'package:mc_common_app/models/profile/categroy.dart';
// import 'package:mc_common_app/models/profile/document.dart';
// import 'package:mc_common_app/models/profile/services.dart';
// import 'package:mc_common_app/models/services/branch_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/user/cities.dart';
// import 'package:mc_common_app/models/user/country.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/utils/utils.dart';
// import 'package:mc_common_app/view_models/base_view_model.dart';
// import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
// import 'package:file_picker/file_picker.dart';
//
// class ServiceVM extends BaseVM {
// final BranchRepo branchRepo;
// final CommonAppServices commonServices;
// final CommonRepo commonRepo;
//
// ServiceVM({required this.branchRepo, required this.commonServices, required this.commonRepo});
//
// //Documents & Branches
// int selectedBranchStatus = 3;
// Document? document;
// ProviderModel? branchs;
// Country? country;
// Cities? cities;
// DropValue? countryValue;
// DropValue? cityValue;
// List<DropValue> countryDropList = [];
// List<DropValue> citiesDropList = [];
// double latitude = 0, longitude = 0;
// int role = -1, countryId = -1, cityId = -1;
// String countryCode = "", address = "", branchName = "", branchDescription = "";
//
// getServiceProviderDocument(int providerId) async {
// setState(ViewState.busy);
// document = await branchRepo.getServiceProviderDocument(providerId);
// setState(ViewState.idle);
// }
//
// selectFile(int index) async {
// File? file = await commonServices.pickFile(fileType: FileType.custom, allowedExtensions: ['png', 'pdf', 'jpeg']);
//
// if (file != null) {
// int sizeInBytes = file.lengthSync();
// // double sizeInMb = sizeInBytes / (1024 * 1024);
// if (sizeInBytes > 1000) {
// Utils.showToast("File is larger then 1KB");
// } else {
// document!.data![index].document = Utils.convertFileToBase64(file);
// document!.data![index].fileExt = Utils.checkFileExt(file.path);
// document!.data![index].documentUrl = file.path;
// setState(ViewState.idle);
// }
// } else {
// // User canceled the picker
// }
// }
//
// Future<MResponse> updateDocument(List<DocumentData>? data) async {
// return await branchRepo.serviceProviderDocumentsUpdate(data);
// }
//
// //Create new branch
// getBranchAndServices() async {
// setState(ViewState.busy);
// branchs = await branchRepo.getBranchAndServices();
// setState(ViewState.idle);
// }
//
// getAllCountriesList(BranchModel? branchData, String countryCode) async {
// setState(ViewState.busy);
// resetValues();
// country = await commonRepo.getAllCountries();
// country!.data?.forEach((element) {
// if (branchData != null) if (branchData.id != null) {
// if (element.id == branchData.countryID) {
// countryValue = DropValue(element.id ?? 0, countryCode == "SA" ? (element.countryNameN ?? "") : (element.countryName ?? ""), element.countryCode ?? "");
// }
// }
// countryDropList.add(DropValue(element.id ?? 0, countryCode == "SA" ? (element.countryNameN ?? "") : (element.countryName ?? ""), element.countryCode ?? ""));
// });
// if (branchData != null) if (branchData.id != null) getAllCities(branchData, countryCode);
// setState(ViewState.idle);
// }
//
// getAllCities(BranchModel? branchData, String countryCode) async {
// setState(ViewState.busy);
// citiesDropList.clear();
// cities = null;
// cityId = -1;
// cities = await commonRepo.getAllCites(countryId.toString());
// cities!.data?.forEach((element) {
// if (branchData != null && branchData.id != null) {
// if (element.id == branchData.cityId) {
// address = branchData.address!;
// branchName = branchData.branchName!;
// branchDescription = branchData.branchDescription!;
// latitude = double.parse(branchData.latitude ?? "");
// longitude = double.parse(branchData.longitude ?? "");
// countryId = branchData.countryID!;
// cityId = branchData.cityId!;
// cityValue = DropValue(element.id ?? 0, countryCode == "SA" ? (element.cityNameN ?? "") : (element.cityName ?? ""), element.id.toString() ?? "");
// }
// }
// citiesDropList.add(DropValue(element.id ?? 0, countryCode == "SA" ? (element.cityNameN ?? "") : (element.cityName ?? ""), element.id.toString() ?? ""));
// });
// setState(ViewState.idle);
// }
//
// Future<MResponse> createBranch(String branchName, String branchDescription, String cityId, String address, String latitude, String longitude) async {
// return await branchRepo.createBranch(branchName, branchDescription, cityId.toString(), address, latitude.toString(), longitude.toString());
// }
//
// Future<MResponse> updateBranch(int id, String branchName, String branchDescription, String cityId, String address, String latitude, String longitude, {bool isNeedToDelete = true}) async {
// return await branchRepo.updateBranch(id ?? 0, branchName, branchDescription, cityId.toString(), address, latitude.toString(), longitude.toString());
// }
//
// resetValues() {
// countryCode = "";
// address = "";
// branchName = "";
// branchDescription = "";
// latitude = 0;
// longitude = 0;
// role = -1;
// countryId = -1;
// cityId = -1;
// countryDropList.clear();
// countryId = -1;
// cityId = -1;
// cities = null;
// categoryDropList = [];
// servicesDropList = [];
// services = null;
// }
//
// //Create Services
// Services? services;
// List<DropValue> categoryDropList = [];
// List<DropValue> servicesDropList = [];
//
// fetchBranchCategory(String countryCode) async {
// categoryDropList.clear();
// servicesDropList = [];
// services = null;
// setState(ViewState.busy);
// Category? category = await branchRepo.fetchBranchCategory();
// category.data?.forEach((element) {
// categoryDropList.add(DropValue(
// element.id ?? 0,
// ((element.categoryName!.isEmpty
// ? "N/A"
// : countryCode == "SA"
// ? element.categoryNameN
// : element.categoryName) ??
// "N/A"),
// ""));
// });
// setState(ViewState.idle);
// }
//
// fetchServicesByCategoryId(String categoryId) async {
// servicesDropList = [];
// setState(ViewState.busy);
// services = await branchRepo.fetchServicesByCategoryId(categoryId);
//
// for (var element in services!.data!) {
// servicesDropList.add(DropValue(element.id ?? 0, element.description ?? "N/aA", ""));
// }
// setState(ViewState.idle);
// }
//
// Future<MResponse> createService(List<Map<String, dynamic>> map) async {
// return await branchRepo.createService(map);
// }
//
// Future<MResponse> updateServices(List<Map<String, dynamic>> map) async {
// return await branchRepo.updateService(map);
// }
//
// updateSelectedBranchType(int status) {
// selectedBranchStatus = status;
// notifyListeners();
// }
//
// List<ServiceModel>? matchedServices;
// bool isAllSelected = false;
//
// getAllMatchedServices(int oldBranchId, int newBranchId, int categoryId) async {
// matchedServices = null;
// MResponse response = await branchRepo.getMatchedServices(oldBranchId, newBranchId, categoryId);
// matchedServices = [];
// if (response.messageStatus == 1) {
// matchedServices = List<ServiceModel>.from(response.data.map((x) => ServiceModel.fromJson(x)));
// }
// notifyListeners();
// }
//
// selectAllServices(bool value) {
// for (var element in matchedServices!) {
// element.isExpandedOrSelected = value;
// for (var item in element.serviceItems!) {
// item.isUpdateOrSelected = value;
// }
// }
// isAllSelected = value;
// notifyListeners();
// }
//
// updateServiceItem(int serviceIndex, bool value) {
// for (var element in matchedServices![serviceIndex].serviceItems!) {
// element.isUpdateOrSelected = value;
// }
// notifyListeners();
// }
//
// copyItems(int index, List<ItemData> copiedItems) {
// matchedServices![index].serviceItems = copiedItems;
// notifyListeners();
// }
//
// Future<MResponse> duplicateItems(Map<String, dynamic> map) async {
// return await branchRepo.duplicateItems(map);
// }
// }
import 'dart:io';
import 'package:mc_common_app/repositories/branch_repo.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/models/general_models/m_response.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/categroy.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/document.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/services.dart';
import 'package:mc_common_app/models/provider_branches_models/provider_model.dart';
import 'package:mc_common_app/models/services_models/item_model.dart';
import 'package:mc_common_app/models/services_models/service_model.dart';
import 'package:mc_common_app/models/user_models/branch_user.dart';
import 'package:mc_common_app/models/user_models/cities.dart';
import 'package:mc_common_app/models/user_models/country.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/utils/utils.dart';
import 'package:mc_common_app/view_models/base_view_model.dart';
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
class ServiceVM extends BaseVM {
final BranchRepo branchRepo;
final CommonAppServices commonServices;
final CommonRepo commonRepo;
ServiceVM({
required this.branchRepo,
required this.commonServices,
required this.commonRepo,
});
// Documents & Branches
int selectedBranchStatus = 3;
Document? document;
ProviderModel? branches;
Country? country;
Cities? cities;
DropValue? countryValue;
DropValue? cityValue;
List<DropValue> countryDropList = [];
List<DropValue> citiesDropList = [];
double latitude = 0;
double longitude = 0;
int role = -1;
int countryId = -1;
int cityId = -1;
String countryCode = "";
String address = "";
String branchName = "";
String branchDescription = "";
Future<void> getServiceProviderDocument(int providerId) async {
setState(ViewState.busy);
document = await branchRepo.getServiceProviderDocument(providerId);
setState(ViewState.idle);
}
Future<void> selectFile(BuildContext context, int index) async {
final File? file = await commonServices.pickFile(
context,
fileType: FileType.custom,
allowedExtensions: ['png', 'pdf', 'jpeg'],
);
// if (result != null) {
// final File file = File(result.files.single.path!);
// final int sizeInBytes = file.lengthSync();
//
// if (sizeInBytes > 1000) {
// Utils.showToast("File is larger than 1KB");
// } else {
// document!.data![index].document = Utils.convertFileToBase64(file);
// document!.data![index].fileExt = Utils.checkFileExt(file.path);
// document!.data![index].documentUrl = file.path;
// setState(ViewState.idle);
// }
// } else {
// // User canceled the picker
// }
if (file != null) {
int sizeInBytes = file.lengthSync();
// double sizeInMb = sizeInBytes / (1024 * 1024);
if (sizeInBytes > 1000000) {
Utils.showToast("File is larger then 1KB");
} else {
document!.data![index].document = Utils.convertFileToBase64(file);
document!.data![index].fileExt = Utils.checkFileExt(file.path);
document!.data![index].documentUrl = file.path;
setState(ViewState.idle);
}
} else {
// User canceled the picker
}
}
Future<MResponse> updateDocument(List<DocumentData>? data) async {
return await branchRepo.serviceProviderDocumentsUpdate(data);
}
// Create new branch
Future<void> getBranchAndServices() async {
setState(ViewState.busy);
branches = await branchRepo.getBranchAndServices();
setState(ViewState.idle);
}
Future<void> getAllCountriesList(BranchDetailModel? branchData, String countryCode) async {
cities = null;
country = null;
setState(ViewState.busy);
resetValues();
country = await commonRepo.getAllCountries();
country!.data?.forEach((element) {
if (branchData != null && branchData.id != null) {
if (element.id == branchData.countryID) {
countryId = element.id ?? -1;
countryValue = DropValue(
element.id ?? 0,
countryCode == "SA" ? (element.countryNameN ?? "") : (element.countryName ?? ""),
element.countryCode ?? "",
);
}
}
countryDropList.add(
DropValue(
element.id ?? 0,
countryCode == "SA" ? (element.countryNameN ?? "") : (element.countryName ?? ""),
element.countryCode ?? "",
),
);
});
if (branchData != null && branchData.id != null) {
await getAllCities(branchData, countryCode);
}
setState(ViewState.idle);
}
Future<void> getAllCities(BranchDetailModel? branchData, String countryCode) async {
setState(ViewState.busy);
citiesDropList = [];
cities = null;
cityId = -1;
cityValue = null;
cities = await commonRepo.getAllCites(countryId.toString());
cities!.data?.forEach((element) {
if (branchData != null && branchData.id != null) {
if (element.id == branchData.cityId) {
address = branchData.address!;
branchName = branchData.branchName!;
branchDescription = branchData.branchDescription!;
latitude = double.parse(branchData.latitude ?? "");
longitude = double.parse(branchData.longitude ?? "");
countryId = branchData.countryID!;
cityId = branchData.cityId!;
cityValue = DropValue(
element.id ?? 0,
countryCode == "SA" ? (element.cityNameN ?? "") : (element.cityName ?? ""),
element.id.toString() ?? "",
);
}
}
citiesDropList.add(
DropValue(
element.id ?? 0,
countryCode == "SA" ? (element.cityNameN ?? "") : (element.cityName ?? ""),
element.id.toString() ?? "",
),
);
});
setState(ViewState.idle);
}
Future<MResponse> createBranch(String branchName, String branchDescription, String cityId, String address, String latitude, String longitude) async {
return await branchRepo.createBranch(branchName, branchDescription, cityId.toString(), address, latitude.toString(), longitude.toString());
}
Future<MResponse> updateBranch(
int id,
String branchName,
String branchDescription,
String cityId,
String address,
String latitude,
String longitude, {
bool isNeedToDelete = true,
}) async {
return await branchRepo.updateBranch(
id ?? 0,
branchName,
branchDescription,
cityId.toString(),
address,
latitude.toString(),
longitude.toString(),
);
}
void resetValues() {
countryCode = "";
address = "";
branchName = "";
branchDescription = "";
latitude = 0;
longitude = 0;
role = -1;
countryId = -1;
cityId = -1;
countryDropList.clear();
countryId = -1;
cityId = -1;
cities = null;
categoryDropList = [];
servicesDropList = [];
services = null;
}
// Create Services
Services? services;
List<DropValue> categoryDropList = [];
List<DropValue> servicesDropList = [];
Future<void> fetchBranchCategory(String countryCode) async {
categoryDropList.clear();
servicesDropList = [];
services = null;
setOnlyState(ViewState.busy);
Category? category = await branchRepo.fetchBranchCategory();
category.data?.forEach((element) {
categoryDropList.add(
DropValue(
element.id ?? 0,
((element.categoryName!.isEmpty
? "N/A"
: countryCode == "SA"
? element.categoryNameN
: element.categoryName) ??
"N/A"),
"",
),
);
});
setState(ViewState.idle);
}
Future<void> fetchServicesByCategoryId(int categoryId) async {
servicesDropList = [];
setState(ViewState.busy);
services = await branchRepo.fetchServicesByCategoryId(serviceCategoryId: categoryId); // to get all the services
for (var element in services!.data!) {
servicesDropList.add(
DropValue(
element.id ?? 0,
element.description ?? "N/A",
"",
),
);
}
setState(ViewState.idle);
}
Future<void> fetchProviderServices(String branchID, String categoryId) async {
servicesDropList = [];
services = null;
setState(ViewState.busy);
services = await branchRepo.fetchProviderServices(branchID, categoryId);
for (var element in services!.data!) {
servicesDropList.add(
DropValue(
element.id ?? 0,
element.description ?? "N/A",
"",
),
);
}
setState(ViewState.idle);
}
Future<MResponse> createService(List<Map<String, dynamic>> map) async {
return await branchRepo.createService(map);
}
Future<MResponse> updateServices(List<Map<String, dynamic>> map) async {
return await branchRepo.updateService(map);
}
void updateSelectedBranchType(int status) {
selectedBranchStatus = status;
notifyListeners();
}
List<ServiceModel>? matchedServices;
bool isAllSelected = false;
Future<void> getAllMatchedServices(int oldBranchId, int newBranchId, int categoryId) async {
matchedServices = null;
final MResponse response = await branchRepo.getMatchedServices(oldBranchId, newBranchId, categoryId);
matchedServices = [];
if (response.messageStatus == 1) {
matchedServices = List<ServiceModel>.from(response.data.map((x) => ServiceModel.fromJson(x)));
}
notifyListeners();
}
void selectAllServices(bool value) {
for (var element in matchedServices!) {
element.isExpandedOrSelected = value;
for (var item in element.serviceItems!) {
item.isUpdateOrSelected = value;
}
}
isAllSelected = value;
notifyListeners();
}
void updateServiceItem(int serviceIndex, bool value) {
for (var element in matchedServices![serviceIndex].serviceItems!) {
element.isUpdateOrSelected = value;
}
notifyListeners();
}
void copyItems(int index, List<ItemData> copiedItems) {
matchedServices![index].serviceItems = copiedItems;
notifyListeners();
}
Future<MResponse> duplicateItems(Map<String, dynamic> map) async {
return await branchRepo.duplicateItems(map);
}
// Branch Users
List<BranchUser> allProviderDealersList = [];
List<BranchUser> branchUserList = [];
getAllProviderDealers(Map<String, dynamic> map) async {
setState(ViewState.busy);
MResponse response = await branchRepo.getAllProviderDealers(map);
if (response.messageStatus == 1) {
allProviderDealersList = [];
allProviderDealersList = List<BranchUser>.from(response.data.map((x) => BranchUser.fromJson(x)));
}
setState(ViewState.idle);
}
Future<void> getBranchUsers(Map<String, dynamic> map) async {
setState(ViewState.busy);
MResponse response = await branchRepo.getBranchUsers(map);
if (response.messageStatus == 1) {
branchUserList = [];
branchUserList = List<BranchUser>.from(response.data.map((x) => BranchUser.fromJson(x)));
}
setState(ViewState.idle);
}
Future<MResponse> assignDealerToBranch(Map<String, dynamic> map) async {
MResponse response = await branchRepo.assignDealerToBranch(map);
return response;
}
Future<MResponse> removeDealerFromBranch(Map<String, dynamic> map) async {
MResponse response = await branchRepo.removeDealerFromBranch(map);
return response;
}
Future<MResponse> addNewServiceInAppointment(Map<String, dynamic> map) async {
MResponse response = await branchRepo.addNewServicesInAppointment(map);
return response;
}
}

@ -1,6 +1,6 @@
import 'dart:async';
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/appoinments/widget/select_items_sheet.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart';
@ -59,7 +59,7 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: const CustomAppBar(
appBar: CustomAppBar(
title: "Add Service",
),
body: Padding(

@ -15,7 +15,7 @@ class AppointmentDetailListPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: const CustomAppBar(
appBar: CustomAppBar(
title: "Appointment Detail",
),
body: SizedBox(

@ -68,7 +68,7 @@ class _AppointmentPageState extends State<AppointmentPage> {
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
profileImageUrl: MyAssets.carBanner,
//profileImageUrl: MyAssets.carBanner,
title: widget.branch.branchName,
),
body: SizedBox(

@ -3,7 +3,7 @@ import 'dart:async';
import 'package:badges/badges.dart' as b;
import 'package:car_provider_app/view_models/dashboard_view_model.dart';
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/dashboard/fragments/ads_fragment.dart';
import 'package:car_provider_app/views/dashboard/fragments/appoinment_fragment.dart';
import 'package:car_provider_app/views/dashboard/fragments/my_requests_fragment.dart';
@ -15,14 +15,17 @@ import 'package:flutter/material.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/config/routes.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/utils/navigator.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:mc_common_app/view_models/appointments_view_model.dart';
import 'package:mc_common_app/view_models/chat_view_model.dart';
import 'package:mc_common_app/view_models/requests_view_model.dart';
import 'package:mc_common_app/view_models/user_view_model.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/common_widgets/bottom_nav_bar.dart';
import 'package:provider/provider.dart';
@ -83,6 +86,7 @@ class _DashboardPageState extends State<DashboardPage> {
// await chatVM.buildHubConnection(context);
}
@override
Widget build(BuildContext context) {
List<Widget> fragments = [
@ -104,7 +108,7 @@ class _DashboardPageState extends State<DashboardPage> {
),
HomeFragment(
onTap: () {
_scaffoldKey.currentState!.openDrawer();
navigateWithName(context, AppRoutes.settingOptionsLanguages);
},
onRefresh: () async {
_onRefresh();
@ -127,7 +131,7 @@ class _DashboardPageState extends State<DashboardPage> {
return Scaffold(
key: _scaffoldKey,
drawer: CustomDrawer(dashboardVM: dashboardVM),
// drawer: CustomDrawer(dashboardVM: dashboardVM),
// body: Consumer<DashboardVM>(builder: (context, model, _) {
// return fragments[dashboardVM.selectedNavbarBarIndex];
// }),

@ -34,7 +34,7 @@ class AppointmentFragment extends StatelessWidget {
date = DateHelper.formatAsDayMonthYear(DateTime.now());
return Scaffold(
appBar: CustomAppBar(
profileImageUrl: MyAssets.carBanner,
//profileImageUrl: MyAssets.carBanner,
title: "Appointments",
onBackButtonTapped: onBackButtonTapped,
actions: [

@ -5,19 +5,17 @@ import 'package:mc_common_app/classes/app_state.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/models/general_models/m_response.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:mc_common_app/widgets/tab/role_type_tab.dart';
import '../../../generated/locale_keys.g.dart';
import '../../../view_models/service_view_model.dart';
import 'package:provider/provider.dart';
import 'package:flutter_svg/flutter_svg.dart';

@ -1,6 +1,7 @@
import 'package:car_provider_app/views/dashboard/widget/my_service_provider.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/theme/colors.dart';
@ -23,12 +24,7 @@ class HomeFragment extends StatelessWidget {
VoidCallback onTap, onNotificaitonClick;
RefreshCallback onRefresh;
HomeFragment(
{required this.onTap,
required this.onRefresh,
required this.onNotificaitonClick,
Key? key})
: super(key: key);
HomeFragment({required this.onTap, required this.onRefresh, required this.onNotificaitonClick, Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
@ -36,7 +32,6 @@ class HomeFragment extends StatelessWidget {
appBar: CustomAppBar(
isDrawerEnabled: true,
leadingWidth: 100,
profileImageUrl: MyAssets.carBanner,
onTap: onTap,
actions: [
IconButton(
@ -73,8 +68,7 @@ class HomeFragment extends StatelessWidget {
).horPaddingMain(),
// const AppointmentSliderWidget().horPaddingMain(),
CustomerAppointmentSliderWidget(
myUpComingAppointments:
context.read<AppointmentsVM>().myUpComingAppointments,
myUpComingAppointments: context.read<AppointmentsVM>().myUpComingAppointments,
isNeedToShowEmptyMessage: true,
onAppointmentClick: () {
// navigateWithName(
@ -112,8 +106,7 @@ class HomeFragment extends StatelessWidget {
shouldShowAdStatus: true,
isAdsFragment: false,
adsList: adVM.myActiveAdsForHome,
scrollPhysics:
const NeverScrollableScrollPhysics(),
scrollPhysics: const NeverScrollableScrollPhysics(),
),
],
)
@ -133,12 +126,9 @@ class HomeFragment extends StatelessWidget {
).horPaddingMain(),
BuildAdsList(
shouldShowAdStatus: false,
adsList: adVM.exploreAds.length >= 3
? adVM.exploreAds.take(3).toList()
: adVM.exploreAds,
adsList: adVM.exploreAds.length >= 3 ? adVM.exploreAds.take(3).toList() : adVM.exploreAds,
isAdsFragment: false,
scrollPhysics:
const NeverScrollableScrollPhysics(),
scrollPhysics: const NeverScrollableScrollPhysics(),
),
],
)

@ -151,7 +151,7 @@ class _CustomDrawerState extends State<CustomDrawer> {
leading: SvgPicture.asset(MyAssets.nextIcon, color: MyColors.darkPrimaryColor),
title: LocaleKeys.defineLicences.tr().toText(fontSize: 12),
onTap: () {
// AppPermissions.checkStoragePermissions(context);
// AppPermissions.checkStoragePermissions(context);
navigateWithName(context, ProviderAppRoutes.defineLicense);
},
),

@ -1,6 +1,6 @@
import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';

@ -2,7 +2,7 @@ import 'dart:convert';
import 'dart:developer';
import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/services/services_list_page.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';

@ -1,5 +1,5 @@
import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';

@ -1,4 +1,4 @@
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart';

@ -1,4 +1,4 @@
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/branch/dealer/widget/add_phone_num_wiget.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart';

@ -1,7 +1,7 @@
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:mc_common_app/view_models/service_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';

@ -1,4 +1,4 @@
// import 'package:car_provider_app/view_models/service_view_model.dart';
// import 'package:mc_common_app/view_models/service_view_model.dart';
// import 'package:easy_localization/easy_localization.dart';
//
// import 'package:flutter/material.dart';

@ -1,222 +0,0 @@
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/general_models/m_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/enums.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/txt_field.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
class DefineLicensePage extends StatefulWidget {
@override
State<DefineLicensePage> createState() => _DefineLicensePageState();
}
class _DefineLicensePageState extends State<DefineLicensePage> {
late ServiceVM branchVM;
@override
void initState() {
// TODO: implement initState
super.initState();
branchVM = Provider.of<ServiceVM>(context, listen: false);
branchVM.getServiceProviderDocument(AppState().getUser.data!.userInfo!.providerId ?? 0);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
title: LocaleKeys.defineLicences.tr(),
isRemoveBackButton: false,
),
body: Consumer<ServiceVM>(builder: (_, model, __) {
return Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
children: [
// LocaleKeys.defineLicences.tr().toText20(isBold: true),
// 12.height,
// LocaleKeys.defineLicenese.tr().toText14(color: MyColors.lightTextColor),
20.height,
showWidget(model),
],
),
),
),
),
Padding(
padding: const EdgeInsets.all(12.0),
child: ShowFillButton(
title: LocaleKeys.continu.tr(),
maxWidth: double.infinity,
onPressed: () {
if (AppState().getUser.data!.userInfo!.roleId == 5) {
if (validation(model)) {
updateDocument(model);
} else {
Utils.showToast("All document's are mandatory for Dealership Provider");
}
} else {
updateDocument(model);
}
},
),
),
],
);
}),
);
}
validation(ServiceVM model) {
bool valid = true;
model.document!.data!.forEach((element) {
if (element.documentUrl == null) {
valid = false;
}
});
return valid;
}
updateDocument(ServiceVM model) async {
Utils.showLoading(context);
MResponse res = await model.updateDocument(model.document!.data);
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast("Documents uploaded successfully");
} else {
Utils.showToast(res.message ?? "");
}
}
Widget showWidget(ServiceVM model) {
if (model.state == ViewState.idle) {
return model.document!.data!.isEmpty
? Text("LocaleKeys.somethingWrong.tr()")
: ListView.separated(
itemBuilder: (context, index) {
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
model.document?.data![index].documentName ?? "",
style: const TextStyle(
fontSize: 16,
),
),
Padding(
padding: const EdgeInsets.only(left: 20, right: 20, top: 4, bottom: 8),
child: LocaleKeys.enter_licence_detail.tr().toText(fontSize: 14, color: MyColors.lightTextColor, textAlign: TextAlign.center),
),
TxtField(
hint: LocaleKeys.description.tr(),
maxLines: 3,
isBackgroundEnabled: true,
),
if ((model.document?.data![index].documentUrl ?? "").toString().isNotEmpty)
Column(
children: [
8.height,
(model.document?.data![index].documentUrl ?? "").toString().toText(
fontSize: 14,
color: MyColors.lightTextColor,
),
],
),
8.height,
InkWell(
onTap: () async {
int sdkInt = await AppPermissions().getAndroidDeviceInfo();
bool isPermissionsAvailable = await requestPermissionGranted(context, sdkInt > 32 ? Permission.photos : Permission.storage);
if (isPermissionsAvailable) {
model.selectFile(context, index);
}
},
child: Container(
width: double.infinity,
height: 45,
decoration: BoxDecoration(
color: Colors.transparent,
border: Border.all(color: MyColors.greyACColor, width: 2),
borderRadius: const BorderRadius.all(Radius.circular(0)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Icon(
Icons.attach_file,
size: 18,
color: MyColors.darkPrimaryColor,
),
8.width,
Text(
LocaleKeys.attachFile.tr(),
style: const TextStyle(
color: MyColors.darkPrimaryColor,
),
),
const Icon(
Icons.attach_file,
size: 18,
color: Colors.transparent,
),
],
),
),
),
],
);
},
separatorBuilder: (context, index) {
return 20.height;
},
itemCount: model.document!.data!.length,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
);
} else {
return const Center(
child: CircularProgressIndicator(),
);
}
}
// selectFile(int index) async {
// FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['png', 'pdf', 'jpeg']);
//
// if (result != null) {
// File file = File(result.files.single.path ?? "");
// int sizeInBytes = file.lengthSync();
// // double sizeInMb = sizeInBytes / (1024 * 1024);
// if (sizeInBytes > 1000) {
// Utils.showToast("File is larger then 1KB");
// } else {
// document!.data![index].document = Utils.convertFileToBase64(file);
// document!.data![index].fileExt = Utils.checkFileExt(file.path);
// setState(() {
// document!.data![index].documentUrl = result.files.single.path ?? "";
// });
// }
// } else {
// // User canceled the picker
// }
// }
}

@ -1,5 +1,5 @@
import 'package:car_provider_app/view_models/schedule_view_model.dart';
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_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';

@ -1,5 +1,5 @@
// import 'package:car_provider_app/common/widget/checkbox_with_title_desc.dart';
// import 'package:car_provider_app/view_models/service_view_model.dart';
// import 'package:mc_common_app/view_models/service_view_model.dart';
// import 'package:easy_localization/easy_localization.dart';
//
// import 'package:flutter/material.dart';

@ -1,7 +1,7 @@
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:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/services/services_list_page.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';

@ -1,6 +1,6 @@
import 'dart:convert';
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/services/duplication/sheet/approved_branches_list_sheet.dart';
import 'package:car_provider_app/views/settings/services/duplication/sheet/items_selection_sheet.dart';
import 'package:flutter/material.dart';

@ -1,5 +1,5 @@
import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';

Loading…
Cancel
Save