diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index dadaab0..eaa735c 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -2,6 +2,8 @@
+ CADisableMinimumFrameDurationOnPhone
+
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
CFBundleExecutable
@@ -26,6 +28,10 @@
LaunchScreen
UIMainStoryboardFile
Main
+ NSCameraUsageDescription
+ This app requires camera access to capture & upload pictures.
+ NSPhotoLibraryUsageDescription
+ This app requires photo library access to select image as document & upload it.
UISupportedInterfaceOrientations
UIInterfaceOrientationPortrait
@@ -39,9 +45,13 @@
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
+ LSApplicationQueriesSchemes
+
+ sms
+ tel
+ mailto
+
UIViewControllerBasedStatusBarAppearance
- CADisableMinimumFrameDurationOnPhone
-
diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart
index 2f53f78..3385815 100644
--- a/lib/api/api_client.dart
+++ b/lib/api/api_client.dart
@@ -67,7 +67,7 @@ class ApiClient {
factory ApiClient() => _instance;
Future postJsonForObject(FactoryConstructor factoryConstructor, String url, T jsonObject,
- {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async {
+ {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = false}) async {
var _headers = {'Accept': 'application/json'};
if (headers != null && headers.isNotEmpty) {
_headers.addAll(headers);
@@ -76,7 +76,7 @@ class ApiClient {
print("Url:$url");
print("body:$jsonObject");
}
- var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: _headers, retryTimes: retryTimes);
+ var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: _headers, retryTimes: retryTimes, isFormData: isFormData);
// try {
if (!kReleaseMode) {
logger.i("res: " + response.body);
@@ -101,8 +101,10 @@ class ApiClient {
// }
}
- Future postJsonForResponse(String url, T jsonObject, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async {
+ Future postJsonForResponse(String url, T jsonObject,
+ {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = false}) async {
String? requestBody;
+ late Map stringObj;
if (jsonObject != null) {
requestBody = jsonEncode(jsonObject);
if (headers == null) {
@@ -112,7 +114,12 @@ class ApiClient {
}
}
- return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes);
+ if (isFormData) {
+ headers = {'Content-Type': 'application/x-www-form-urlencoded'};
+ stringObj = ((jsonObject ?? {}) as Map).map((key, value) => MapEntry(key, value?.toString() ?? ""));
+ }
+
+ return await _postForResponse(url, isFormData ? stringObj : requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes);
}
Future _postForResponse(String url, requestBody, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async {
diff --git a/lib/api/items_for_sale/items_for_sale_api_client.dart b/lib/api/items_for_sale/items_for_sale_api_client.dart
new file mode 100644
index 0000000..31acbc2
--- /dev/null
+++ b/lib/api/items_for_sale/items_for_sale_api_client.dart
@@ -0,0 +1,123 @@
+import 'dart:convert';
+
+import 'package:mohem_flutter_app/api/api_client.dart';
+import 'package:mohem_flutter_app/app_state/app_state.dart';
+import 'package:mohem_flutter_app/classes/consts.dart';
+import 'package:mohem_flutter_app/models/items_for_sale/get_employee_ads_list.dart';
+import 'package:mohem_flutter_app/models/items_for_sale/get_items_for_sale_list.dart';
+import 'package:mohem_flutter_app/models/items_for_sale/get_regions_list.dart';
+import 'package:mohem_flutter_app/models/items_for_sale/get_sale_categories_list.dart';
+import 'package:mohem_flutter_app/models/items_for_sale/item_review_model.dart';
+
+class ItemsForSaleApiClient {
+ static final ItemsForSaleApiClient _instance = ItemsForSaleApiClient._internal();
+
+ ItemsForSaleApiClient._internal();
+
+ factory ItemsForSaleApiClient() => _instance;
+
+ Future> getSaleCategories() async {
+ List getSaleCategoriesList = [];
+
+ String url = "${ApiConsts.cocRest}Mohemm_ITG_GetItemSaleCategory";
+ Map postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, "ItgPageSize": 10, "ItgPageNo": 1};
+
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((response) {
+ final body = json.decode(response['Mohemm_ITG_ResponseItem']);
+
+ GetSaleCategoriesList getSaleCategoriesListObj = new GetSaleCategoriesList();
+ getSaleCategoriesListObj.categoryID = 0;
+ getSaleCategoriesListObj.title = "All";
+ getSaleCategoriesListObj.titleAr = "الجميع";
+ getSaleCategoriesListObj.isActive = true;
+ getSaleCategoriesListObj.content =
+ '';
+
+ getSaleCategoriesList.add(getSaleCategoriesListObj);
+
+ body['result']['data'].forEach((v) {
+ getSaleCategoriesList.add(new GetSaleCategoriesList.fromJson(v));
+ });
+ return getSaleCategoriesList;
+ }, url, postParams);
+ }
+
+ Future> getItemsForSale(int itgPageNo, int itgCategoryID) async {
+ List getItemsForSaleList = [];
+
+ String url = "${ApiConsts.cocRest}Mohemm_ITG_GetItemForSale";
+ Map postParams = {
+ "EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER,
+ "ItgPageSize": 10,
+ "ItgPageNo": itgPageNo,
+ "ItgStatus": "Approved",
+ "ItgCategoryID": itgCategoryID
+ };
+
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((response) {
+ final body = json.decode(response['Mohemm_ITG_ResponseItem']);
+
+ body['result']['data'].forEach((v) {
+ getItemsForSaleList.add(new GetItemsForSaleList.fromJson(v));
+ });
+ return getItemsForSaleList;
+ }, url, postParams);
+ }
+
+ Future> getEmployeePostedAds() async {
+ List employeePostedAdsList = [];
+
+ String url = "${ApiConsts.cocRest}Mohemm_ITG_GetItemForSaleByEmployee";
+ Map postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, "ItgEmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER};
+
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((response) {
+ final body = json.decode(response['Mohemm_ITG_ResponseItem']);
+
+ body['result']['data'].forEach((v) {
+ employeePostedAdsList.add(new EmployeePostedAds.fromJson(v));
+ });
+ return employeePostedAdsList;
+ }, url, postParams);
+ }
+
+ Future> getRegions() async {
+ String url = "${ApiConsts.cocRest}Mohemm_ITG_GetRegion";
+ List getRegionsList = [];
+ Map postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, "ItgEmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER};
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((response) {
+ final body = json.decode(response['Mohemm_ITG_ResponseItem']);
+
+ body['result']['data'].forEach((v) {
+ getRegionsList.add(new GetRegionsList.fromJson(v));
+ });
+ return getRegionsList;
+ }, url, postParams);
+ }
+
+ Future addItemForSale(ItemReviewModel itemReviewModel, List