Merge branch 'pharmacy' of https://gitlab.com/Cloud_Solution/diplomatic-quarter into fatima_merge

 Conflicts:
	android/app/build.gradle
	lib/config/config.dart
	lib/pages/pharmacy/profile/profile.dart
	lib/widgets/pharmacy/product_tile.dart
merge-requests/228/head
Mohammad Aljammal 4 years ago
commit 16d1f667d4

@ -78,6 +78,7 @@ dependencies {
// exclude group: 'com.google.protobuf',module: 'protobuf-lite' // exclude group: 'com.google.protobuf',module: 'protobuf-lite'
// }) // })
implementation 'pub.devrel:easypermissions:0.4.0' implementation 'pub.devrel:easypermissions:0.4.0'
// implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android' implementation 'com.google.guava:guava:27.0.1-android'
// Dependency on local binaries // Dependency on local binaries
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])

@ -1,5 +1,4 @@
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true android.enableR8=true
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
org.gradle.jvmargs=-Xmx4608m

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

@ -6,7 +6,7 @@ import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
const MAX_SMALL_SCREEN = 660; const MAX_SMALL_SCREEN = 660;
const BASE_URL = 'https://uat.hmgwebservices.com/'; const BASE_URL = 'https://hmgwebservices.com/';
//const BASE_PHARMACY_URL = 'http://swd-pharapp-01:7200/api/'; //const BASE_PHARMACY_URL = 'http://swd-pharapp-01:7200/api/';
const BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; const BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/';
const PHARMACY_BASE_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; const PHARMACY_BASE_URL = 'https://uat.hmgwebservices.com/epharmacy/api/';
@ -245,7 +245,7 @@ const UPDATE_HEALTH_TERMS =
const CHANNEL = 3; const CHANNEL = 3;
const GENERAL_ID = 'Cs2020@2016\$2958'; const GENERAL_ID = 'Cs2020@2016\$2958';
const IP_ADDRESS = '10.20.10.20'; const IP_ADDRESS = '10.20.10.20';
const VERSION_ID = 5.6; const VERSION_ID = 6.1;
const SETUP_ID = '91877'; const SETUP_ID = '91877';
const LANGUAGE = 2; const LANGUAGE = 2;
const PATIENT_OUT_SA = 0; const PATIENT_OUT_SA = 0;
@ -359,6 +359,7 @@ const GET_E_REFERRALS = "Services/Patients.svc/REST/GetEReferrals";
// pharmacy // pharmacy
const PHARMACY_VERIFY_CUSTOMER = "epharmacy/api/VerifyCustomer"; const PHARMACY_VERIFY_CUSTOMER = "epharmacy/api/VerifyCustomer";
const PHARMACY_GET_COUNTRY = "epharmacy/api/countries";
const PHARMACY_CREATE_CUSTOMER = "epharmacy/api/CreateCustomer"; const PHARMACY_CREATE_CUSTOMER = "epharmacy/api/CreateCustomer";
const GET_PHARMACY_BANNER = "epharmacy/api/promotionbanners"; const GET_PHARMACY_BANNER = "epharmacy/api/promotionbanners";
const GET_PHARMACY_TOP_MANUFACTURER = "epharmacy/api/topmanufacturer"; const GET_PHARMACY_TOP_MANUFACTURER = "epharmacy/api/topmanufacturer";
@ -367,6 +368,9 @@ const GET_PHARMACY_PRODUCTs_BY_IDS = "epharmacy/api/productsbyids/";
const GET_CUSTOMERS_ADDRESSES = "epharmacy/api/Customers/"; const GET_CUSTOMERS_ADDRESSES = "epharmacy/api/Customers/";
const GET_ORDER = "orders?"; const GET_ORDER = "orders?";
const GET_ORDER_DETAILS = "epharmacy/api/orders/"; const GET_ORDER_DETAILS = "epharmacy/api/orders/";
const ADD_CUSTOMER_ADDRESS = "epharmacy/api/addcustomeraddress";
const EDIT_CUSTOMER_ADDRESS = "epharmacy/api/editcustomeraddress";
const DELETE_CUSTOMER_ADDRESS = "epharmacy/api/deletecustomeraddress";
const GET_ADDRESS = "Customers/"; const GET_ADDRESS = "Customers/";
const GET_Cancel_ORDER = "cancelorder/"; const GET_Cancel_ORDER = "cancelorder/";
const WRITE_REVIEW = "Content-Type" + "text/plain; charset=utf-8"; const WRITE_REVIEW = "Content-Type" + "text/plain; charset=utf-8";
@ -415,11 +419,14 @@ const PHARMACY_MAKE_REVIEW = 'epharmacy/api/insertreviews';
//Pharmacy wishlist //Pharmacy wishlist
const GET_WISHLIST = "shopping_cart_items/"; const GET_WISHLIST = "shopping_cart_items/";
const DELETE_WISHLIST = "delete_shopping_cart_item_by_product?customer_id=";
const GET_REVIEW = "customerreviews/"; const GET_REVIEW = "customerreviews/";
const GET_BRANDS = "manufacturer"; const GET_BRANDS = "manufacturer";
const GET_TOP_BRANDS = "topmanufacturer?page=1&limit=8"; const GET_TOP_BRANDS = "topmanufacturer?page=1&limit=8";
const GET_PRODUCT_DETAIL = "products/"; const GET_PRODUCT_DETAIL = "products/";
const GET_LOCATION = "Services/Patients.svc/REST/GetPharmcyListBySKU"; const GET_LOCATION = "Services/Patients.svc/REST/GetPharmcyListBySKU";
const GET_SPECIFICATION = "productspecification/";
const GET_BRAND_ITEMS = "products?ManufacturerId=";
// External API // External API
const ADD_ADDRESS_INFO = const ADD_ADDRESS_INFO =

@ -678,9 +678,16 @@ const Map localizedValues = {
"shippedMethod": {"en": "SHIP BY:", "ar": " الشحن بواسطة:"}, "shippedMethod": {"en": "SHIP BY:", "ar": " الشحن بواسطة:"},
"orderDetail": {"en": "Order Details", "ar": " تفاصيل الطلب"}, "orderDetail": {"en": "Order Details", "ar": " تفاصيل الطلب"},
"orderSummary": {"en": "Order Summary", "ar": " تفاصيل المنتج"}, "orderSummary": {"en": "Order Summary", "ar": " تفاصيل المنتج"},
"subtotal": {"en": "Subtotal", "ar": " المجموع"}, "subtotal": {"en": "Subtotal", "ar": " المجموع الفرعي"},
"shipping": {"en": "Shipping", "ar": " الشحن"}, "shipping": {"en": "Shipping", "ar": " الشحن"},
"shipBy": {"en": "SHIP BY:", "ar": "الشحن عن طريق:"},
"lakumPoints": {"en": "Lakum Points", "ar": "نقاط لكم"},
"use": {"en": "USE", "ar": "استخدم"},
"proceedPay": {"en": "PROCEED TO PAY", "ar": "المتابعة للدفع"},
"vat": {"en": "VAT (15%)", "ar": "(15%) القيمة المضافة"}, "vat": {"en": "VAT (15%)", "ar": "(15%) القيمة المضافة"},
"inclusiveVat": {"en": "(inclusive VAT)", "ar": "(شامل الضريبة)"},
"items": {"en": "item(s)", "ar": "عنصر"},
"checkOut": {"en": "CHECK OUT", "ar": "الدفع"},
"sar": {"en": "SAR", "ar": " ر.س "}, "sar": {"en": "SAR", "ar": " ر.س "},
"payOnline": {"en": "PAY ONLINE", "ar": "اتمام عملية الدفع "}, "payOnline": {"en": "PAY ONLINE", "ar": "اتمام عملية الدفع "},
"cancelOrder": {"en": "CANCEL ORDER", "ar": "الغاء الطلب "}, "cancelOrder": {"en": "CANCEL ORDER", "ar": "الغاء الطلب "},
@ -1163,4 +1170,55 @@ const Map localizedValues = {
"en": "Select Home Health Care Services", "en": "Select Home Health Care Services",
"ar": " حدد خدمات الرعاية الصحية المنزلية" "ar": " حدد خدمات الرعاية الصحية المنزلية"
}, },
"topBrands":{
"en":"Top Brands",
"ar":"اعلى العلامات التجارية"
},
"notifyMe":{
"en":"notify me",
"ar":"اعلمني"
},
"specification":{
"en":"Specification",
"ar":"تخصيص"
},
"details":{
"en":"Details",
"ar":"تفاصيل"
},
"availability":{
"en":"Availability",
"ar":"التوفر"
},
"quantity":{
"en":"Quantity",
"ar":"التوفر"
},
"quantitySize":{
"en":"Quantity",
"ar":"كميه"
},
"addToCart":{
"en":"add to cart",
"ar":"إضفة للسلة"
},
"buyNow":{
"en":"buy now",
"ar":"إشتري الان"
},
"quantityShortcut":{
"en":"QTY",
"ar":"كمية"
},
"pharmacyServiceTermsCondition": {
"en": "I agree with the terms of service and I adhere to them unconditionally",
"ar": " أوافق على شروط الخدمة وألتزم بها دون قيد أو شرط"
},
}; };

@ -21,3 +21,4 @@ const THEME_VALUE = 'is_vibration';
const MAIN_USER = 'main-user'; const MAIN_USER = 'main-user';
const PHARMACY_LAST_VISITED_PRODUCTS = 'last-visited'; const PHARMACY_LAST_VISITED_PRODUCTS = 'last-visited';
const PHARMACY_CUSTOMER_ID = 'costumer-id'; const PHARMACY_CUSTOMER_ID = 'costumer-id';
const PHARMACY_SELECTED_ADDRESS = 'selected-address';

@ -0,0 +1,32 @@
class CountryData {
int id;
String name;
String namen;
String twoLetterIsoCode;
String threeLetterIsoCode;
CountryData(
{this.id,
this.name,
this.namen,
this.twoLetterIsoCode,
this.threeLetterIsoCode});
CountryData.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
namen = json['namen'];
twoLetterIsoCode = json['two_letter_iso_code'];
threeLetterIsoCode = json['three_letter_iso_code'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['namen'] = this.namen;
data['two_letter_iso_code'] = this.twoLetterIsoCode;
data['three_letter_iso_code'] = this.threeLetterIsoCode;
return data;
}
}

@ -27,9 +27,9 @@ class LakumInquiryInformationObjVersion {
int transferPoints; int transferPoints;
List<PointsAmountPerYear> transferPointsAmountPerYear; List<PointsAmountPerYear> transferPointsAmountPerYear;
List<PointsDetails> transferPointsDetails; List<PointsDetails> transferPointsDetails;
int waitingPoints; dynamic waitingPoints;
int loyalityAmount; dynamic loyalityAmount;
int loyalityPoints; dynamic loyalityPoints;
int purchaseRate; int purchaseRate;
LakumInquiryInformationObjVersion( LakumInquiryInformationObjVersion(

@ -1,24 +1,117 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/Country.dart';
import 'package:diplomaticquarterapp/services/pharmacy_services/pharmacyAddress_service.dart'; import 'package:diplomaticquarterapp/services/pharmacy_services/pharmacyAddress_service.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyAddressesModel.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyAddressesModel.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:google_maps_place_picker/google_maps_place_picker.dart';
import '../../../locator.dart'; import '../../../locator.dart';
import '../base_view_model.dart'; import '../base_view_model.dart';
class PharmacyAddressesViewModel extends BaseViewModel { class PharmacyAddressesViewModel extends BaseViewModel {
PharmacyAddressService _pharmacyAddressService = locator<PharmacyAddressService>(); PharmacyAddressService _pharmacyAddressService =
List<PharmacyAddressesModel> get address => _pharmacyAddressService.address; locator<PharmacyAddressService>();
List<Addresses> get addresses => _pharmacyAddressService.addresses;
int get selectedAddressIndex => _pharmacyAddressService.selectedAddressIndex;
CountryData get country => _pharmacyAddressService.country;
setSelectedAddressIndex(int index) {
_pharmacyAddressService.selectedAddressIndex = index;
}
Future getAddress(address) async { Future getAddressesList() async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _pharmacyAddressService.getAddress(address); await _pharmacyAddressService.getAddresses();
if (_pharmacyAddressService.hasError) { if (_pharmacyAddressService.hasError) {
error = _pharmacyAddressService.error; error = _pharmacyAddressService.error;
setState(ViewState.Error); setState(ViewState.Error);
} else { } else {
print(address.length); setState(ViewState.Idle);
} }
} }
} /* Future getCountries(String countryName) async {
setState(ViewState.Busy);
await _pharmacyAddressService.getCountries(countryName);
if (_pharmacyAddressService.hasError) {
error = _pharmacyAddressService.error;
// setState(ViewState.Error);
} else {
// setState(ViewState.Idle);
}
}*/
Future addEditAddress(PickResult value, Addresses editedAddress) async {
setState(ViewState.Busy);
Addresses sendingAddress;
if (editedAddress == null) {
sendingAddress = Addresses();
sendingAddress.id = "0";
sendingAddress.firstName = user.firstName;
sendingAddress.lastName = user.lastName;
sendingAddress.email = user.emailAddress;
sendingAddress.company = null;
} else {
sendingAddress = editedAddress;
}
value.addressComponents.forEach((element) {
if (element.types.contains("country")) {
sendingAddress.country = element.longName;
}
if (element.types.contains("administrative_area_level_1")) {
sendingAddress.city = element.longName;
}
if (element.types.contains("postal_code")) {
sendingAddress.zipPostalCode = element.longName;
}
if (element.types.contains("administrative_area_level_2")) {
sendingAddress.province = element.longName;
}
});
sendingAddress.latLong = value.geometry.location.toString();
await _pharmacyAddressService.getCountries(sendingAddress.country);
sendingAddress.countryId = country.id;
sendingAddress.stateProvinceId = null;
sendingAddress.address1 = value.formattedAddress;
sendingAddress.address2 = "";
sendingAddress.phoneNumber = user.mobileNumber;
sendingAddress.faxNumber = user.faxNumber;
sendingAddress.customerAttributes = "";
sendingAddress.createdOnUtc = DateTime.now().toString();
if (editedAddress == null) {
await _pharmacyAddressService.addCustomerAddress(sendingAddress);
} else {
await _pharmacyAddressService.editCustomerAddress(sendingAddress);
}
if (_pharmacyAddressService.hasError) {
error = _pharmacyAddressService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
Future deleteAddresses(Addresses sendingAddress) async {
setState(ViewState.Busy);
await _pharmacyAddressService.deleteCustomerAddress(sendingAddress);
if (_pharmacyAddressService.hasError) {
error = _pharmacyAddressService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
Future saveSelectedAddressLocally(Addresses selectedAddress) async {
await sharedPref.setObject(PHARMACY_SELECTED_ADDRESS, selectedAddress);
}
}

@ -14,6 +14,9 @@ class BrandsViewModel extends BaseViewModel{
BrandsService _topBrandsService = locator<BrandsService>(); BrandsService _topBrandsService = locator<BrandsService>();
List<TopBrand> get topBrandsListList => _topBrandsService.topBrandsList; List<TopBrand> get topBrandsListList => _topBrandsService.topBrandsList;
List<Brand> get searchList =>
_brandsService.searchList;
bool hasError = false; bool hasError = false;
@ -38,4 +41,17 @@ class BrandsViewModel extends BaseViewModel{
} else } else
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future searchProducts({String productName}) async {
hasError = false;
_brandsService.clearSearchList();
setState(ViewState.Busy);
await _brandsService.searchProducts(productName: productName);
if (_brandsService.hasError) {
error = _brandsService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
} }

@ -1,26 +1,36 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import 'package:diplomaticquarterapp/models/pharmacy/Wishlist.dart';
import 'package:diplomaticquarterapp/models/pharmacy/locationModel.dart'; import 'package:diplomaticquarterapp/models/pharmacy/locationModel.dart';
import 'package:diplomaticquarterapp/models/pharmacy/productDetailModel.dart'; import 'package:diplomaticquarterapp/models/pharmacy/productDetailModel.dart';
import 'package:diplomaticquarterapp/services/pharmacy_services/product_detail_service.dart'; import 'package:diplomaticquarterapp/services/pharmacy_services/product_detail_service.dart';
import 'package:diplomaticquarterapp/models/pharmacy/specification.dart';
import '../../../locator.dart'; import '../../../locator.dart';
class ProductDetailViewModel extends BaseViewModel{ class ProductDetailViewModel extends BaseViewModel{
ProductDetailService _productDetailService = locator<ProductDetailService>(); ProductDetailService _productDetailService = locator<ProductDetailService>();
ProductDetailService _productLocationService = locator<ProductDetailService>();
ProductDetailService _productWishlistService = locator<ProductDetailService>();
ProductDetailService _productSpecification = locator<ProductDetailService>();
List<ProductDetail> get productDetailService => _productDetailService.productDetailList; List<ProductDetail> get productDetailService => _productDetailService.productDetailList;
List<LocationModel> get productLocationService => _productDetailService.productLocationList; List<LocationModel> get productLocationService => _productLocationService.productLocationList;
List<Wishlist> get wishListItems => _productWishlistService.wishListProducts;
List<SpecificationModel> get productSpecification => _productSpecification.productSpecification;
bool hasError = false; bool hasError = false;
Future getProductReviewsData() async { Future getProductReviewsData(productID) async {
print('ENAD REview');
hasError = false; hasError = false;
setState(ViewState.Busy); setState(ViewState.Busy);
await _productDetailService.getProductReviews(); await _productDetailService.getProductReviews(productID);
if (_productDetailService.hasError) { if (_productDetailService.hasError) {
error = _productDetailService.error; error = _productDetailService.error;
setState(ViewState.ErrorLocal); setState(ViewState.ErrorLocal);
@ -29,15 +39,72 @@ class ProductDetailViewModel extends BaseViewModel{
} }
Future getProductLocationData() async { Future getProductLocationData() async {
print('ENAD in model view');
hasError = false; hasError = false;
setState(ViewState.Busy); setState(ViewState.Busy);
await _productDetailService.getProductAvailabiltyDetail(); await _productLocationService.getProductAvailabiltyDetail();
if (_productDetailService.hasError) { if (_productLocationService.hasError) {
error = _productDetailService.error; error = _productLocationService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future addToCartData(quantity, itemID) async {
hasError = false;
setState(ViewState.Busy);
await _productLocationService.addToCart(quantity, itemID);
if (_productLocationService.hasError) {
error = _productLocationService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future addToWishlistData(itemID) async {
hasError = false;
setState(ViewState.Busy);
await _productLocationService.addToWishlist(itemID);
if (_productLocationService.hasError) {
error = _productLocationService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future checkWishlistData() async {
hasError = false;
setState(ViewState.Busy);
await _productWishlistService.getWishlistItems();
if (_productWishlistService.hasError) {
error = _productWishlistService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future deletWishlistData(itemID) async {
hasError = false;
setState(ViewState.Busy);
await _productWishlistService.delteItemFromWishlist(itemID);
if (_productWishlistService.hasError) {
error = _productWishlistService.error;
setState(ViewState.ErrorLocal); setState(ViewState.ErrorLocal);
} else } else
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future productSpecificationData(itemID) async {
hasError = false;
setState(ViewState.Busy);
await _productWishlistService.productSpecificationData(itemID);
if (_productWishlistService.hasError) {
error = _productWishlistService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
} }

@ -10,9 +10,11 @@ import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'config/size_config.dart'; import 'config/size_config.dart';
import 'core/viewModels/project_view_model.dart'; import 'core/viewModels/project_view_model.dart';
import 'locator.dart'; import 'locator.dart';
import 'pages/pharmacies/compare-list.dart';
void main() async { void main() async {
setupLocator(); setupLocator();
@ -45,7 +47,9 @@ class MyApp extends StatelessWidget {
StreamProvider.value( StreamProvider.value(
value: RobotProvider().intStream(), value: RobotProvider().intStream(),
initialData: RobotProvider().setValue({}), initialData: RobotProvider().setValue({}),
) ),
ChangeNotifierProvider<CompareList>(
create: (context) => CompareList()),
], ],
child: Consumer<ProjectViewModel>( child: Consumer<ProjectViewModel>(
builder: (context, projectProvider, child) => MaterialApp( builder: (context, projectProvider, child) => MaterialApp(

@ -0,0 +1,924 @@
// To parse this JSON data, do
//
// final shoppingCart = shoppingCartFromJson(jsonString);
import 'dart:convert';
ShoppingCart shoppingCartFromJson(String str) => ShoppingCart.fromJson(json.decode(str));
String shoppingCartToJson(ShoppingCart data) => json.encode(data.toJson());
class ShoppingCart {
ShoppingCart({
this.itemCount,
this.quantityCount,
this.subtotal,
this.subtotalWithVat,
this.subtotalVatAmount,
this.subtotalVatRate,
this.shoppingCarts,
});
int itemCount;
int quantityCount;
double subtotal;
double subtotalWithVat;
double subtotalVatAmount;
int subtotalVatRate;
List<ShoppingCartElement> shoppingCarts;
factory ShoppingCart.fromJson(Map<String, dynamic> json) => ShoppingCart(
itemCount: json["item_count"],
quantityCount: json["quantity_count"],
subtotal: json["subtotal"].toDouble(),
subtotalWithVat: json["subtotal_with_vat"].toDouble(),
subtotalVatAmount: json["subtotal_vat_amount"].toDouble(),
subtotalVatRate: json["subtotal_vat_rate"],
shoppingCarts: List<ShoppingCartElement>.from(json["shopping_carts"].map((x) => ShoppingCartElement.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"item_count": itemCount,
"quantity_count": quantityCount,
"subtotal": subtotal,
"subtotal_with_vat": subtotalWithVat,
"subtotal_vat_amount": subtotalVatAmount,
"subtotal_vat_rate": subtotalVatRate,
"shopping_carts": List<dynamic>.from(shoppingCarts.map((x) => x.toJson())),
};
}
class ShoppingCartElement {
ShoppingCartElement({
this.languageId,
this.id,
this.productAttributes,
this.customerEnteredPrice,
this.quantity,
this.discountAmountInclTax,
this.subtotal,
this.subtotalWithVat,
this.subtotalVatAmount,
this.subtotalVatRate,
this.currency,
this.currencyn,
this.rentalStartDateUtc,
this.rentalEndDateUtc,
this.createdOnUtc,
this.updatedOnUtc,
this.shoppingCartType,
this.productId,
this.product,
this.customerId,
this.customer,
});
int languageId;
String id;
List<dynamic> productAttributes;
int customerEnteredPrice;
int quantity;
dynamic discountAmountInclTax;
String subtotal;
String subtotalWithVat;
String subtotalVatAmount;
String subtotalVatRate;
String currency;
String currencyn;
dynamic rentalStartDateUtc;
dynamic rentalEndDateUtc;
DateTime createdOnUtc;
DateTime updatedOnUtc;
String shoppingCartType;
int productId;
Product product;
int customerId;
Customer customer;
factory ShoppingCartElement.fromJson(Map<String, dynamic> json) => ShoppingCartElement(
languageId: json["language_id"],
id: json["id"],
productAttributes: List<dynamic>.from(json["product_attributes"].map((x) => x)),
customerEnteredPrice: json["customer_entered_price"],
quantity: json["quantity"],
discountAmountInclTax: json["discount_amount_incl_tax"],
subtotal: json["subtotal"],
subtotalWithVat: json["subtotal_with_vat"],
subtotalVatAmount: json["subtotal_vat_amount"],
subtotalVatRate: json["subtotal_vat_rate"],
currency: json["currency"],
currencyn: json["currencyn"],
rentalStartDateUtc: json["rental_start_date_utc"],
rentalEndDateUtc: json["rental_end_date_utc"],
createdOnUtc: DateTime.parse(json["created_on_utc"]),
updatedOnUtc: DateTime.parse(json["updated_on_utc"]),
shoppingCartType: json["shopping_cart_type"],
productId: json["product_id"],
product: Product.fromJson(json["product"]),
customerId: json["customer_id"],
customer: Customer.fromJson(json["customer"]),
);
Map<String, dynamic> toJson() => {
"language_id": languageId,
"id": id,
"product_attributes": List<dynamic>.from(productAttributes.map((x) => x)),
"customer_entered_price": customerEnteredPrice,
"quantity": quantity,
"discount_amount_incl_tax": discountAmountInclTax,
"subtotal": subtotal,
"subtotal_with_vat": subtotalWithVat,
"subtotal_vat_amount": subtotalVatAmount,
"subtotal_vat_rate": subtotalVatRate,
"currency": currency,
"currencyn": currencyn,
"rental_start_date_utc": rentalStartDateUtc,
"rental_end_date_utc": rentalEndDateUtc,
"created_on_utc": createdOnUtc.toIso8601String(),
"updated_on_utc": updatedOnUtc.toIso8601String(),
"shopping_cart_type": shoppingCartType,
"product_id": productId,
"product": product.toJson(),
"customer_id": customerId,
"customer": customer.toJson(),
};
}
class Customer {
Customer({
this.billingAddress,
this.shippingAddress,
this.addresses,
this.id,
this.username,
this.email,
this.firstName,
this.lastName,
this.languageId,
this.adminComment,
this.isTaxExempt,
this.hasShoppingCartItems,
this.active,
this.deleted,
this.isSystemAccount,
this.systemName,
this.lastIpAddress,
this.createdOnUtc,
this.lastLoginDateUtc,
this.lastActivityDateUtc,
this.registeredInStoreId,
this.roleIds,
});
Address billingAddress;
Address shippingAddress;
List<Address> addresses;
String id;
String username;
String email;
dynamic firstName;
dynamic lastName;
dynamic languageId;
dynamic adminComment;
bool isTaxExempt;
bool hasShoppingCartItems;
bool active;
bool deleted;
bool isSystemAccount;
dynamic systemName;
String lastIpAddress;
DateTime createdOnUtc;
DateTime lastLoginDateUtc;
DateTime lastActivityDateUtc;
int registeredInStoreId;
List<dynamic> roleIds;
factory Customer.fromJson(Map<String, dynamic> json) => Customer(
billingAddress: Address.fromJson(json["billing_address"]),
shippingAddress: Address.fromJson(json["shipping_address"]),
addresses: List<Address>.from(json["addresses"].map((x) => Address.fromJson(x))),
id: json["id"],
username: json["username"],
email: json["email"],
firstName: json["first_name"],
lastName: json["last_name"],
languageId: json["language_id"],
adminComment: json["admin_comment"],
isTaxExempt: json["is_tax_exempt"],
hasShoppingCartItems: json["has_shopping_cart_items"],
active: json["active"],
deleted: json["deleted"],
isSystemAccount: json["is_system_account"],
systemName: json["system_name"],
lastIpAddress: json["last_ip_address"],
createdOnUtc: DateTime.parse(json["created_on_utc"]),
lastLoginDateUtc: DateTime.parse(json["last_login_date_utc"]),
lastActivityDateUtc: DateTime.parse(json["last_activity_date_utc"]),
registeredInStoreId: json["registered_in_store_id"],
roleIds: List<dynamic>.from(json["role_ids"].map((x) => x)),
);
Map<String, dynamic> toJson() => {
"billing_address": billingAddress.toJson(),
"shipping_address": shippingAddress.toJson(),
"addresses": List<dynamic>.from(addresses.map((x) => x.toJson())),
"id": id,
"username": username,
"email": email,
"first_name": firstName,
"last_name": lastName,
"language_id": languageId,
"admin_comment": adminComment,
"is_tax_exempt": isTaxExempt,
"has_shopping_cart_items": hasShoppingCartItems,
"active": active,
"deleted": deleted,
"is_system_account": isSystemAccount,
"system_name": systemName,
"last_ip_address": lastIpAddress,
"created_on_utc": createdOnUtc.toIso8601String(),
"last_login_date_utc": lastLoginDateUtc.toIso8601String(),
"last_activity_date_utc": lastActivityDateUtc.toIso8601String(),
"registered_in_store_id": registeredInStoreId,
"role_ids": List<dynamic>.from(roleIds.map((x) => x)),
};
}
class Address {
Address({
this.id,
this.firstName,
this.lastName,
this.email,
this.company,
this.countryId,
this.country,
this.stateProvinceId,
this.city,
this.address1,
this.address2,
this.zipPostalCode,
this.phoneNumber,
this.faxNumber,
this.customerAttributes,
this.createdOnUtc,
this.province,
this.latLong,
});
String id;
FirstName firstName;
LastName lastName;
Email email;
dynamic company;
int countryId;
Country country;
dynamic stateProvinceId;
City city;
String address1;
String address2;
String zipPostalCode;
String phoneNumber;
dynamic faxNumber;
String customerAttributes;
DateTime createdOnUtc;
dynamic province;
String latLong;
factory Address.fromJson(Map<String, dynamic> json) => Address(
id: json["id"],
firstName: firstNameValues.map[json["first_name"]],
lastName: lastNameValues.map[json["last_name"]],
email: emailValues.map[json["email"]],
company: json["company"],
countryId: json["country_id"],
country: countryValues.map[json["country"]],
stateProvinceId: json["state_province_id"],
city: cityValues.map[json["city"]],
address1: json["address1"],
address2: json["address2"],
zipPostalCode: json["zip_postal_code"],
phoneNumber: json["phone_number"],
faxNumber: json["fax_number"],
customerAttributes: json["customer_attributes"],
createdOnUtc: DateTime.parse(json["created_on_utc"]),
province: json["province"],
latLong: json["lat_long"],
);
Map<String, dynamic> toJson() => {
"id": id,
"first_name": firstNameValues.reverse[firstName],
"last_name": lastNameValues.reverse[lastName],
"email": emailValues.reverse[email],
"company": company,
"country_id": countryId,
"country": countryValues.reverse[country],
"state_province_id": stateProvinceId,
"city": cityValues.reverse[city],
"address1": address1,
"address2": address2,
"zip_postal_code": zipPostalCode,
"phone_number": phoneNumber,
"fax_number": faxNumber,
"customer_attributes": customerAttributes,
"created_on_utc": createdOnUtc.toIso8601String(),
"province": province,
"lat_long": latLong,
};
}
enum City { CALIFORNIA, RIYADH, AL_OYUN }
final cityValues = EnumValues({
"Al Oyun": City.AL_OYUN,
"California": City.CALIFORNIA,
"Riyadh": City.RIYADH
});
enum Country { UNITED_STATES, SAUDI_ARABIA }
final countryValues = EnumValues({
"Saudi Arabia": Country.SAUDI_ARABIA,
"United States": Country.UNITED_STATES
});
enum Email { TAMER_FANASHEH_GMAIL_COM, TAMER_DASDASDAS_GMAIL_COM, TAMER_F_CLOUDSOLUTION_SA_COM }
final emailValues = EnumValues({
"Tamer.dasdasdas@gmail.com": Email.TAMER_DASDASDAS_GMAIL_COM,
"Tamer.fanasheh@gmail.com": Email.TAMER_FANASHEH_GMAIL_COM,
"Tamer.F@cloudsolution-sa.com": Email.TAMER_F_CLOUDSOLUTION_SA_COM
});
enum FirstName { TAMER, TAMER_FANASHEH }
final firstNameValues = EnumValues({
"TAMER": FirstName.TAMER,
"TAMER FANASHEH": FirstName.TAMER_FANASHEH
});
enum LastName { FANASHEH, MUSA }
final lastNameValues = EnumValues({
"FANASHEH": LastName.FANASHEH,
"MUSA": LastName.MUSA
});
class Product {
Product({
this.id,
this.visibleIndividually,
this.name,
this.namen,
this.localizedNames,
this.shortDescription,
this.shortDescriptionn,
this.fullDescription,
this.fullDescriptionn,
this.markasNew,
this.showOnHomePage,
this.metaKeywords,
this.metaDescription,
this.metaTitle,
this.allowCustomerReviews,
this.approvedRatingSum,
this.notApprovedRatingSum,
this.approvedTotalReviews,
this.notApprovedTotalReviews,
this.sku,
this.isRx,
this.prescriptionRequired,
this.rxMessage,
this.rxMessagen,
this.manufacturerPartNumber,
this.gtin,
this.isGiftCard,
this.requireOtherProducts,
this.automaticallyAddRequiredProducts,
this.isDownload,
this.unlimitedDownloads,
this.maxNumberOfDownloads,
this.downloadExpirationDays,
this.hasSampleDownload,
this.hasUserAgreement,
this.isRecurring,
this.recurringCycleLength,
this.recurringTotalCycles,
this.isRental,
this.rentalPriceLength,
this.isShipEnabled,
this.isFreeShipping,
this.shipSeparately,
this.additionalShippingCharge,
this.isTaxExempt,
this.isTelecommunicationsOrBroadcastingOrElectronicServices,
this.useMultipleWarehouses,
this.manageInventoryMethodId,
this.stockQuantity,
this.stockAvailability,
this.stockAvailabilityn,
this.displayStockAvailability,
this.displayStockQuantity,
this.minStockQuantity,
this.notifyAdminForQuantityBelow,
this.allowBackInStockSubscriptions,
this.orderMinimumQuantity,
this.orderMaximumQuantity,
this.allowedQuantities,
this.allowAddingOnlyExistingAttributeCombinations,
this.disableBuyButton,
this.disableWishlistButton,
this.availableForPreOrder,
this.preOrderAvailabilityStartDateTimeUtc,
this.callForPrice,
this.price,
this.oldPrice,
this.productCost,
this.specialPrice,
this.specialPriceStartDateTimeUtc,
this.specialPriceEndDateTimeUtc,
this.customerEntersPrice,
this.minimumCustomerEnteredPrice,
this.maximumCustomerEnteredPrice,
this.basepriceEnabled,
this.basepriceAmount,
this.basepriceBaseAmount,
this.hasTierPrices,
this.hasDiscountsApplied,
this.discountName,
this.discountNamen,
this.discountDescription,
this.discountDescriptionn,
this.discountPercentage,
this.currency,
this.currencyn,
this.weight,
this.length,
this.width,
this.height,
this.availableStartDateTimeUtc,
this.availableEndDateTimeUtc,
this.displayOrder,
this.published,
this.deleted,
this.createdOnUtc,
this.updatedOnUtc,
this.productType,
this.parentGroupedProductId,
this.roleIds,
this.discountIds,
this.storeIds,
this.manufacturerIds,
this.reviews,
this.images,
this.attributes,
this.specifications,
this.associatedProductIds,
this.tags,
this.vendorId,
this.seName,
});
String id;
bool visibleIndividually;
String name;
String namen;
List<LocalizedName> localizedNames;
String shortDescription;
String shortDescriptionn;
String fullDescription;
String fullDescriptionn;
bool markasNew;
bool showOnHomePage;
String metaKeywords;
String metaDescription;
String metaTitle;
bool allowCustomerReviews;
int approvedRatingSum;
int notApprovedRatingSum;
int approvedTotalReviews;
int notApprovedTotalReviews;
String sku;
bool isRx;
bool prescriptionRequired;
dynamic rxMessage;
dynamic rxMessagen;
dynamic manufacturerPartNumber;
dynamic gtin;
bool isGiftCard;
bool requireOtherProducts;
bool automaticallyAddRequiredProducts;
bool isDownload;
bool unlimitedDownloads;
int maxNumberOfDownloads;
dynamic downloadExpirationDays;
bool hasSampleDownload;
bool hasUserAgreement;
bool isRecurring;
int recurringCycleLength;
int recurringTotalCycles;
bool isRental;
int rentalPriceLength;
bool isShipEnabled;
bool isFreeShipping;
bool shipSeparately;
int additionalShippingCharge;
bool isTaxExempt;
bool isTelecommunicationsOrBroadcastingOrElectronicServices;
bool useMultipleWarehouses;
int manageInventoryMethodId;
int stockQuantity;
String stockAvailability;
String stockAvailabilityn;
bool displayStockAvailability;
bool displayStockQuantity;
int minStockQuantity;
int notifyAdminForQuantityBelow;
bool allowBackInStockSubscriptions;
int orderMinimumQuantity;
int orderMaximumQuantity;
dynamic allowedQuantities;
bool allowAddingOnlyExistingAttributeCombinations;
bool disableBuyButton;
bool disableWishlistButton;
bool availableForPreOrder;
dynamic preOrderAvailabilityStartDateTimeUtc;
bool callForPrice;
double price;
int oldPrice;
double productCost;
dynamic specialPrice;
dynamic specialPriceStartDateTimeUtc;
dynamic specialPriceEndDateTimeUtc;
bool customerEntersPrice;
int minimumCustomerEnteredPrice;
int maximumCustomerEnteredPrice;
bool basepriceEnabled;
int basepriceAmount;
int basepriceBaseAmount;
bool hasTierPrices;
bool hasDiscountsApplied;
dynamic discountName;
dynamic discountNamen;
dynamic discountDescription;
dynamic discountDescriptionn;
dynamic discountPercentage;
String currency;
String currencyn;
double weight;
int length;
int width;
int height;
dynamic availableStartDateTimeUtc;
dynamic availableEndDateTimeUtc;
int displayOrder;
bool published;
bool deleted;
DateTime createdOnUtc;
DateTime updatedOnUtc;
String productType;
int parentGroupedProductId;
List<dynamic> roleIds;
List<dynamic> discountIds;
List<dynamic> storeIds;
List<int> manufacturerIds;
List<dynamic> reviews;
List<Image> images;
List<dynamic> attributes;
List<Specification> specifications;
List<dynamic> associatedProductIds;
List<dynamic> tags;
int vendorId;
String seName;
factory Product.fromJson(Map<String, dynamic> json) => Product(
id: json["id"],
visibleIndividually: json["visible_individually"],
name: json["name"],
namen: json["namen"],
localizedNames: List<LocalizedName>.from(json["localized_names"].map((x) => LocalizedName.fromJson(x))),
shortDescription: json["short_description"],
shortDescriptionn: json["short_descriptionn"],
fullDescription: json["full_description"],
fullDescriptionn: json["full_descriptionn"],
markasNew: json["markas_new"],
showOnHomePage: json["show_on_home_page"],
metaKeywords: json["meta_keywords"] == null ? null : json["meta_keywords"],
metaDescription: json["meta_description"] == null ? null : json["meta_description"],
metaTitle: json["meta_title"] == null ? null : json["meta_title"],
allowCustomerReviews: json["allow_customer_reviews"],
approvedRatingSum: json["approved_rating_sum"],
notApprovedRatingSum: json["not_approved_rating_sum"],
approvedTotalReviews: json["approved_total_reviews"],
notApprovedTotalReviews: json["not_approved_total_reviews"],
sku: json["sku"],
isRx: json["is_rx"],
prescriptionRequired: json["prescription_required"],
rxMessage: json["rx_message"],
rxMessagen: json["rx_messagen"],
manufacturerPartNumber: json["manufacturer_part_number"],
gtin: json["gtin"],
isGiftCard: json["is_gift_card"],
requireOtherProducts: json["require_other_products"],
automaticallyAddRequiredProducts: json["automatically_add_required_products"],
isDownload: json["is_download"],
unlimitedDownloads: json["unlimited_downloads"],
maxNumberOfDownloads: json["max_number_of_downloads"],
downloadExpirationDays: json["download_expiration_days"],
hasSampleDownload: json["has_sample_download"],
hasUserAgreement: json["has_user_agreement"],
isRecurring: json["is_recurring"],
recurringCycleLength: json["recurring_cycle_length"],
recurringTotalCycles: json["recurring_total_cycles"],
isRental: json["is_rental"],
rentalPriceLength: json["rental_price_length"],
isShipEnabled: json["is_ship_enabled"],
isFreeShipping: json["is_free_shipping"],
shipSeparately: json["ship_separately"],
additionalShippingCharge: json["additional_shipping_charge"],
isTaxExempt: json["is_tax_exempt"],
isTelecommunicationsOrBroadcastingOrElectronicServices: json["is_telecommunications_or_broadcasting_or_electronic_services"],
useMultipleWarehouses: json["use_multiple_warehouses"],
manageInventoryMethodId: json["manage_inventory_method_id"],
stockQuantity: json["stock_quantity"],
stockAvailability: json["stock_availability"],
stockAvailabilityn: json["stock_availabilityn"],
displayStockAvailability: json["display_stock_availability"],
displayStockQuantity: json["display_stock_quantity"],
minStockQuantity: json["min_stock_quantity"],
notifyAdminForQuantityBelow: json["notify_admin_for_quantity_below"],
allowBackInStockSubscriptions: json["allow_back_in_stock_subscriptions"],
orderMinimumQuantity: json["order_minimum_quantity"],
orderMaximumQuantity: json["order_maximum_quantity"],
allowedQuantities: json["allowed_quantities"],
allowAddingOnlyExistingAttributeCombinations: json["allow_adding_only_existing_attribute_combinations"],
disableBuyButton: json["disable_buy_button"],
disableWishlistButton: json["disable_wishlist_button"],
availableForPreOrder: json["available_for_pre_order"],
preOrderAvailabilityStartDateTimeUtc: json["pre_order_availability_start_date_time_utc"],
callForPrice: json["call_for_price"],
price: json["price"].toDouble(),
oldPrice: json["old_price"],
productCost: json["product_cost"].toDouble(),
specialPrice: json["special_price"],
specialPriceStartDateTimeUtc: json["special_price_start_date_time_utc"],
specialPriceEndDateTimeUtc: json["special_price_end_date_time_utc"],
customerEntersPrice: json["customer_enters_price"],
minimumCustomerEnteredPrice: json["minimum_customer_entered_price"],
maximumCustomerEnteredPrice: json["maximum_customer_entered_price"],
basepriceEnabled: json["baseprice_enabled"],
basepriceAmount: json["baseprice_amount"],
basepriceBaseAmount: json["baseprice_base_amount"],
hasTierPrices: json["has_tier_prices"],
hasDiscountsApplied: json["has_discounts_applied"],
discountName: json["discount_name"],
discountNamen: json["discount_namen"],
discountDescription: json["discount_description"],
discountDescriptionn: json["discount_Descriptionn"],
discountPercentage: json["discount_percentage"],
currency: json["currency"],
currencyn: json["currencyn"],
weight: json["weight"].toDouble(),
length: json["length"],
width: json["width"],
height: json["height"],
availableStartDateTimeUtc: json["available_start_date_time_utc"],
availableEndDateTimeUtc: json["available_end_date_time_utc"],
displayOrder: json["display_order"],
published: json["published"],
deleted: json["deleted"],
createdOnUtc: DateTime.parse(json["created_on_utc"]),
updatedOnUtc: DateTime.parse(json["updated_on_utc"]),
productType: json["product_type"],
parentGroupedProductId: json["parent_grouped_product_id"],
roleIds: List<dynamic>.from(json["role_ids"].map((x) => x)),
discountIds: List<dynamic>.from(json["discount_ids"].map((x) => x)),
storeIds: List<dynamic>.from(json["store_ids"].map((x) => x)),
manufacturerIds: List<int>.from(json["manufacturer_ids"].map((x) => x)),
reviews: List<dynamic>.from(json["reviews"].map((x) => x)),
images: List<Image>.from(json["images"].map((x) => Image.fromJson(x))),
attributes: List<dynamic>.from(json["attributes"].map((x) => x)),
specifications: List<Specification>.from(json["specifications"].map((x) => Specification.fromJson(x))),
associatedProductIds: List<dynamic>.from(json["associated_product_ids"].map((x) => x)),
tags: List<dynamic>.from(json["tags"].map((x) => x)),
vendorId: json["vendor_id"],
seName: json["se_name"],
);
Map<String, dynamic> toJson() => {
"id": id,
"visible_individually": visibleIndividually,
"name": name,
"namen": namen,
"localized_names": List<dynamic>.from(localizedNames.map((x) => x.toJson())),
"short_description": shortDescription,
"short_descriptionn": shortDescriptionn,
"full_description": fullDescription,
"full_descriptionn": fullDescriptionn,
"markas_new": markasNew,
"show_on_home_page": showOnHomePage,
"meta_keywords": metaKeywords == null ? null : metaKeywords,
"meta_description": metaDescription == null ? null : metaDescription,
"meta_title": metaTitle == null ? null : metaTitle,
"allow_customer_reviews": allowCustomerReviews,
"approved_rating_sum": approvedRatingSum,
"not_approved_rating_sum": notApprovedRatingSum,
"approved_total_reviews": approvedTotalReviews,
"not_approved_total_reviews": notApprovedTotalReviews,
"sku": sku,
"is_rx": isRx,
"prescription_required": prescriptionRequired,
"rx_message": rxMessage,
"rx_messagen": rxMessagen,
"manufacturer_part_number": manufacturerPartNumber,
"gtin": gtin,
"is_gift_card": isGiftCard,
"require_other_products": requireOtherProducts,
"automatically_add_required_products": automaticallyAddRequiredProducts,
"is_download": isDownload,
"unlimited_downloads": unlimitedDownloads,
"max_number_of_downloads": maxNumberOfDownloads,
"download_expiration_days": downloadExpirationDays,
"has_sample_download": hasSampleDownload,
"has_user_agreement": hasUserAgreement,
"is_recurring": isRecurring,
"recurring_cycle_length": recurringCycleLength,
"recurring_total_cycles": recurringTotalCycles,
"is_rental": isRental,
"rental_price_length": rentalPriceLength,
"is_ship_enabled": isShipEnabled,
"is_free_shipping": isFreeShipping,
"ship_separately": shipSeparately,
"additional_shipping_charge": additionalShippingCharge,
"is_tax_exempt": isTaxExempt,
"is_telecommunications_or_broadcasting_or_electronic_services": isTelecommunicationsOrBroadcastingOrElectronicServices,
"use_multiple_warehouses": useMultipleWarehouses,
"manage_inventory_method_id": manageInventoryMethodId,
"stock_quantity": stockQuantity,
"stock_availability": stockAvailability,
"stock_availabilityn": stockAvailabilityn,
"display_stock_availability": displayStockAvailability,
"display_stock_quantity": displayStockQuantity,
"min_stock_quantity": minStockQuantity,
"notify_admin_for_quantity_below": notifyAdminForQuantityBelow,
"allow_back_in_stock_subscriptions": allowBackInStockSubscriptions,
"order_minimum_quantity": orderMinimumQuantity,
"order_maximum_quantity": orderMaximumQuantity,
"allowed_quantities": allowedQuantities,
"allow_adding_only_existing_attribute_combinations": allowAddingOnlyExistingAttributeCombinations,
"disable_buy_button": disableBuyButton,
"disable_wishlist_button": disableWishlistButton,
"available_for_pre_order": availableForPreOrder,
"pre_order_availability_start_date_time_utc": preOrderAvailabilityStartDateTimeUtc,
"call_for_price": callForPrice,
"price": price,
"old_price": oldPrice,
"product_cost": productCost,
"special_price": specialPrice,
"special_price_start_date_time_utc": specialPriceStartDateTimeUtc,
"special_price_end_date_time_utc": specialPriceEndDateTimeUtc,
"customer_enters_price": customerEntersPrice,
"minimum_customer_entered_price": minimumCustomerEnteredPrice,
"maximum_customer_entered_price": maximumCustomerEnteredPrice,
"baseprice_enabled": basepriceEnabled,
"baseprice_amount": basepriceAmount,
"baseprice_base_amount": basepriceBaseAmount,
"has_tier_prices": hasTierPrices,
"has_discounts_applied": hasDiscountsApplied,
"discount_name": discountName,
"discount_namen": discountNamen,
"discount_description": discountDescription,
"discount_Descriptionn": discountDescriptionn,
"discount_percentage": discountPercentage,
"currency": currency,
"currencyn": currencyn,
"weight": weight,
"length": length,
"width": width,
"height": height,
"available_start_date_time_utc": availableStartDateTimeUtc,
"available_end_date_time_utc": availableEndDateTimeUtc,
"display_order": displayOrder,
"published": published,
"deleted": deleted,
"created_on_utc": createdOnUtc.toIso8601String(),
"updated_on_utc": updatedOnUtc.toIso8601String(),
"product_type": productType,
"parent_grouped_product_id": parentGroupedProductId,
"role_ids": List<dynamic>.from(roleIds.map((x) => x)),
"discount_ids": List<dynamic>.from(discountIds.map((x) => x)),
"store_ids": List<dynamic>.from(storeIds.map((x) => x)),
"manufacturer_ids": List<dynamic>.from(manufacturerIds.map((x) => x)),
"reviews": List<dynamic>.from(reviews.map((x) => x)),
"images": List<dynamic>.from(images.map((x) => x.toJson())),
"attributes": List<dynamic>.from(attributes.map((x) => x)),
"specifications": List<dynamic>.from(specifications.map((x) => x.toJson())),
"associated_product_ids": List<dynamic>.from(associatedProductIds.map((x) => x)),
"tags": List<dynamic>.from(tags.map((x) => x)),
"vendor_id": vendorId,
"se_name": seName,
};
}
class Image {
Image({
this.id,
this.position,
this.src,
this.thumb,
this.attachment,
});
int id;
int position;
String src;
String thumb;
String attachment;
factory Image.fromJson(Map<String, dynamic> json) => Image(
id: json["id"],
position: json["position"],
src: json["src"],
thumb: json["thumb"],
attachment: json["attachment"],
);
Map<String, dynamic> toJson() => {
"id": id,
"position": position,
"src": src,
"thumb": thumb,
"attachment": attachment,
};
}
class LocalizedName {
LocalizedName({
this.languageId,
this.localizedName,
});
int languageId;
String localizedName;
factory LocalizedName.fromJson(Map<String, dynamic> json) => LocalizedName(
languageId: json["language_id"],
localizedName: json["localized_name"],
);
Map<String, dynamic> toJson() => {
"language_id": languageId,
"localized_name": localizedName,
};
}
class Specification {
Specification({
this.id,
this.displayOrder,
this.defaultValue,
this.defaultValuen,
this.name,
this.nameN,
});
int id;
int displayOrder;
String defaultValue;
String defaultValuen;
String name;
String nameN;
factory Specification.fromJson(Map<String, dynamic> json) => Specification(
id: json["id"],
displayOrder: json["display_order"],
defaultValue: json["default_value"],
defaultValuen: json["default_valuen"],
name: json["name"],
nameN: json["nameN"],
);
Map<String, dynamic> toJson() => {
"id": id,
"display_order": displayOrder,
"default_value": defaultValue,
"default_valuen": defaultValuen,
"name": name,
"nameN": nameN,
};
}
class EnumValues<T> {
Map<String, T> map;
Map<T, String> reverseMap;
EnumValues(this.map);
Map<T, String> get reverse {
if (reverseMap == null) {
reverseMap = map.map((k, v) => new MapEntry(v, k));
}
return reverseMap;
}
}

@ -40,7 +40,7 @@ class Brand {
dynamic metaDescription; dynamic metaDescription;
dynamic metaTitle; dynamic metaTitle;
int pageSize; int pageSize;
PageSizeOptions pageSizeOptions; String pageSizeOptions;
dynamic priceRanges; dynamic priceRanges;
bool published; bool published;
bool deleted; bool deleted;
@ -60,7 +60,7 @@ class Brand {
metaDescription: json["meta_description"], metaDescription: json["meta_description"],
metaTitle: json["meta_title"], metaTitle: json["meta_title"],
pageSize: json["page_size"], pageSize: json["page_size"],
pageSizeOptions: pageSizeOptionsValues.map[json["page_size_options"]], pageSizeOptions: json["page_size_options"],
priceRanges: json["price_ranges"], priceRanges: json["price_ranges"],
published: json["published"], published: json["published"],
deleted: json["deleted"], deleted: json["deleted"],
@ -81,7 +81,7 @@ class Brand {
"meta_description": metaDescription, "meta_description": metaDescription,
"meta_title": metaTitle, "meta_title": metaTitle,
"page_size": pageSize, "page_size": pageSize,
"page_size_options": pageSizeOptionsValues.reverse[pageSizeOptions], "page_size_options": pageSizeOptions,
"price_ranges": priceRanges, "price_ranges": priceRanges,
"published": published, "published": published,
"deleted": deleted, "deleted": deleted,
@ -135,23 +135,3 @@ class LocalizedName {
"localized_name": localizedName, "localized_name": localizedName,
}; };
} }
enum PageSizeOptions { THE_2460100 }
final pageSizeOptionsValues = EnumValues({
"24, 60, 100": PageSizeOptions.THE_2460100
});
class EnumValues<T> {
Map<String, T> map;
Map<T, String> reverseMap;
EnumValues(this.map);
Map<T, String> get reverse {
if (reverseMap == null) {
reverseMap = map.map((k, v) => new MapEntry(v, k));
}
return reverseMap;
}
}

@ -0,0 +1,61 @@
// To parse this JSON data, do
//
// final specificationModel = specificationModelFromJson(jsonString);
import 'dart:convert';
SpecificationModel specificationModelFromJson(String str) => SpecificationModel.fromJson(json.decode(str));
String specificationModelToJson(SpecificationModel data) => json.encode(data.toJson());
class SpecificationModel {
SpecificationModel({
this.specification,
});
List<Specification> specification;
factory SpecificationModel.fromJson(Map<String, dynamic> json) => SpecificationModel(
specification: List<Specification>.from(json["specification"].map((x) => Specification.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"specification": List<dynamic>.from(specification.map((x) => x.toJson())),
};
}
class Specification {
Specification({
this.id,
this.displayOrder,
this.defaultValue,
this.defaultValuen,
this.name,
this.nameN,
});
int id;
int displayOrder;
String defaultValue;
String defaultValuen;
String name;
String nameN;
factory Specification.fromJson(Map<String, dynamic> json) => Specification(
id: json["id"],
displayOrder: json["display_order"],
defaultValue: json["default_value"],
defaultValuen: json["default_valuen"],
name: json["name"],
nameN: json["nameN"],
);
Map<String, dynamic> toJson() => {
"id": id,
"display_order": displayOrder,
"default_value": defaultValue,
"default_valuen": defaultValuen,
"name": name,
"nameN": nameN,
};
}

@ -34,7 +34,7 @@ class TopBrand {
String name; String name;
String namen; String namen;
List<LocalizedName> localizedNames; List<LocalizedName> localizedNames;
dynamic description; String description;
int manufacturerTemplateId; int manufacturerTemplateId;
String metaKeywords; String metaKeywords;
dynamic metaDescription; dynamic metaDescription;
@ -54,7 +54,7 @@ class TopBrand {
name: json["name"], name: json["name"],
namen: json["namen"], namen: json["namen"],
localizedNames: List<LocalizedName>.from(json["localized_names"].map((x) => LocalizedName.fromJson(x))), localizedNames: List<LocalizedName>.from(json["localized_names"].map((x) => LocalizedName.fromJson(x))),
description: json["description"], description: json["description"] == null ? null : json["description"],
manufacturerTemplateId: json["manufacturer_template_id"], manufacturerTemplateId: json["manufacturer_template_id"],
metaKeywords: json["meta_keywords"], metaKeywords: json["meta_keywords"],
metaDescription: json["meta_description"], metaDescription: json["meta_description"],
@ -67,7 +67,7 @@ class TopBrand {
displayOrder: json["display_order"], displayOrder: json["display_order"],
createdOnUtc: DateTime.parse(json["created_on_utc"]), createdOnUtc: DateTime.parse(json["created_on_utc"]),
updatedOnUtc: DateTime.parse(json["updated_on_utc"]), updatedOnUtc: DateTime.parse(json["updated_on_utc"]),
image: Image.fromJson(json["image"]), image: json["image"] == null ? null : Image.fromJson(json["image"]),
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
@ -75,7 +75,7 @@ class TopBrand {
"name": name, "name": name,
"namen": namen, "namen": namen,
"localized_names": List<dynamic>.from(localizedNames.map((x) => x.toJson())), "localized_names": List<dynamic>.from(localizedNames.map((x) => x.toJson())),
"description": description, "description": description == null ? null : description,
"manufacturer_template_id": manufacturerTemplateId, "manufacturer_template_id": manufacturerTemplateId,
"meta_keywords": metaKeywords, "meta_keywords": metaKeywords,
"meta_description": metaDescription, "meta_description": metaDescription,
@ -88,7 +88,7 @@ class TopBrand {
"display_order": displayOrder, "display_order": displayOrder,
"created_on_utc": createdOnUtc.toIso8601String(), "created_on_utc": createdOnUtc.toIso8601String(),
"updated_on_utc": updatedOnUtc.toIso8601String(), "updated_on_utc": updatedOnUtc.toIso8601String(),
"image": image.toJson(), "image": image == null ? null : image.toJson(),
}; };
} }

@ -10,6 +10,7 @@ import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart'; import 'package:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart';
import 'package:diplomaticquarterapp/widgets/pharmacy/bottom_nav_pharmacy_bar.dart'; import 'package:diplomaticquarterapp/widgets/pharmacy/bottom_nav_pharmacy_bar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/wishlist.dart';
import '../offers_categorise_page.dart'; import '../offers_categorise_page.dart';
@ -136,7 +137,8 @@ class _LandingPagePharmacyState extends State<LandingPagePharmacy> {
children: [ children: [
PharmacyPage(), PharmacyPage(),
PharmacyCategorisePage(), PharmacyCategorisePage(),
OffersCategorisePage(), // OffersCategorisePage(),
WishlistPage(),
PharmacyProfilePage(), PharmacyProfilePage(),
// Container( // Container(
// child: Text('text'), // child: Text('text'),

File diff suppressed because it is too large Load Diff

@ -1,12 +1,21 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/widgets/pharmacy/product_tile.dart'; import 'package:diplomaticquarterapp/widgets/pharmacy/product_tile.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
AppSharedPreferences sharedPref = AppSharedPreferences();
var languageID;
class ProductCheckTypeWidget extends StatelessWidget { class ProductCheckTypeWidget extends StatelessWidget {
final List<dynamic> wishlist; final List<dynamic> wishlist;
final bool isTrue; final bool isTrue;
ProductCheckTypeWidget(this.isTrue, this.wishlist); ProductCheckTypeWidget(this.isTrue, this.wishlist);
void initState() {
getLanguageID();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return isTrue return isTrue
@ -18,15 +27,16 @@ class ProductCheckTypeWidget extends StatelessWidget {
Container( Container(
child: isTrue child: isTrue
? productTile( ? productTile(
productName: wishlist[index].product.name, productName: languageID == 'ar' ? wishlist[index].product.namen : wishlist[index].product.name,
productPrice: wishlist[index].subtotal, productPrice: wishlist[index].subtotal,
productRate: productRate:
double.parse(wishlist[index].subtotalVatRate), double.parse(wishlist[index].subtotalVatRate),
productImage: wishlist[index].product.images[0].src, productImage: wishlist[index].product.images[0].src,
showLine: isTrue, showLine: isTrue,
productID: wishlist[index].product.id,
) )
: productTile( : productTile(
productName: wishlist[index].product.name, productName: languageID == 'ar' ? wishlist[index].product.namen : wishlist[index].product.name,
productPrice: wishlist[index].subtotal, productPrice: wishlist[index].subtotal,
productRate: productRate:
double.parse(wishlist[index].subtotalVatRate), double.parse(wishlist[index].subtotalVatRate),
@ -53,3 +63,8 @@ class ProductCheckTypeWidget extends StatelessWidget {
); );
} }
} }
getLanguageID() async {
languageID = await sharedPref.getString(APP_LANGUAGE);
}

@ -0,0 +1,36 @@
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart';
class CompareList with ChangeNotifier {
List<PharmacyProduct> _product = [];
List<PharmacyProduct> get productListItems => _product;
void addItem(data) {
if (_product.length == 0) {
_product.add(data);
AppToast.showSuccessToast(message: 'You have added a product to the Compare list');
} else {
for (int i = 0; i < _product.length; i++) {
if (_product.length <= 4 && _product[i].id != data.id) {
_product.add(data);
AppToast.showSuccessToast(message: 'You have added a product to the Compare list');
break;
} else if(_product[i].id == data.id){
AppToast.showErrorToast(message: 'the item is already in the list');
} else if(_product.length == 4){
AppToast.showErrorToast(message: 'your compare list is full');
}
}
}
notifyListeners();
}
void deleteItem(data) {
for (int i = 0; i < _product.length; i++) {
if (_product[i].id == data) _product.remove(_product[i]);
}
notifyListeners();
}
}

@ -2,6 +2,11 @@ import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:carousel_slider/carousel_slider.dart'; import 'package:carousel_slider/carousel_slider.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/compare-list.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart';
import 'package:provider/provider.dart';
int counter = 0;
void main() => runApp(ComparePage()); void main() => runApp(ComparePage());
@ -10,6 +15,7 @@ class ComparePage extends StatefulWidget {
_ComparePageState createState() => _ComparePageState(); _ComparePageState createState() => _ComparePageState();
} }
//CompareList compareItems = CompareList();
class _ComparePageState extends State<ComparePage> { class _ComparePageState extends State<ComparePage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -24,574 +30,301 @@ class _ComparePageState extends State<ComparePage> {
} }
} }
compareList() { class compareList extends StatelessWidget {
return CarouselSlider( @override
options: CarouselOptions( Widget build(BuildContext context) {
height: 800.0, viewportFraction: 0.95, enableInfiniteScroll: false), final productItemData = Provider.of<CompareList>(context);
items: [1, 2].map((i) { final productItem = productItemData.productListItems;
return Builder( return productItem.length == 0
builder: (BuildContext context) { ? Container(
return Padding( child: Center(
padding: const EdgeInsets.only(top: 8),
child: Container(
width: MediaQuery.of(context).size.width,
margin: EdgeInsets.symmetric(horizontal: 10.0),
child: slideDetail(),
),
);
},
);
}).toList(),
);
}
slideDetail() {
return ListView(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
height: 800,
width: 150,
margin: EdgeInsets.symmetric(horizontal: 10.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
border: Border(
top: BorderSide(width: 0.5, color: Colors.grey),
left: BorderSide(width: 0.5, color: Colors.grey),
right: BorderSide(width: 0.5, color: Colors.grey),
bottom: BorderSide(width: 0.5, color: Colors.grey),
),
color: Colors.white),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Container(
child: Align(
alignment: Alignment.topRight,
child: Icon(FontAwesomeIcons.trashAlt, size: 15)),
),
SizedBox(height: 20,),
Image(
image: AssetImage(
'assets/images/al-habib_onlne_pharmacy_bg.png'),
fit: BoxFit.cover,
width: 100,
height: 60,
),
Padding( Padding(
padding: EdgeInsets.only(top: 8.0), padding: const EdgeInsets.all(8.0),
child: Container( child: Image.asset(
height: 1.0, 'assets/images/new-design/empty_box.png',
width: 300.0, width: 100,
color:Colors.grey,), height: 100,
), fit: BoxFit.cover,
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text: 'SAR 999.99',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
),
),
),
),
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text:
'ENAD test',
style: TextStyle(
color: Colors.black54,
fontSize: 15,
fontWeight: FontWeight.bold),
),
),
), ),
), ),
Padding( Padding(
padding: EdgeInsets.only(top: 8.0), padding: const EdgeInsets.all(8.0),
child: Container( child: Text(
height: 1.0, 'There is no data',
width: 300.0, style: TextStyle(fontSize: 30),
color:Colors.grey,),
),
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text: 'Primary Unit Of Measure',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
),
),
), ),
), )
Container( ],
margin: EdgeInsets.all(5), ),
child: Align( ),
alignment: Alignment.topLeft, )
child: RichText( : CarouselSlider(
text: TextSpan( options: CarouselOptions(
text: height: 800.0,
'Each', viewportFraction: 0.87,
style: TextStyle( enableInfiniteScroll: false),
color: Colors.black54, items: productItem.map((i) {
fontSize: 15, return Builder(
fontWeight: FontWeight.bold), builder: (BuildContext context) {
), return Padding(
), padding: const EdgeInsets.only(top: 8),
),
),
Padding(
padding: EdgeInsets.only(top: 8.0),
child: Container( child: Container(
height: 1.0, width: MediaQuery.of(context).size.width,
width: 300.0, margin: EdgeInsets.symmetric(horizontal: 10.0),
color:Colors.grey,), child: productItem.length != 0
), ? slideDetail(productItem)
Container( : Container(),
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text: 'Primary Unit Of Measure',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
),
),
), ),
), );
Container( },
margin: EdgeInsets.all(5), );
child: Align( }).toList(),
alignment: Alignment.topLeft, );
child: RichText( }
text: TextSpan( }
text:
'Each', class slideDetail extends StatefulWidget {
style: TextStyle( final List<PharmacyProduct> data;
color: Colors.black54,
fontSize: 15, slideDetail(this.data);
fontWeight: FontWeight.bold),
@override
_slideDetailState createState() => _slideDetailState();
}
class _slideDetailState extends State<slideDetail> {
@override
Widget build(BuildContext context) {
return ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: widget.data.length,
itemBuilder: (BuildContext contx, int index) {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
height: 550,
width: 150,
margin: EdgeInsets.symmetric(horizontal: 10.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
border: Border(
top: BorderSide(width: 0.5, color: Colors.grey),
left: BorderSide(width: 0.5, color: Colors.grey),
right: BorderSide(width: 0.5, color: Colors.grey),
bottom: BorderSide(width: 0.5, color: Colors.grey),
),
color: Colors.white),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
child: Align(
alignment: Alignment.topRight,
child: IconButton(
icon: Icon(FontAwesomeIcons.trashAlt, size: 15),
onPressed: () {
setState(() {
Provider.of<CompareList>(context, listen: false)
.deleteItem(widget.data[index].id);
});
},
), ),
), ),
), ),
), SizedBox(
Padding( height: 20,
padding: EdgeInsets.only(top: 8.0),
child: Container(
height: 1.0,
width: 300.0,
color:Colors.grey,),
),
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text: 'Primary Unit Of Measure',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
),
),
), ),
), Image.network(
Container( widget.data[index].images[0].src.trim(),
margin: EdgeInsets.all(5), fit: BoxFit.cover,
child: Align( width: 100,
alignment: Alignment.topLeft, height: 60,
child: RichText(
text: TextSpan(
text:
'Each',
style: TextStyle(
color: Colors.black54,
fontSize: 15,
fontWeight: FontWeight.bold),
),
),
), ),
), Padding(
Padding( padding: EdgeInsets.only(top: 8.0),
padding: EdgeInsets.only(top: 8.0), child: Container(
child: Container( height: 1.0,
height: 1.0, width: 300.0,
width: 300.0, color: Colors.grey,
color:Colors.grey,),
),
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text: 'Primary Unit Of Measure',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
),
), ),
), ),
), Container(
Container( margin: EdgeInsets.all(5),
margin: EdgeInsets.all(5), child: Align(
child: Align( alignment: Alignment.topLeft,
alignment: Alignment.topLeft, child: RichText(
child: RichText( text: TextSpan(
text: TextSpan( text: widget.data[index].name,
text: style: TextStyle(
'Each', fontWeight: FontWeight.bold,
style: TextStyle( color: Colors.black,
color: Colors.black54, fontSize: 13),
fontSize: 15, ),
fontWeight: FontWeight.bold),
), ),
), ),
), ),
), Container(
Padding( margin: EdgeInsets.all(5),
padding: EdgeInsets.only(top: 8.0), child: Align(
child: Container( alignment: Alignment.topLeft,
height: 1.0, child: RichText(
width: 300.0, text: TextSpan(
color:Colors.grey,), text: widget.data[index].price.toString(),
), style: TextStyle(
Container( color: Colors.black54,
margin: EdgeInsets.all(5), fontSize: 15,
child: Align( fontWeight: FontWeight.bold),
alignment: Alignment.topLeft, ),
child: RichText(
text: TextSpan(
text: 'Primary Unit Of Measure',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
), ),
), ),
), ),
), Padding(
Container( padding: EdgeInsets.only(top: 8.0),
margin: EdgeInsets.all(5), child: Container(
child: Align( height: 1.0,
alignment: Alignment.topLeft, width: 300.0,
child: RichText( color: Colors.grey,
text: TextSpan(
text:
'Each',
style: TextStyle(
color: Colors.black54,
fontSize: 15,
fontWeight: FontWeight.bold),
),
),
),
),
Padding(
padding: EdgeInsets.only(top: 8.0),
child: Container(
height: 1.0,
width: 300.0,
color:Colors.grey,),
),
],
),
),
),
Container(
height: 800,
width: 150,
margin: EdgeInsets.symmetric(horizontal: 10.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
border: Border(
top: BorderSide(width: 0.5, color: Colors.grey),
left: BorderSide(width: 0.5, color: Colors.grey),
right: BorderSide(width: 0.5, color: Colors.grey),
bottom: BorderSide(width: 0.5, color: Colors.grey),
),
color: Colors.white),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
child: Align(
alignment: Alignment.topRight,
child: Icon(FontAwesomeIcons.trashAlt, size: 15)),
),
SizedBox(height: 20,),
Image(
image: AssetImage(
'assets/images/al-habib_onlne_pharmacy_bg.png'),
fit: BoxFit.cover,
width: 100,
height: 60,
),
Padding(
padding: EdgeInsets.only(top: 8.0),
child: Container(
height: 1.0,
width: 300.0,
color:Colors.grey,),
),
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text: 'SAR 999.99',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
),
), ),
), ),
), Container(
Container( margin: EdgeInsets.all(5),
margin: EdgeInsets.all(5), child: Align(
child: Align( alignment: Alignment.topLeft,
alignment: Alignment.topLeft, child: RichText(
child: RichText( text: TextSpan(
text: TextSpan( text: widget.data[index].specifications[0].name,
text: style: TextStyle(
'ENAD test', fontWeight: FontWeight.bold,
style: TextStyle( color: Colors.black,
color: Colors.black54, fontSize: 13),
fontSize: 15, ),
fontWeight: FontWeight.bold),
), ),
), ),
), ),
), Container(
Padding( margin: EdgeInsets.all(5),
padding: EdgeInsets.only(top: 8.0), child: Align(
child: Container( alignment: Alignment.topLeft,
height: 1.0, child: RichText(
width: 300.0, text: TextSpan(
color:Colors.grey,), text: widget.data[index].specifications[1].name,
), style: TextStyle(
Container( color: Colors.black54,
margin: EdgeInsets.all(5), fontSize: 15,
child: Align( fontWeight: FontWeight.bold),
alignment: Alignment.topLeft, ),
child: RichText(
text: TextSpan(
text: 'Primary Unit Of Measure',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
),
),
),
),
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text:
'Each',
style: TextStyle(
color: Colors.black54,
fontSize: 15,
fontWeight: FontWeight.bold),
),
),
),
),
Padding(
padding: EdgeInsets.only(top: 8.0),
child: Container(
height: 1.0,
width: 300.0,
color:Colors.grey,),
),
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text: 'Primary Unit Of Measure',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
), ),
), ),
), ),
), Padding(
Container( padding: EdgeInsets.only(top: 8.0),
margin: EdgeInsets.all(5), child: Container(
child: Align( height: 1.0,
alignment: Alignment.topLeft, width: 300.0,
child: RichText( color: Colors.grey,
text: TextSpan(
text:
'Each',
style: TextStyle(
color: Colors.black54,
fontSize: 15,
fontWeight: FontWeight.bold),
),
), ),
), ),
), Container(
Padding( margin: EdgeInsets.all(5),
padding: EdgeInsets.only(top: 8.0), child: Align(
child: Container( alignment: Alignment.topLeft,
height: 1.0, child: RichText(
width: 300.0, text: TextSpan(
color:Colors.grey,), text: widget.data[index].specifications[2].name,
), style: TextStyle(
Container( fontWeight: FontWeight.bold,
margin: EdgeInsets.all(5), color: Colors.black,
child: Align( fontSize: 13),
alignment: Alignment.topLeft, ),
child: RichText(
text: TextSpan(
text: 'Primary Unit Of Measure',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
), ),
), ),
), ),
), Container(
Container( margin: EdgeInsets.all(5),
margin: EdgeInsets.all(5), child: Align(
child: Align( alignment: Alignment.topLeft,
alignment: Alignment.topLeft, child: RichText(
child: RichText( text: TextSpan(
text: TextSpan( text: widget.data[index].specifications[3].name,
text: style: TextStyle(
'Each', color: Colors.black54,
style: TextStyle( fontSize: 15,
color: Colors.black54, fontWeight: FontWeight.bold),
fontSize: 15, ),
fontWeight: FontWeight.bold),
), ),
), ),
), ),
), Padding(
Padding( padding: EdgeInsets.only(top: 8.0),
padding: EdgeInsets.only(top: 8.0), child: Container(
child: Container( height: 1.0,
height: 1.0, width: 300.0,
width: 300.0, color: Colors.grey,
color:Colors.grey,),
),
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text: 'Primary Unit Of Measure',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
),
), ),
), ),
), Container(
Container( margin: EdgeInsets.all(5),
margin: EdgeInsets.all(5), child: Align(
child: Align( alignment: Alignment.topLeft,
alignment: Alignment.topLeft, child: RichText(
child: RichText( text: TextSpan(
text: TextSpan( text: widget.data[index].specifications[4].name,
text: style: TextStyle(
'Each', fontWeight: FontWeight.bold,
style: TextStyle( color: Colors.black,
color: Colors.black54, fontSize: 13),
fontSize: 15, ),
fontWeight: FontWeight.bold),
), ),
), ),
), ),
), Container(
Padding( margin: EdgeInsets.all(5),
padding: EdgeInsets.only(top: 8.0), child: Align(
child: Container( alignment: Alignment.topLeft,
height: 1.0, child: RichText(
width: 300.0, text: TextSpan(
color:Colors.grey,), text: widget.data[index].specifications[5].name,
), style: TextStyle(
Container( color: Colors.black54,
margin: EdgeInsets.all(5), fontSize: 15,
child: Align( fontWeight: FontWeight.bold),
alignment: Alignment.topLeft, ),
child: RichText(
text: TextSpan(
text: 'Primary Unit Of Measure',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
), ),
), ),
), ),
), Padding(
Container( padding: EdgeInsets.only(top: 8.0),
margin: EdgeInsets.all(5), child: Container(
child: Align( height: 1.0,
alignment: Alignment.topLeft, width: 300.0,
child: RichText( color: Colors.grey,
text: TextSpan(
text:
'Each',
style: TextStyle(
color: Colors.black54,
fontSize: 15,
fontWeight: FontWeight.bold),
),
), ),
), ),
), ],
Padding( ),
padding: EdgeInsets.only(top: 8.0),
child: Container(
height: 1.0,
width: 300.0,
color:Colors.grey,),
),
],
), ),
), ),
), ],
], );
), },
], );
); }
}
String returnString(data) {
for (int i = 0; i < data.length; i++) {
print(data[i]);
// if(data[i] == null){
// if(counter == i){
//
// }
// }
}
return "ENAD HILAL";
} }

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:rating_bar/rating_bar.dart'; import 'package:rating_bar/rating_bar.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
void main() => runApp(MyReviewsPage()); void main() => runApp(MyReviewsPage());
@ -11,7 +12,13 @@ class MyReviewsPage extends StatefulWidget {
_MyReviewsPageState createState() => _MyReviewsPageState(); _MyReviewsPageState createState() => _MyReviewsPageState();
} }
var languageID;
class _MyReviewsPageState extends State<MyReviewsPage> { class _MyReviewsPageState extends State<MyReviewsPage> {
void initState() {
getLanguageID();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BaseView<ReviewViewModel>( return BaseView<ReviewViewModel>(
@ -20,25 +27,53 @@ class _MyReviewsPageState extends State<MyReviewsPage> {
appBarTitle: 'Wishlist page', appBarTitle: 'Wishlist page',
isShowAppBar: true, isShowAppBar: true,
isPharmacy: true, isPharmacy: true,
body: Container( body: model.reviewListList.length == 0
child: ListView.builder( ? Container(
itemCount: model.reviewListList.length, child: Center(
itemBuilder: (BuildContext context, int index) { child: Column(
return Column( mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Container( Padding(
child: reviewDetails( padding: const EdgeInsets.all(8.0),
model.reviewListList[index], child: Image.asset(
double.parse(model.reviewListList[index].product 'assets/images/new-design/empty_box.png',
.approvedTotalReviews.toString()), width: 100,
double.parse(model.reviewListList[index].rating.toString()), height: 100,
fit: BoxFit.cover,
),
), ),
), Padding(
Divider(height: 1, color: Colors.grey) padding: const EdgeInsets.all(8.0),
], child: Text(
); 'There is no data',
}), style: TextStyle(fontSize: 30),
), ),
)
],
),
),
)
: Container(
child: ListView.builder(
itemCount: model.reviewListList.length,
itemBuilder: (BuildContext context, int index) {
return Column(
children: [
Container(
child: reviewDetails(
model.reviewListList[index],
double.parse(model.reviewListList[index].product
.approvedTotalReviews
.toString()),
double.parse(model.reviewListList[index].rating
.toString()),
),
),
Divider(height: 1, color: Colors.grey)
],
);
}),
),
), ),
); );
} }
@ -47,7 +82,7 @@ class _MyReviewsPageState extends State<MyReviewsPage> {
reviewDetails(data, rate, myRate) { reviewDetails(data, rate, myRate) {
return Container( return Container(
child: Padding( child: Padding(
padding: const EdgeInsets.only(bottom: 10.0), padding: EdgeInsets.only(bottom: 10.0),
child: Container( child: Container(
height: 200, height: 200,
width: double.infinity, width: double.infinity,
@ -59,7 +94,9 @@ reviewDetails(data, rate, myRate) {
Row( Row(
children: [ children: [
Container( Container(
margin: EdgeInsets.only(top: 10, left: 10), margin: languageID == 'ar'
? EdgeInsets.only(top: 10, right: 10)
: EdgeInsets.only(top: 10, left: 10),
child: Image.network( child: Image.network(
data.product.images[0].src.trim(), data.product.images[0].src.trim(),
fit: BoxFit.cover, fit: BoxFit.cover,
@ -74,13 +111,17 @@ reviewDetails(data, rate, myRate) {
Container( Container(
margin: EdgeInsets.all(5), margin: EdgeInsets.all(5),
child: Align( child: Align(
alignment: Alignment.topLeft, alignment: languageID == 'ar'
? Alignment.topRight
: Alignment.topLeft,
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: data.product.name, text: languageID == 'ar'
? data.product.namen
: data.product.name,
style: TextStyle( style: TextStyle(
color: Colors.black54, color: Colors.black54,
fontSize: 13, fontSize: languageID == 'ar' ? 7 : 13,
fontWeight: FontWeight.bold), fontWeight: FontWeight.bold),
), ),
), ),
@ -91,7 +132,9 @@ reviewDetails(data, rate, myRate) {
Container( Container(
margin: EdgeInsets.all(5), margin: EdgeInsets.all(5),
child: Align( child: Align(
alignment: Alignment.topLeft, alignment: languageID == 'ar'
? Alignment.topRight
: Alignment.topLeft,
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: data.product.price.toString() + text: data.product.price.toString() +
@ -110,7 +153,9 @@ reviewDetails(data, rate, myRate) {
Container( Container(
margin: EdgeInsets.all(5), margin: EdgeInsets.all(5),
child: Align( child: Align(
alignment: Alignment.topLeft, alignment: languageID == 'ar'
? Alignment.topRight
: Alignment.topLeft,
child: RatingBar.readOnly( child: RatingBar.readOnly(
initialRating: rate, initialRating: rate,
size: 15.0, size: 15.0,
@ -139,7 +184,9 @@ reviewDetails(data, rate, myRate) {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Container( Container(
padding: EdgeInsets.only(left: 10), padding: languageID == 'ar'
? EdgeInsets.only(right: 10)
: EdgeInsets.only(left: 10),
child: Text(data.createdOnUtc.toString())), child: Text(data.createdOnUtc.toString())),
], ],
), ),
@ -150,7 +197,9 @@ reviewDetails(data, rate, myRate) {
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
children: [ children: [
Container( Container(
padding: EdgeInsets.only(left: 60), padding: languageID == 'ar'
? EdgeInsets.only(right: 60)
: EdgeInsets.only(left: 60),
child: RatingBar.readOnly( child: RatingBar.readOnly(
initialRating: myRate, initialRating: myRate,
size: 15.0, size: 15.0,
@ -173,7 +222,9 @@ reviewDetails(data, rate, myRate) {
), ),
Expanded( Expanded(
child: Container( child: Container(
padding: EdgeInsets.only(left: 10), padding: languageID == 'ar'
? EdgeInsets.only(right: 10)
: EdgeInsets.only(left: 10),
child: Text(fixingString(data.reviewText.toString())), child: Text(fixingString(data.reviewText.toString())),
), ),
), ),
@ -184,7 +235,7 @@ reviewDetails(data, rate, myRate) {
); );
} }
fixingString(txt){ fixingString(txt) {
String stringTxt; String stringTxt;
String newTxt; String newTxt;
stringTxt = txt.toString(); stringTxt = txt.toString();
@ -192,3 +243,7 @@ fixingString(txt){
return newTxt; return newTxt;
} }
getLanguageID() async {
languageID = await sharedPref.getString(APP_LANGUAGE);
}

@ -1,7 +1,14 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/pages/login/register-info.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/search_brands_page.dart';
import 'package:diplomaticquarterapp/pages/search_products_page.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/brand_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/brand_view_model.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
void main() => runApp(ProductBrandsPage()); void main() => runApp(ProductBrandsPage());
@ -10,26 +17,43 @@ class ProductBrandsPage extends StatefulWidget {
_ProductBrandsPageState createState() => _ProductBrandsPageState(); _ProductBrandsPageState createState() => _ProductBrandsPageState();
} }
var languageID;
class _ProductBrandsPageState extends State<ProductBrandsPage> { class _ProductBrandsPageState extends State<ProductBrandsPage> {
void initState() {
getLanguageID();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BaseView<BrandsViewModel>( return BaseView<BrandsViewModel>(
onModelReady: (model) => model.getTopBrandsData(), onModelReady: (model) => model.getBrandsData(),
builder: (_, model, wi) => AppScaffold( builder: (_, model, wi) => AppScaffold(
appBarTitle: 'Brands page', appBarTitle: 'Brands page',
isShowAppBar: true, isShowAppBar: true,
isPharmacy: true, isPharmacy: true,
isShowDecPage: false,
body: Container( body: Container(
child: Column( child: Column(
children: [ children: [
Container( Container(
color: Colors.white, color: Colors.white,
alignment: Alignment.topLeft, alignment: languageID == 'ar'?
padding: EdgeInsets.only(left: 10.0, top: 10.0), Alignment.topRight :
Alignment.topLeft,
padding: languageID == 'ar' ?
EdgeInsets.only(
right: 10.0,
top: 10.0
):
EdgeInsets.only(
left: 10.0,
top: 10.0
),
child: Text( child: Text(
'Top Brands', TranslationBase.of(context).topBrands,
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.bold fontWeight: FontWeight.bold,
), ),
), ),
), ),
@ -43,13 +67,35 @@ class _ProductBrandsPageState extends State<ProductBrandsPage> {
height: 10, height: 10,
), ),
Container( Container(
height: 100, height: MediaQuery.of(context).size.height * 0.056,
width: double.infinity, decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(5.0),
child: IconButton( color: Colors.white,
icon: Icon(Icons.search), ),
onPressed: () { child: InkWell(
showSearch(context: context, delegate: SearchBar()); child: Padding(
padding: EdgeInsets.all(8.0),
child: Row(
//crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Icon(Icons.search, size: 25.0),
SizedBox(
width: 15.0,
),
Texts(
TranslationBase.of(context).searchProductHere,
fontSize: 13,
)
],
),
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SearchBrandsPage()),
);
}, },
), ),
), ),
@ -57,25 +103,30 @@ class _ProductBrandsPageState extends State<ProductBrandsPage> {
height: 10, height: 10,
), ),
Container( Container(
height: 280, height: 230,
width: double.infinity, width: double.infinity,
color: Colors.white, color: Colors.white,
child: ListView.builder( child: ListView.builder(
itemCount: model.brandsListList.length, itemCount: model.brandsListList.length,
itemBuilder: (BuildContext ctxt, int index) { itemBuilder: (BuildContext context, int index) {
return Container( return InkWell(
margin: EdgeInsets.only(top: 50, left: 10), child: Container(
child: Column( margin: EdgeInsets.only(top: 50, left: 10),
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ mainAxisAlignment: MainAxisAlignment.start,
Text(model.brandsListList[index].name), children: [
SizedBox( languageID == 'ar' ? Text(model.brandsListList[index].namen):Text(model.brandsListList[index].name),
height: 3, SizedBox(
), height: 3,
Divider(height: 1, color: Colors.grey) ),
], Divider(height: 1, color: Colors.grey)
],
),
), ),
onTap: (){
print("ENAD");
},
); );
}), }),
), ),
@ -87,96 +138,6 @@ class _ProductBrandsPageState extends State<ProductBrandsPage> {
} }
} }
//topBrand() {
// return BaseView<BrandsViewModel>(
// onModelReady: (model) => model.getBrandsData(),
// builder: (_, model, wi) => Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// Container(
// padding: EdgeInsets.all(10),
// child: Text(
// 'Top Brands',
// ),
// ),
// Row(
// children: [
// Container(
// margin: EdgeInsets.fromLTRB(10.0, 10.0, 0.0, 0.0),
// child: Container(
// margin: EdgeInsets.only(bottom: 10.0),
// child: Container(
// margin: EdgeInsets.only(bottom: 10.0),
// child: Container(
// child: Container(
// padding: EdgeInsets.symmetric(
// horizontal: 10.0, vertical: 10.0),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10),
// border: Border(
// top: BorderSide(width: 1.0, color: Colors.grey),
// left: BorderSide(width: 1.0, color: Colors.grey),
// right: BorderSide(width: 1.0, color: Colors.grey),
// bottom: BorderSide(width: 1.0, color: Colors.grey),
// ),
// color: Colors.white,
// ),
// child: Image(
// image: AssetImage(
// 'assets/images/al-habib_onlne_pharmacy_bg.png'),
// fit: BoxFit.cover,
// width: 60,
// height: 40,
// ),
// ),
// ),
// ),
// ),
// ),
// ],
// ),
// Row(
// children: [
// Container(
// margin: EdgeInsets.fromLTRB(10.0, 10.0, 0.0, 0.0),
// child: Container(
// margin: EdgeInsets.only(bottom: 10.0),
// child: Container(
// margin: EdgeInsets.only(bottom: 10.0),
// child: Container(
// padding: EdgeInsets.only(left: 5),
// child: Container(
// padding: EdgeInsets.symmetric(
// horizontal: 10.0, vertical: 10.0),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10),
// border: Border(
// top: BorderSide(width: 1.0, color: Colors.grey),
// left: BorderSide(width: 1.0, color: Colors.grey),
// right: BorderSide(width: 1.0, color: Colors.grey),
// bottom: BorderSide(width: 1.0, color: Colors.grey),
// ),
// color: Colors.white,
// ),
// child: Image(
// image: AssetImage(
// 'assets/images/al-habib_onlne_pharmacy_bg.png'),
// fit: BoxFit.cover,
// width: 60,
// height: 40,
// ),
// ),
// ),
// ),
// ),
// ),
// ],
// ),
// ],
// ),
// );
//}
topBrand() { topBrand() {
return BaseView<BrandsViewModel>( return BaseView<BrandsViewModel>(
@ -187,35 +148,40 @@ topBrand() {
model.topBrandsListList.length, model.topBrandsListList.length,
(index) => Column( (index) => Column(
children: [ children: [
Container( InkWell(
margin: EdgeInsets.fromLTRB(5.0, 10.0, 5.0, 0.0),
child: Container( child: Container(
margin: EdgeInsets.fromLTRB(5.0, 10.0, 5.0, 0.0),
child: Container( child: Container(
child: Container( child: Container(
// padding: EdgeInsets.only(left: 5),
child: Container( child: Container(
padding: EdgeInsets.symmetric( // padding: EdgeInsets.only(left: 5),
horizontal: 10.0, vertical: 10.0), child: Container(
decoration: BoxDecoration( padding: EdgeInsets.symmetric(
borderRadius: BorderRadius.circular(10), horizontal: 10.0, vertical: 10.0),
border: Border( decoration: BoxDecoration(
top: BorderSide(width: 1.0, color: Colors.grey), borderRadius: BorderRadius.circular(10),
left: BorderSide(width: 1.0, color: Colors.grey), border: Border(
right: BorderSide(width: 1.0, color: Colors.grey), top: BorderSide(width: 1.0, color: Colors.grey),
bottom: BorderSide(width: 1.0, color: Colors.grey), left: BorderSide(width: 1.0, color: Colors.grey),
right: BorderSide(width: 1.0, color: Colors.grey),
bottom: BorderSide(width: 1.0, color: Colors.grey),
),
color: Colors.white,
), ),
color: Colors.white, child: model.topBrandsListList[index].image != null ?Image.network(
), model.topBrandsListList[index].image.src,
child: Image.network( fit: BoxFit.cover,
model.topBrandsListList[index].image.src.trim(), width: 60,
fit: BoxFit.cover, height: 40,
width: 60, ): Text(model.topBrandsListList[index].name)
height: 40,
), ),
), ),
), ),
), ),
), ),
onTap: (){
print("ENAD");
},
), ),
], ],
), ),
@ -282,3 +248,7 @@ class SearchBar extends SearchDelegate<String> {
); );
} }
} }
getLanguageID() async {
languageID = await sharedPref.getString(APP_LANGUAGE);
}

File diff suppressed because it is too large Load Diff

@ -1,6 +1,7 @@
import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/ShoppingCartResponse.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/ShoppingCartResponse.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-preview.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-preview.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/pharmacy-terms-conditions-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/pharmacy-terms-conditions-page.dart';
@ -95,13 +96,13 @@ class CartOrderPage extends StatelessWidget {
MainAxisAlignment.spaceBetween, MainAxisAlignment.spaceBetween,
children: [ children: [
Texts( Texts(
"Subtotal", TranslationBase.of(context).subtotal,
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
), ),
Texts( Texts(
"SAR ${(cart.subtotal).toStringAsFixed(2)}", "${TranslationBase.of(context).sar} ${(cart.subtotal).toStringAsFixed(2)}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@ -120,13 +121,13 @@ class CartOrderPage extends StatelessWidget {
MainAxisAlignment.spaceBetween, MainAxisAlignment.spaceBetween,
children: [ children: [
Texts( Texts(
"VAT (15%)", "${TranslationBase.of(context).vat}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
), ),
Texts( Texts(
"SAR ${(cart.subtotalVatAmount).toStringAsFixed(2)}", "${TranslationBase.of(context).sar} ${(cart.subtotalVatAmount).toStringAsFixed(2)}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@ -151,7 +152,7 @@ class CartOrderPage extends StatelessWidget {
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
Texts( Texts(
"SAR ${(cart.subtotal).toStringAsFixed(2)}", "${TranslationBase.of(context).sar} ${(cart.subtotal).toStringAsFixed(2)}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@ -181,7 +182,9 @@ class CartOrderPage extends StatelessWidget {
: Container(), : Container(),
bottomSheet: Container( bottomSheet: Container(
height: !(model.cartResponse.shoppingCarts == null || height: !(model.cartResponse.shoppingCarts == null ||
model.cartResponse.shoppingCarts.length == 0) ? height * 0.15 : 0, model.cartResponse.shoppingCarts.length == 0)
? height * 0.15
: 0,
color: Colors.white, color: Colors.white,
child: OrderBottomWidget(model.addresses, height), child: OrderBottomWidget(model.addresses, height),
), ),
@ -206,6 +209,8 @@ class _OrderBottomWidgetState extends State<OrderBottomWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectProvider = Provider.of(context);
return Container( return Container(
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0), margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0),
child: Consumer<ShoppingCartResponse>( child: Consumer<ShoppingCartResponse>(
@ -238,7 +243,9 @@ class _OrderBottomWidgetState extends State<OrderBottomWidget> {
width: 25.0, width: 25.0,
height: widget.height * 0.070, height: widget.height * 0.070,
decoration: new BoxDecoration( decoration: new BoxDecoration(
color: !isAgree ? Color(0xffeeeeee) : Colors.green, color: !isAgree
? Color(0xffeeeeee)
: Colors.green,
shape: BoxShape.circle, shape: BoxShape.circle,
), ),
child: !isAgree child: !isAgree
@ -258,7 +265,8 @@ class _OrderBottomWidgetState extends State<OrderBottomWidget> {
padding: EdgeInsets.symmetric(horizontal: 4), padding: EdgeInsets.symmetric(horizontal: 4),
margin: const EdgeInsets.symmetric(vertical: 4), margin: const EdgeInsets.symmetric(vertical: 4),
child: Texts( child: Texts(
"I agree with the terms of service and I adhere to them unconditionally", TranslationBase.of(context)
.pharmacyServiceTermsCondition,
fontSize: 13, fontSize: 13,
color: Colors.grey.shade800, color: Colors.grey.shade800,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
@ -267,10 +275,8 @@ class _OrderBottomWidgetState extends State<OrderBottomWidget> {
), ),
InkWell( InkWell(
onTap: () => { onTap: () => {
Navigator.push( Navigator.push(context,
context, FadePage(page: PharmacyTermsConditions()))
FadePage(
page: PharmacyTermsConditions()))
}, },
child: Container( child: Container(
child: Icon( child: Icon(
@ -290,39 +296,43 @@ class _OrderBottomWidgetState extends State<OrderBottomWidget> {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Column( Expanded(
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
Container( mainAxisAlignment: MainAxisAlignment.center,
margin: EdgeInsets.symmetric( children: [
horizontal: 0, vertical: 4), Container(
child: Row( margin: EdgeInsets.symmetric(
children: [ horizontal: 0, vertical: 0),
Texts( child: Row(
"SAR ${(cart.subtotal).toStringAsFixed(2)}", children: [
fontSize: 14, Texts(
fontWeight: FontWeight.bold, "${TranslationBase.of(context).sar} ${(cart.subtotal).toStringAsFixed(2)}",
), fontSize:
Padding( projectProvider.isArabic ? 12 : 14,
padding: const EdgeInsets.symmetric(
horizontal: 4),
child: Texts(
"(inclusive VAT)",
fontSize: 8,
color: Colors.grey,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), Padding(
], padding: const EdgeInsets.symmetric(
horizontal: 4),
child: Texts(
"${TranslationBase.of(context).inclusiveVat}",
fontSize: 8,
color: Colors.grey,
fontWeight: FontWeight.bold,
),
),
],
),
), ),
), Texts(
Texts( "${cart.quantityCount} ${TranslationBase.of(context).items}",
"${cart.quantityCount} item(s)", fontSize: 10,
fontSize: 10, color: Colors.grey,
color: Colors.grey, fontWeight: FontWeight.bold,
fontWeight: FontWeight.bold, ),
), ],
], ),
), ),
RaisedButton( RaisedButton(
onPressed: isAgree onPressed: isAgree
@ -335,7 +345,7 @@ class _OrderBottomWidgetState extends State<OrderBottomWidget> {
} }
: null, : null,
child: new Text( child: new Text(
"CHECK OUT", "${TranslationBase.of(context).checkOut}",
style: new TextStyle( style: new TextStyle(
color: isAgree color: isAgree
? Colors.white ? Colors.white
@ -345,19 +355,9 @@ class _OrderBottomWidgetState extends State<OrderBottomWidget> {
color: Color(0xff005aff), color: Color(0xff005aff),
disabledColor: Color(0xff005aff), disabledColor: Color(0xff005aff),
), ),
/* SecondaryButton(
label: "CHECK OUT",
color: Colors.blueAccent,
textColor: Colors.white,
onTap: (() {
Navigator.push(
context, FadePage(page: OrderPreviewPage(widget.addresses)));
}),
disabled: isAgree ? false : true,
)*/
], ],
), ),
) ),
], ],
) )
: Container(), : Container(),

@ -2,11 +2,13 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/address-select-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/address-select-page.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/payment-method-select-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/payment-method-select-page.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/pharmacy_module_page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/pharmacy_module_page.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderPreviewItem.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderPreviewItem.dart';
import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -22,7 +24,8 @@ class OrderPreviewPage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
PreferredSizeWidget appBarWidget = AppBarWidget("Check out", null, true); PreferredSizeWidget appBarWidget =
AppBarWidget("${TranslationBase.of(context).checkOut}", null, true);
final mediaQuery = MediaQuery.of(context); final mediaQuery = MediaQuery.of(context);
final height = mediaQuery.size.height - final height = mediaQuery.size.height -
appBarWidget.preferredSize.height - appBarWidget.preferredSize.height -
@ -33,7 +36,7 @@ class OrderPreviewPage extends StatelessWidget {
builder: (_, model, wi) => ChangeNotifierProvider.value( builder: (_, model, wi) => ChangeNotifierProvider.value(
value: model.paymentCheckoutData, value: model.paymentCheckoutData,
child: AppScaffold( child: AppScaffold(
title: "Check out", title: "${TranslationBase.of(context).checkOut}",
isShowAppBar: true, isShowAppBar: true,
isShowDecPage: false, isShowDecPage: false,
appBarWidget: appBarWidget, appBarWidget: appBarWidget,
@ -114,13 +117,13 @@ class OrderPreviewPage extends StatelessWidget {
MainAxisAlignment.spaceBetween, MainAxisAlignment.spaceBetween,
children: [ children: [
Texts( Texts(
"Subtotal", "${TranslationBase.of(context).subtotal}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
), ),
Texts( Texts(
"SAR ${(model.cartResponse.subtotal).toStringAsFixed(2)}", "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@ -139,13 +142,13 @@ class OrderPreviewPage extends StatelessWidget {
MainAxisAlignment.spaceBetween, MainAxisAlignment.spaceBetween,
children: [ children: [
Texts( Texts(
"Shipping", "${TranslationBase.of(context).shipping}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
), ),
Texts( Texts(
"SAR ${(model.totalAdditionalShippingCharge).toStringAsFixed(2)}", "${TranslationBase.of(context).sar} ${(model.totalAdditionalShippingCharge).toStringAsFixed(2)}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@ -164,13 +167,13 @@ class OrderPreviewPage extends StatelessWidget {
MainAxisAlignment.spaceBetween, MainAxisAlignment.spaceBetween,
children: [ children: [
Texts( Texts(
"VAT (15%)", "${TranslationBase.of(context).vat}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
), ),
Texts( Texts(
"SAR ${(model.cartResponse.subtotalVatAmount).toStringAsFixed(2)}", "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotalVatAmount).toStringAsFixed(2)}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@ -195,7 +198,7 @@ class OrderPreviewPage extends StatelessWidget {
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
Texts( Texts(
"SAR ${(model.cartResponse.subtotal).toStringAsFixed(2)}", "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}",
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@ -215,7 +218,9 @@ class OrderPreviewPage extends StatelessWidget {
), ),
), ),
bottomSheet: Container( bottomSheet: Container(
height: model.cartResponse.shoppingCarts != null ? height * 0.10 : 0, height: model.cartResponse.shoppingCarts != null
? height * 0.10
: 0,
color: Colors.white, color: Colors.white,
child: PaymentBottomWidget(model), child: PaymentBottomWidget(model),
), ),
@ -238,12 +243,14 @@ class _SelectAddressWidgetState extends State<SelectAddressWidget> {
Addresses address; Addresses address;
_navigateToAddressPage() { _navigateToAddressPage() {
Navigator.push( Navigator.push(context, FadePage(page: PharmacyAddressesPage()))
context, FadePage(page: AddressSelectPageTest(widget.addresses)))
.then((result) { .then((result) {
address = result; if (result != null) {
widget.model.paymentCheckoutData.address = address; address = result;
widget.model.getInformationsByAddress(); widget.model.paymentCheckoutData.address = address;
widget.model.getInformationsByAddress();
}
/* setState(() { /* setState(() {
if (result != null) { if (result != null) {
address = result; address = result;
@ -396,7 +403,7 @@ class _SelectAddressWidgetState extends State<SelectAddressWidget> {
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
vertical: 0, horizontal: 6), vertical: 0, horizontal: 6),
child: Texts( child: Texts(
"SHIP BY:", "${TranslationBase.of(context).shipBy}",
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Colors.black, color: Colors.black,
@ -562,6 +569,8 @@ class _LakumWidgetState extends State<LakumWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectProvider = Provider.of(context);
return Container( return Container(
color: Colors.white, color: Colors.white,
padding: EdgeInsets.symmetric(vertical: 12, horizontal: 12), padding: EdgeInsets.symmetric(vertical: 12, horizontal: 12),
@ -579,7 +588,7 @@ class _LakumWidgetState extends State<LakumWidget> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Texts( Texts(
"Lakum Points", "${TranslationBase.of(context).lakumPoints}",
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
@ -599,23 +608,29 @@ class _LakumWidgetState extends State<LakumWidget> {
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
children: [ children: [
Texts( Texts(
"Riyal", "${TranslationBase.of(context).riyal}",
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
Container( Container(
margin: EdgeInsets.only(left: 4), margin: projectProvider.isArabic
? EdgeInsets.only(right: 4)
: EdgeInsets.only(left: 4),
width: 60, width: 60,
height: 40, height: 50,
child: TextField( child: TextField(
decoration: InputDecoration( decoration: InputDecoration(
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: borderSide:
BorderSide(color: Colors.black, width: 0.2), BorderSide(color: Colors.black, width: 0.2),
gapPadding: 0, gapPadding: 0,
borderRadius: BorderRadius.only( borderRadius: projectProvider.isArabic
topLeft: Radius.circular(8), ? BorderRadius.only(
bottomLeft: Radius.circular(8)), topRight: Radius.circular(8),
bottomRight: Radius.circular(8))
: BorderRadius.only(
topLeft: Radius.circular(8),
bottomLeft: Radius.circular(8)),
), ),
disabledBorder: OutlineInputBorder( disabledBorder: OutlineInputBorder(
borderSide: borderSide:
@ -670,21 +685,25 @@ class _LakumWidgetState extends State<LakumWidget> {
), ),
), ),
Container( Container(
height: 40, height: 50,
padding: EdgeInsets.symmetric(horizontal: 8, vertical: 12), padding: EdgeInsets.symmetric(horizontal: 8, vertical: 12),
decoration: new BoxDecoration( decoration: new BoxDecoration(
color: Color(0xff3666E0), color: Color(0xff3666E0),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
borderRadius: BorderRadius.only( borderRadius: projectProvider.isArabic
topRight: Radius.circular(6), ? BorderRadius.only(
bottomRight: Radius.circular(6)), topLeft: Radius.circular(6),
bottomLeft: Radius.circular(6))
: BorderRadius.only(
topRight: Radius.circular(6),
bottomRight: Radius.circular(6)),
border: Border.fromBorderSide(BorderSide( border: Border.fromBorderSide(BorderSide(
color: Color(0xff3666E0), color: Color(0xff3666E0),
width: 0.8, width: 0.8,
)), )),
), ),
child: Texts( child: Texts(
"USE", "${TranslationBase.of(context).use}",
fontSize: 12, fontSize: 12,
color: Colors.white, color: Colors.white,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@ -727,7 +746,7 @@ class PaymentBottomWidget extends StatelessWidget {
child: Row( child: Row(
children: [ children: [
Texts( Texts(
"SAR ${(model.cartResponse.subtotal).toStringAsFixed(2)}", "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}",
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Color(0xff929295), color: Color(0xff929295),
@ -736,7 +755,7 @@ class PaymentBottomWidget extends StatelessWidget {
padding: padding:
const EdgeInsets.symmetric(horizontal: 4), const EdgeInsets.symmetric(horizontal: 4),
child: Texts( child: Texts(
"(inclusive VAT)", "${TranslationBase.of(context).inclusiveVat}",
fontSize: 8, fontSize: 8,
color: Color(0xff929295), color: Color(0xff929295),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
@ -746,7 +765,7 @@ class PaymentBottomWidget extends StatelessWidget {
), ),
), ),
Texts( Texts(
"${model.cartResponse.quantityCount} item(s)", "${model.cartResponse.quantityCount} ${TranslationBase.of(context).items}",
fontSize: 10, fontSize: 10,
color: Colors.grey, color: Colors.grey,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@ -785,7 +804,7 @@ class PaymentBottomWidget extends StatelessWidget {
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric(vertical: 16), padding: const EdgeInsets.symmetric(vertical: 16),
child: new Text( child: new Text(
"PROCEED TO PAY", "${TranslationBase.of(context).proceedPay}",
style: new TextStyle( style: new TextStyle(
color: (paymentData.address != null && color: (paymentData.address != null &&
paymentData.paymentOption != null) paymentData.paymentOption != null)

@ -8,12 +8,14 @@ import 'package:diplomaticquarterapp/pages/pharmacies/screens/lakum-main-page.da
import 'package:diplomaticquarterapp/pages/pharmacies/widgets/BannerPager.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/widgets/BannerPager.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductTileItem.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductTileItem.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/widgets/manufacturerItem.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/widgets/manufacturerItem.dart';
import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/borderedButton.dart'; import 'package:diplomaticquarterapp/widgets/buttons/borderedButton.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/product-brands.dart';
import 'lacum-activitaion-vida-page.dart'; import 'lacum-activitaion-vida-page.dart';
@ -53,7 +55,9 @@ class PharmacyPage extends StatelessWidget {
hPadding: 4, hPadding: 4,
borderColor: Colors.green, borderColor: Colors.green,
textColor: Colors.green, textColor: Colors.green,
handler: () {}, handler: () =>{
Navigator.push(context,FadePage(page: ProductBrandsPage())),
},
), ),
], ],
), ),
@ -189,7 +193,9 @@ class GridViewButtons extends StatelessWidget {
opacity: 0, opacity: 0,
hasColorFilter: false, hasColorFilter: false,
child: GridViewCard(TranslationBase.of(context).myPrescriptions, child: GridViewCard(TranslationBase.of(context).myPrescriptions,
'assets/images/pharmacy_module/prescription_icon.png', () {}), 'assets/images/pharmacy_module/prescription_icon.png', () {
Navigator.push(context, FadePage(page: PharmacyAddressesPage()));
}),
), ),
DashboardItem( DashboardItem(
imageName: 'pharmacy_module/bg_4.png', imageName: 'pharmacy_module/bg_4.png',

@ -0,0 +1,145 @@
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/brand_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/input/text_field.dart';
import 'package:diplomaticquarterapp/widgets/others/StarRating.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_pharmacy_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart';
import 'package:flutter/material.dart';
class SearchBrandsPage extends StatefulWidget {
@override
_SearchBrandsPageState createState() => _SearchBrandsPageState();
}
class _SearchBrandsPageState extends State<SearchBrandsPage> {
final textController = TextEditingController();
final _formKey = GlobalKey<FormState>();
String msg = '';
@override
Widget build(BuildContext context) {
return BaseView<BrandsViewModel>(
onModelReady: (model) => model.searchProducts(),
builder: (BuildContext context, model, Widget child) =>
PharmacyAppScaffold(
appBarTitle: 'Search',
isBottomBar: false,
isShowAppBar: true,
backgroundColor: Colors.white,
isShowDecPage: false,
//baseViewModel: model,
body: SingleChildScrollView(
child: Container(
height: SizeConfig.screenHeight,
child: Column(
children: [
Padding(
padding: EdgeInsets.all(8.0),
child: Row(
children: [
Container(
width: MediaQuery.of(context).size.width * 0.79,
child: Form(
key: _formKey,
child: TextFields(
autoFocus: true,
hintText: 'Search',
fontSize: 19.0,
prefixIcon: Icon(Icons.search),
inputAction: TextInputAction.search,
onSaved: (value) {
//searchMedicine(model, context);
},
onSubmit: (value) {
searchMedicine(model, context);
msg = 'No Result Found';
},
controller: textController,
validator: (value) {
if (value.isEmpty) {
return 'please Enter Product Name';
}
return null;
},
),
),
),
SizedBox(
width: 10.0,
),
InkWell(
child: Texts(
'Cancel',
fontSize: 17.0,
fontWeight: FontWeight.w500,
),
onTap: () {
Navigator.pop(context);
},
),
// child: Container(
// child: Button(
// backgroundColor: Colors.green,
// loading: model.state == ViewState.BusyLocal,
// label: 'Search',
// onTap: () {
// searchMedicine(model, context);
// }),
// width: MediaQuery.of(context).size.width * 0.09,
// ),
],
),
),
model.searchList.length == 0
? Container(
child: Text(
'no data' + model.searchList.length.toString()),
)
: Expanded(
child: Container(
child: ListView.builder(
itemCount: model.searchList.length,
itemBuilder: (BuildContext ctx, index) {
return Padding(
padding:EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
child: Text(
model.searchList[index].name,
style: TextStyle(fontSize: 20),
),
),
),
Divider(height: 1, color: Colors.grey)
],),
);
},
),
),
),
],
),
),
),
),
);
}
searchMedicine(model, BuildContext context) {
Utils.hideKeyboard(context);
if (_formKey.currentState.validate())
model.searchProducts(productName: textController.text);
}
}

@ -1,6 +1,7 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/product_detail.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/phramacy-product-detail-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/phramacy-product-detail-page.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
@ -17,7 +18,7 @@ class ProductTileItem extends StatelessWidget {
void productOnClick(BuildContext ctx) { void productOnClick(BuildContext ctx) {
_saveLastVisitProducts(); _saveLastVisitProducts();
Navigator.push(ctx, FadePage(page: ProductDetailScreen(item))); Navigator.push(ctx, FadePage(page: ProductDetailPage(item)));
} }
void _saveLastVisitProducts() async { void _saveLastVisitProducts() async {

@ -4,11 +4,9 @@ import 'package:diplomaticquarterapp/pages/pharmacies/ProductCheckTypeWidget.dar
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
void main() => runApp(WishlistPage()); void main() => runApp(WishlistPage());
class WishlistPage extends StatefulWidget { class WishlistPage extends StatefulWidget {
@override @override
_WishlistPageState createState() => _WishlistPageState(); _WishlistPageState createState() => _WishlistPageState();
} }
@ -23,50 +21,48 @@ class _WishlistPageState extends State<WishlistPage> {
appBarTitle: 'Wishlist page', appBarTitle: 'Wishlist page',
isShowAppBar: true, isShowAppBar: true,
isPharmacy: true, isPharmacy: true,
body: Container( body: model.wishListList.length == 0
// child: ListView.builder( ? Container(
// itemCount: 3, child: Center(
// itemBuilder: (BuildContext context, int index) { child: Column(
// return Column( mainAxisAlignment: MainAxisAlignment.center,
// children: [ children: [
// Container( Padding(
// child: productTile(productName: 'Panadol Extra 500 MG', productPrice: '10.00', productRate: 3.00,), padding: const EdgeInsets.all(8.0),
// ), child: Image.asset(
// Divider(height: 1, color: Colors.grey) 'assets/images/new-design/empty_box.png',
// ], width: 100,
// ); height: 100,
// }), fit: BoxFit.cover,
child: Column( ),
children: [ ),
// Expanded( Padding(
// flex: 1, padding: const EdgeInsets.all(8.0),
// child: Container( child: Text(
// color: Colors.white, 'There is no data',
// width: double.infinity, style: TextStyle(fontSize: 30),
// height: 30, ),
// child: IconButton( )
// alignment: Alignment.topRight, ],
// icon: Icon(Icons.art_track), ),
// color: Colors.blueAccent, ),
// onPressed: () { )
// setState(() { : Container(
// isTrue = !isTrue; child: Column(
// }); children: [
// }, Expanded(
// ), flex: 20,
// ), child: Container(
// ), width: double.infinity,
Expanded( height:
flex: 20, MediaQuery.of(context).size.height * 0.85, //250,
child: Container( child:
width: double.infinity, ProductCheckTypeWidget(isTrue, model.wishListList),
height: MediaQuery.of(context).size.height * 0.85, //250, ),
child: ProductCheckTypeWidget(isTrue, model.wishListList), ),
],
),
), ),
),
],
),
),
), ),
); );
} }

@ -1,127 +1,82 @@
import 'package:diplomaticquarterapp/widgets/avatar/large_avatar.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/widgets/buttons/borderedButton.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/pickupLocation/PickupLocationFromMap.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_html/style.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:geolocator/geolocator.dart';
import 'package:google_maps_place_picker/google_maps_place_picker.dart';
class AddAddressPage extends StatefulWidget { class AddAddressPage extends StatefulWidget {
final Addresses editedAddress;
final Function(PickResult) onPick;
AddAddressPage(this.editedAddress, this.onPick);
@override @override
_AddAddressState createState() => _AddAddressState(); _AddAddressPageState createState() => _AddAddressPageState();
} }
class _AddAddressState extends State<AddAddressPage> { class _AddAddressPageState extends State<AddAddressPage> {
double _latitude;
double _longitude;
void onMapCreated(controller){
setState(() {
mapController= controller;
});
}
void _getAddressFromLatLng() {}
_onMapTypeButtonPressed(){}
_onAddMarkerButtonPressed(){}
LatLng _initialPosition;
GoogleMapController mapController;
@override @override
void initState() { void initState() {
// TODO: implement initState
_initialPosition = LatLng(24.662617030, 46.7334844);
super.initState(); super.initState();
if (widget.editedAddress != null &&
widget.editedAddress.latLong != null &&
widget.editedAddress.latLong != "") {
List<String> latLng = widget.editedAddress.latLong.split(",");
_latitude = double.parse(latLng[0]);
_longitude = double.parse(latLng[1]);
} else {
_getCurrentLocation();
}
} }
void _onMapCreated(GoogleMapController controller) { _getCurrentLocation() async {
mapController = controller; await Geolocator.getLastKnownPosition().then((value) {
_latitude = value.latitude;
_longitude = value.longitude;
}).catchError((e) {
_longitude = 0;
_latitude = 0;
});
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( PreferredSizeWidget appBarWidget = AppBarWidget(
appBar: AppBar( "${TranslationBase.of(context).changeAddress}", null, true);
centerTitle: true, final mediaQuery = MediaQuery.of(context);
title: Text(TranslationBase.of(context).addNewAddress, style: TextStyle(color:Colors.white)), final height = mediaQuery.size.height -
backgroundColor: Colors.green, appBarWidget.preferredSize.height -
), mediaQuery.padding.top;
body: Stack(
children: <Widget> [ return BaseView<PharmacyAddressesViewModel>(
GoogleMap( builder: (_, model, wi) => AppScaffold(
zoomControlsEnabled: true, appBarTitle: TranslationBase.of(context).changeAddress,
myLocationButtonEnabled: true, isShowAppBar: true,
myLocationEnabled: true, isPharmacy: true,
onMapCreated: _onMapCreated, backgroundColor: Colors.white,
onCameraMove: (object) { appBarWidget: appBarWidget,
// widget.currentLat = object.target.latitude; body: Container(
// widget.currentLong = object.target.longitude; height: height * 1,
}, child: PickupLocationFromMap(
onCameraIdle: _getAddressFromLatLng, latitude: _latitude,
padding: EdgeInsets.only(bottom: 90.0), longitude: _longitude,
initialCameraPosition: CameraPosition( isWithAppBar: false,
target: _initialPosition, buttonColor: Color(0xFF5AB145),
zoom: 13.0, buttonLabel: TranslationBase.of(context).save,
), onPick: (value) {
), widget.onPick(value);
// Align( },
// alignment: Alignment.topRight,
// child: Column(
// children:<Widget> [
// button(_onMapTypeButtonPressed,Icons.map),
// SizedBox(
// height:16.0,
// ),
// button(_onAddMarkerButtonPressed, Icons.add_location)
// ],
// ),
// ),
]
),
bottomSheet: InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return AddAddressPage();
}),
);
},
child: Container(
height: 50.0,
color: Colors.green,
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.green,
style: BorderStyle.solid,
width: 1.0
),
color: Colors.green,
borderRadius: BorderRadius.circular(10.0)
),
child: Center(
child: Text(TranslationBase.of(context).confirmLocation,
style: TextStyle(
color: Colors.white,
fontSize: 15.0,
fontWeight: FontWeight.bold,
),
),
),
), ),
), ),
), ),
); );
} }
// Widget button(Function function, IconData icon){
// return FloatingActionButton(
// onPressed: function,
// materialTapTargetSize: MaterialTapTargetSize.padded,
// backgroundColor: Colors.red,
// child: Icon(
// icon,
// size: 18.0,
// ),);
// }
} }

@ -1,378 +1,320 @@
import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/widgets/buttons/borderedButton.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/AddAddress.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/AddAddress.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/services/pharmacy_services/pharmacyAddress_service.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyAddressesModel.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.dart';
class PharmacyAddressesPage extends StatefulWidget{
class PharmacyAddressesPage extends StatefulWidget {
@override @override
_PharmacyAddressesState createState() => _PharmacyAddressesState(); _PharmacyAddressesState createState() => _PharmacyAddressesState();
} }
class _PharmacyAddressesState extends State<PharmacyAddressesPage>{
String address="";
int selectedRadio;
bool _value = false;
AppSharedPreferences sharedPref = AppSharedPreferences(); class _PharmacyAddressesState extends State<PharmacyAddressesPage> {
@override
void initState(){
// WidgetsBinding.instance.addPostFrameCallback((_) => getAllAddress());
super.initState(); void navigateToAddressPage(
selectedRadio=0; BuildContext ctx, PharmacyAddressesViewModel model, Addresses address) {
} Navigator.push(
setSelectedRadio(int val){ ctx,
setState(() { FadePage(
selectedRadio = val; page: AddAddressPage(address, (pickResult) {
}); model.addEditAddress(pickResult, address);
})));
} }
Widget build (BuildContext context){ Widget build(BuildContext context) {
PreferredSizeWidget appBarWidget = AppBarWidget(
"${TranslationBase.of(context).changeAddress}", null, true);
final mediaQuery = MediaQuery.of(context);
final height = mediaQuery.size.height -
appBarWidget.preferredSize.height -
mediaQuery.padding.top;
return BaseView<PharmacyAddressesViewModel>( return BaseView<PharmacyAddressesViewModel>(
onModelReady: (model) => model.getAddress(address), onModelReady: (model) => model.getAddressesList(),
builder: (_,model, wi )=> AppScaffold( builder: (_, model, wi) => AppScaffold(
appBarTitle:TranslationBase.of(context).changeAddress, appBarTitle: TranslationBase.of(context).changeAddress,
baseViewModel: model,
isShowAppBar: true, isShowAppBar: true,
isPharmacy:true , isPharmacy: true,
baseViewModel: model,
backgroundColor: Colors.white,
appBarWidget: appBarWidget,
body: Container( body: Container(
child:SingleChildScrollView( height: height * 0.90,
child: SingleChildScrollView(
child: Column( child: Column(
children:<Widget>[ children: <Widget>[
ListView.builder( ...List.generate(
scrollDirection: Axis.vertical, model.addresses != null ? model.addresses.length : 0,
shrinkWrap: true, (index) => AddressItemWidget(
physics: ScrollPhysics(), model,
itemCount: model.address.length, model.addresses[index],
itemBuilder: (context, index){ () {
return Container( setState(() {
child: Padding( model.setSelectedAddressIndex(index);
padding:EdgeInsets.only(top:10.0, left:5.0, right:5.0, bottom:5.0,), });
child: Column( },
children: [ model.selectedAddressIndex == index,
Row( (address) {
crossAxisAlignment: CrossAxisAlignment.center, navigateToAddressPage(context, model, address);
children:<Widget> [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children:<Widget> [
InkWell(
onTap: () {
setState(() {
_value = !_value;
});
},
child: Container(
margin: EdgeInsets.only(right: 20),
child: Padding(
padding: const EdgeInsets.all(5.0),
child: _value
? Container(
child: SvgPicture.asset(
'assets/images/pharmacy/check_icon.svg',
height: 25,
width: 25,),
)
: Container(
child: SvgPicture.asset(
'assets/images/pharmacy/check_icon.svg',
height: 23,
width: 23,
color: Colors.transparent,
),
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey,
style: BorderStyle.solid,
width: 1.0
),
color: Colors.transparent,
borderRadius: BorderRadius.circular(50.0)
),
),
),
),
),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children:<Widget> [
Text('name',
// model.address[0].customers[0].addresses[0].firstName,
style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold,
),
),
SizedBox(
height: 5,),
Expanded(
child: Text(model.address[0].customers[0].addresses[0].address1+ ''+
model.address[0].customers[0].addresses[0].address2+ '' +
model.address[0].customers[0].addresses[0].zipPostalCode,
style: TextStyle(fontSize: 15.0, color: Colors.grey,
),
),
),
SizedBox(
height: 5,),
Row(
children:<Widget> [
Container(
margin: EdgeInsets.only(bottom: 8),
child: SvgPicture.asset(
'assets/images/pharmacy/mobile_number_icon.svg',
height: 13,),
),
Container(
margin: EdgeInsets.only(left: 10, bottom: 8),
child: Text('588888778',
style: TextStyle(fontSize: 15.0,
),
),
),
],
),
SizedBox(
height: 15,),
Row(
children:<Widget> [
Column(
children: <Widget> [
InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return AddAddressPage();
}),
);
},
child: Row(
children:<Widget> [
Container(
margin: EdgeInsets.only(right:10, bottom: 15),
child: SvgPicture.asset(
'assets/images/pharmacy/edit_icon.svg',
height: 15,),
),
Container(
margin: EdgeInsets.only(right:5, bottom: 15),
padding: EdgeInsets.only(right: 10.0),
child: Text(TranslationBase.of(context).edit,
style: TextStyle(fontSize: 15.0,
color: Colors.blue,
),
),
decoration: BoxDecoration(
border: Border(
right: BorderSide(
color: Colors.grey,
width: 1.0,
),
),
),
),
],
),
),
],
),
Column(
children: <Widget> [
InkWell(
onTap: () {
// confirmDelete(snapshot.data[index]["id"]);
confirmDelete("address");
},
child: Row(
children:<Widget> [
Container(
margin: EdgeInsets.only(left: 15, right: 10, bottom: 15),
child: SvgPicture.asset(
'assets/images/pharmacy/delete_red_icon.svg',
height: 15,),
),
Container(
margin: EdgeInsets.only(bottom: 15),
child: Text(TranslationBase.of(context).delete,
style: TextStyle(fontSize: 15.0,
color: Colors.redAccent,
),
),
),
],
),
),
],
)
],
),
],
),
SizedBox(
height: 10,
),
],
),
Divider(
color: Colors.grey[350],
height: 20,
thickness: 6,
indent: 0,
endIndent: 0,
),
],
),
),
);
}
),
SizedBox(
height: 10,
),
InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return AddAddressPage();
}), }),
); ),
}, Container(
child: Container( color: Colors.white,
margin: EdgeInsets.only(bottom: 100.0), margin: EdgeInsets.all(8),
height: 50.0, child: BorderedButton(
color: Colors.transparent, TranslationBase.of(context).addAddress,
child: Container( hasBorder: true,
decoration: BoxDecoration( borderColor: Color(0xFF0fca6d),
border: Border.all( textColor: Color(0xFF0fca6d),
color: Colors.green, fontWeight: FontWeight.bold,
style: BorderStyle.solid, backgroundColor: Colors.white,
width: 1.0 fontSize: 14,
), vPadding: 12,
color: Colors.transparent, hasShadow: true,
borderRadius: BorderRadius.circular(5.0) handler: () {
), navigateToAddressPage(context, model, null);
child: Center( },
child: Text(
TranslationBase.of(context).addAddress,
style: TextStyle(
color: Colors.green,
fontWeight: FontWeight.bold,
),
),
),
),
), ),
), ),
], ],
), ),
), ),
), ),
bottomSheet: InkWell( bottomSheet: Container(
onTap: () { height: height * 0.10,
Navigator.push( color: Colors.white,
context, child: Column(
MaterialPageRoute(builder: (context) { children: [
return AddAddressPage(); Divider(
}), color: Colors.grey.shade300,
); height: 1,
}, thickness: 1,
child: Container( indent: 0,
height: 50.0, endIndent: 0,
color: Colors.green,
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.green,
style: BorderStyle.solid,
width: 1.0
),
color: Colors.green,
borderRadius: BorderRadius.circular(5.0)
), ),
child: Center( Container(
child: Text(TranslationBase.of(context).confirmAddress, padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
style: TextStyle( child: BorderedButton(
color: Colors.white, TranslationBase.of(context).confirmAddress,
fontWeight: FontWeight.bold, hasBorder: true,
), borderColor: Color(0xFF5AB145),
textColor: Colors.white,
fontWeight: FontWeight.bold,
backgroundColor: Color(0xFF5AB145),
fontSize: 14,
vPadding: 12,
handler: () {
model.saveSelectedAddressLocally(
model.addresses[model.selectedAddressIndex]);
Navigator.pop(context,
model.addresses[model.selectedAddressIndex]);
},
), ),
), ),
), ],
), ),
), ),
), ),
); );
} }
confirmDelete(address){
showDialog(
context: context,
builder: (BuildContext context)=> AlertDialog(
title: Text(TranslationBase.of(context).confirmDeleteMsg,
style: TextStyle(
fontWeight: FontWeight.bold,
),),
content: Text("address"),
actions:[
FlatButton(
child: Text(TranslationBase.of(context).cancel,
style: TextStyle(
color: Colors.red,
fontWeight: FontWeight.bold,
fontSize: 16,
),),
onPressed: (){
Navigator.pop(context);
},
),
FlatButton(
child: Text(TranslationBase.of(context).confirmDelete,
style: TextStyle(
color: Colors.grey,
fontWeight: FontWeight.bold,
fontSize: 16,
),),
onPressed: (){
// http.delete("https://uat.hmgwebservices.com/epharmacy/api/Customers/272843?fields=addresses/$id");
Navigator.push(context,
MaterialPageRoute(builder: (context)=> PharmacyAddressesPage() ));
},
),
],
)
);
}
} }
getAllAddress() { class AddressItemWidget extends StatelessWidget {
final PharmacyAddressesViewModel model;
final Addresses address;
final Function selectAddress;
final bool isSelected;
final Function(Addresses) onTabEditAddress;
} AddressItemWidget(this.model, this.address, this.selectAddress,
this.isSelected, this.onTabEditAddress);
getConfirmAddress(){
}
getEditAddress(){
}
getDeleteAddress(){
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: Padding(
padding: EdgeInsets.symmetric(vertical: 8, horizontal: 0),
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
InkWell(
onTap: selectAddress,
child: Container(
margin: EdgeInsets.only(left: 16, right: 16),
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Container(
decoration: new BoxDecoration(
color: !isSelected ? Colors.white : Colors.green,
shape: BoxShape.circle,
border: Border.all(
color: Colors.grey,
style: BorderStyle.solid,
width: 1.0),
),
child: Padding(
padding: const EdgeInsets.all(0.0),
child: Icon(
Icons.check,
color: isSelected
? Colors.white
: Colors.transparent,
size: 25,
),
),
),
),
),
),
],
),
Expanded(
child: Container(
child: Container(
margin:
EdgeInsets.symmetric(vertical: 12, horizontal: 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: 0),
child: Texts(
"${address.firstName} ${address.lastName}",
fontSize: 14,
fontWeight: FontWeight.bold,
color: Colors.black,
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 4),
child: Texts(
"${address.address1} ${address.address2} ${address.address2},, ${address.city}, ${address.country} ${address.zipPostalCode}",
fontSize: 12,
fontWeight: FontWeight.normal,
color: Colors.grey.shade500,
),
),
Row(
children: [
Container(
margin: const EdgeInsets.only(right: 8),
child: Icon(
Icons.phone,
size: 20,
color: Colors.black,
),
),
Texts(
"${address.phoneNumber}",
fontSize: 14,
fontWeight: FontWeight.bold,
color: Colors.grey,
),
],
),
SizedBox(
height: 10,
),
Container(
height: 25,
child: Row(
children: <Widget>[
BorderedButton(
TranslationBase.of(context).edit,
backgroundColor: Colors.transparent,
hasBorder: true,
borderColor: Colors.transparent,
textColor: Color(0x990000FF),
handler: () {
onTabEditAddress(address);
},
icon: Icon(
Icons.edit,
size: 15,
color: Color(0x990000FF),
),
),
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 8),
child: SizedBox(
child: Container(
width: 1,
color: Colors.grey.shade400,
),
),
),
BorderedButton(
TranslationBase.of(context).delete,
backgroundColor: Colors.transparent,
hasBorder: true,
borderColor: Colors.transparent,
textColor: Color(0x99FF0000),
handler: () {
ConfirmDialog dialog = new ConfirmDialog(
context: context,
title: "Are you sure want to delete",
confirmMessage:
"${address.address1} ${address.address2}",
okText:
TranslationBase.of(context).delete,
cancelText: TranslationBase.of(context)
.cancel_nocaps,
okFunction: () => {
model
.deleteAddresses(address)
.then((_) {
ConfirmDialog.closeAlertDialog(
context);
AppToast.showErrorToast(
message:
"Address has been deleted");
})
},
cancelFunction: () => {});
dialog.showAlertDialog(context);
},
icon: Icon(
Icons.delete,
size: 15,
color: Color(0x99FF0000),
),
),
],
),
),
],
),
),
),
),
],
),
Divider(
color: Colors.grey.shade200,
height: 10,
thickness: 10,
indent: 0,
endIndent: 0,
),
],
),
),
);
}
} }

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/pages/ContactUs/LiveChat/livechat_page.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/LiveChat/livechat_page.dart';
import 'package:diplomaticquarterapp/pages/ContactUs/findus/findus_page.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/findus/findus_page.dart';
@ -18,6 +19,12 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/my_reviews.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/compare.dart';
dynamic languageID ; dynamic languageID ;
class PharmacyProfilePage extends StatefulWidget { class PharmacyProfilePage extends StatefulWidget {
@ -35,7 +42,7 @@ class _ProfilePageState extends State<PharmacyProfilePage> {
String lastName, mobileNo, identificationNo; String lastName, mobileNo, identificationNo;
int languageId; int languageId;
_ProfilePageState({this.customerId}); _ProfilePageState({this.customerId });
getLanguageID() async { getLanguageID() async {
languageID = await sharedPref.getString(APP_LANGUAGE); languageID = await sharedPref.getString(APP_LANGUAGE);
@ -78,45 +85,40 @@ class _ProfilePageState extends State<PharmacyProfilePage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppScaffold( return BaseView<OrderModelViewModel>(
appBarTitle: TranslationBase.of(context).myAccount, onModelReady: (model) => model.getOrder(customerId, page_id),
isShowAppBar: true, builder: (_, model, wi) => AppScaffold(
isPharmacy: true, appBarTitle: TranslationBase.of(context).myAccount,
body: Container( isShowAppBar: true,
child: SingleChildScrollView( isPharmacy: true,
child: Column( body: Container(
children: <Widget>[ child: SingleChildScrollView(
Container( child: Column(
child: Row( children: <Widget>[
children: <Widget>[ Container(
// Container( child: Row(
// padding:EdgeInsets.only(top:20.0, left:10.0, right:10.0, bottom:10.0,), children: <Widget>[
// child: LargeAvatar( Container(
// name: "", padding: EdgeInsets.only(
// url: "" ,), top: 20.0,
// ), left: 10.0,
Row( right: 10.0,
children: [ bottom: 10.0,
Column( ),
children: [ child: LargeAvatar(
Container( name: "profile",
padding:EdgeInsets.only(top:10.0, left:10.0, right:10.0, bottom:15.0,), url: '',
child: SvgPicture.asset(
'assets/images/pharmacy/user.svg',
width: 60,
height: 60,
),
),]
), ),
Column( ),
crossAxisAlignment: CrossAxisAlignment.center, Container(
child: Column(
children: [ children: [
Text( Text(
TranslationBase.of(context).welcome, TranslationBase.of(context).welcome,
style: TextStyle( style: TextStyle(fontSize: 14.0,
fontSize: 14.0,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Colors.grey), color:Colors.grey
),
), ),
Text( Text(
languageID == "ar" languageID == "ar"
@ -220,8 +222,8 @@ class _ProfilePageState extends State<PharmacyProfilePage> {
'assets/images/pharmacy/wishlist_icon.svg', 'assets/images/pharmacy/wishlist_icon.svg',
width: 50, width: 50,
height: 50, height: 50,
),
SizedBox( ),SizedBox(
height: 5, height: 5,
), ),
Text( Text(
@ -237,13 +239,18 @@ class _ProfilePageState extends State<PharmacyProfilePage> {
), ),
Expanded( Expanded(
child: InkWell( child: InkWell(
child: Column( onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MyReviewsPage()));
},child: Column(
children: <Widget>[ children: <Widget>[
SvgPicture.asset( SvgPicture.asset(
'assets/images/pharmacy/review_icon.svg', 'assets/images/pharmacy/review_icon.svg',
width: 50, width: 50,
height: 50, height: 50,
), ),
SizedBox( SizedBox(
height: 5, height: 5,
), ),
@ -328,7 +335,7 @@ class _ProfilePageState extends State<PharmacyProfilePage> {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => MyFamily())); builder: (context) => ComparePage()));
}, },
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
@ -432,7 +439,7 @@ class _ProfilePageState extends State<PharmacyProfilePage> {
'assets/images/pharmacy/shipping_addresses_icon.svg', 'assets/images/pharmacy/shipping_addresses_icon.svg',
width: 30, width: 30,
height: 30, height: 30,
), ),
SizedBox( SizedBox(
width: 20, width: 20,
), ),
@ -609,9 +616,8 @@ class _ProfilePageState extends State<PharmacyProfilePage> {
), ),
), ),
); );
} }}
// getUser() async {
// var userData = await sharedPref.getObject(USER_PROFILE);
// if (userData != null) user = AuthenticatedUser.fromJson(userData);
// }
}

@ -14,6 +14,13 @@ class BrandsService extends BaseService {
List<TopBrand> _topBrandsList = List(); List<TopBrand> _topBrandsList = List();
List<TopBrand> get topBrandsList => _topBrandsList; List<TopBrand> get topBrandsList => _topBrandsList;
List<Brand> _searchList = List();
List<Brand> get searchList => _searchList;
clearSearchList() {
_searchList.clear();
}
Future getBrands() async { Future getBrands() async {
hasError = false; hasError = false;
await baseAppClient.getPharmacy(GET_BRANDS, await baseAppClient.getPharmacy(GET_BRANDS,
@ -41,4 +48,26 @@ class BrandsService extends BaseService {
super.error = error; super.error = error;
}); });
} }
Future searchProducts({String productName}) async {
RegExp exp = new RegExp(productName.toUpperCase());
hasError = false;
_searchList.clear();
await baseAppClient.getPharmacy(
GET_BRANDS,
onSuccess: (dynamic response, int statusCode) {
response['manufacturer'].forEach((item) {
if(exp.hasMatch(item['name'])){
_searchList.add(Brand.fromJson(item));
}else{
}
});
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
);
}
} }

@ -1,38 +1,102 @@
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/Country.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyAddressesModel.dart';
class PharmacyAddressService extends BaseService {
List<Addresses> addresses = List();
CountryData country;
int selectedAddressIndex = 0;
class PharmacyAddressService extends BaseService{ Future getAddresses() async {
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
Map<String, String> queryParams = {'fields': 'addresses'};
hasError = false;
Addresses selectedAddress;
try {
await baseAppClient.get("$GET_CUSTOMERS_ADDRESSES$customerId",
onSuccess: (dynamic response, int statusCode) async {
addresses.clear();
var savedAddress =
await sharedPref.getObject(PHARMACY_SELECTED_ADDRESS);
if (savedAddress != null) {
selectedAddress = Addresses.fromJson(savedAddress);
}
int index = 0;
response['customers'][0]['addresses'].forEach((item) {
Addresses address = Addresses.fromJson(item);
if (selectedAddress != null && selectedAddress.id == item["id"]) {
selectedAddressIndex = index;
}
addresses.add(address);
index++;
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, queryParams: queryParams);
} catch (error) {
throw error;
}
}
Future getCountries(String countryName) async {
hasError = false;
try {
await baseAppClient.get("$PHARMACY_GET_COUNTRY",
onSuccess: (dynamic response, int statusCode) {
// countries.clear();
response['countries'].forEach((item) {
if (CountryData.fromJson(item).name == countryName ||
CountryData.fromJson(item).namen == countryName) {
country = CountryData.fromJson(item);
}
// countries.add(CountryData.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
});
} catch (error) {
throw error;
}
}
AppSharedPreferences sharedPref = AppSharedPreferences(); Future addCustomerAddress(Addresses address) async {
AppGlobal appGlobal = new AppGlobal(); makeCustomerAddress(address, ADD_CUSTOMER_ADDRESS);
AuthenticatedUser authUser = new AuthenticatedUser(); }
AuthProvider authProvider = new AuthProvider();
List<PharmacyAddressesModel> get address => address; Future editCustomerAddress(Addresses address) async {
List<PharmacyAddressesModel> _addressList = List(); makeCustomerAddress(address, EDIT_CUSTOMER_ADDRESS);
List<PharmacyAddressesModel> get reviewList => _addressList; }
String url ="";
Future getAddress(address) async { Future deleteCustomerAddress(Addresses address) async {
print("step 1"); makeCustomerAddress(address, DELETE_CUSTOMER_ADDRESS);
}
Future makeCustomerAddress(Addresses address, String url) async {
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
hasError = false; hasError = false;
url =GET_ADDRESS+"272843?fields=addresses"; super.error = "";
print(url);
await baseAppClient.getPharmacy(url, Map<String, dynamic> customerObject = Map();
onSuccess: (dynamic response, int statusCode) { customerObject["addresses"] = [address];
_addressList.clear(); customerObject["id"] = customerId;
response['customers'].forEach((item) { customerObject["email"] = address.email;
_addressList.add(PharmacyAddressesModel.fromJson(item)); customerObject["role_ids"] = [3];
}); Map<String, dynamic> body = Map();
}, onFailure: (String error, int statusCode) { body["customer"] = customerObject;
hasError = true;
super.error = error; await baseAppClient.post("$url", onSuccess: (response, statusCode) async {
}); addresses.clear();
}} response['customers'][0]['addresses'].forEach((item) {
addresses.add(Addresses.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
}

@ -1,11 +1,14 @@
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/models/pharmacy/Wishlist.dart';
import 'package:diplomaticquarterapp/models/pharmacy/addToCartModel.dart';
import 'package:diplomaticquarterapp/models/pharmacy/locationModel.dart'; import 'package:diplomaticquarterapp/models/pharmacy/locationModel.dart';
import 'package:diplomaticquarterapp/models/pharmacy/productDetailModel.dart'; import 'package:diplomaticquarterapp/models/pharmacy/productDetailModel.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/models/pharmacy/specification.dart';
class ProductDetailService extends BaseService { class ProductDetailService extends BaseService {
AppSharedPreferences sharedPref = AppSharedPreferences();
bool isLogin = false; bool isLogin = false;
List<ProductDetail> _productDetailList = List(); List<ProductDetail> _productDetailList = List();
@ -14,10 +17,20 @@ class ProductDetailService extends BaseService {
List<LocationModel> _productLocationList = List(); List<LocationModel> _productLocationList = List();
List<LocationModel> get productLocationList => _productLocationList; List<LocationModel> get productLocationList => _productLocationList;
List<Wishlist> _addToCartModel = List();
List<Wishlist> get addToCartModel => _addToCartModel;
Future getProductReviews() async { List<Wishlist> _wishListProducts = List();
List<Wishlist> get wishListProducts => _wishListProducts;
List<SpecificationModel> _productSpecification = List();
List<SpecificationModel> get productSpecification => _productSpecification;
Future getProductReviews(productID) async {
hasError = false; hasError = false;
await baseAppClient.getPharmacy(GET_PRODUCT_DETAIL+"1480?fields=reviews", await baseAppClient.getPharmacy(GET_PRODUCT_DETAIL+productID+"?fields=reviews",
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
_productDetailList.clear(); _productDetailList.clear();
response['products'].forEach((item) { response['products'].forEach((item) {
@ -51,11 +64,115 @@ class ProductDetailService extends BaseService {
_productLocationList.clear(); _productLocationList.clear();
response['PharmList'].forEach((item) { response['PharmList'].forEach((item) {
_productLocationList.add(LocationModel.fromJson(item)); _productLocationList.add(LocationModel.fromJson(item));
print(_productLocationList);
print(response);
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: request);
}
Future addToCart(quantity, itemID) async {
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
hasError = false;
Map<String, dynamic> request;
request = {
"shopping_cart_item":
{
"quantity": quantity,
"shopping_cart_type": "1",
"product_id": itemID,
"customer_id": customerId,
"language_id": 1
}
};
await baseAppClient.post(GET_SHOPPING_CART,
onSuccess: (dynamic response, int statusCode) {
_addToCartModel.clear();
response['shopping_carts'].forEach((item) {
_addToCartModel.add(Wishlist.fromJson(item));
});
AppToast.showSuccessToast(message: 'You have added a product to the cart');
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
AppToast.showErrorToast(message: 'something went wrong please try again');
}, body: request);
}
Future addToWishlist(itemID) async {
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
hasError = false;
Map<String, dynamic> request;
request = {
"shopping_cart_item":
{
"quantity": 1,
"shopping_cart_type": "Wishlist",
"product_id": itemID,
"customer_id": customerId,
"language_id": 1
}
};
await baseAppClient.post(GET_SHOPPING_CART,
onSuccess: (dynamic response, int statusCode) {
_wishListProducts.clear();
response['shopping_carts'].forEach((item) {
_wishListProducts.add(Wishlist.fromJson(item));
AppToast.showSuccessToast(message: 'You have added a product to the Wishlist');
}); });
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;
AppToast.showErrorToast(message: 'something went wrong please try again');
}, body: request); }, body: request);
} }
Future getWishlistItems() async {
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
hasError = false;
await baseAppClient.getPharmacy(GET_WISHLIST+customerId+"?shopping_cart_type=2",
onSuccess: (dynamic response, int statusCode) {
_wishListProducts.clear();
response['shopping_carts'].forEach((item) {
_wishListProducts.add(Wishlist.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
});
}
Future delteItemFromWishlist(itemID) async {
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
hasError = false;
await baseAppClient.getPharmacy(DELETE_WISHLIST+customerId+"+&product_id="+itemID+"&cart_type=Wishlist",
onSuccess: (dynamic response, int statusCode) {
_wishListProducts.clear();
response['shopping_carts'].forEach((item) {
_wishListProducts.add(Wishlist.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
});
}
Future productSpecificationData(itemID) async {
hasError = false;
await baseAppClient.getPharmacy(GET_SPECIFICATION+itemID,
onSuccess: (dynamic response, int statusCode) {
_productSpecification.clear();
response['specification'].forEach((item) {
_productSpecification.add(SpecificationModel.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
});
}
} }

@ -1,19 +1,29 @@
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/models/pharmacy/reviewModel.dart'; import 'package:diplomaticquarterapp/models/pharmacy/reviewModel.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
class ReviewService extends BaseService { class ReviewService extends BaseService {
AppSharedPreferences sharedPref = AppSharedPreferences(); AppSharedPreferences sharedPref = AppSharedPreferences();
AuthenticatedUser authUser = new AuthenticatedUser();
AuthProvider authProvider = new AuthProvider();
bool isLogin = false; bool isLogin = false;
List<Review> _reviewList = List(); List<Review> _reviewList = List();
List<Review> get reviewList => _reviewList; List<Review> get reviewList => _reviewList;
Future getReview() async { Future getReview() async {
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
hasError = false; hasError = false;
await baseAppClient.getPharmacy(GET_REVIEW+"1367368", await baseAppClient.getPharmacy(GET_REVIEW+customerId,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
_reviewList.clear(); _reviewList.clear();
response['reviews'].forEach((item) { response['reviews'].forEach((item) {

@ -55,8 +55,9 @@ class WishListService extends BaseService {
// } // }
Future getWishlist() async { Future getWishlist() async {
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
hasError = false; hasError = false;
await baseAppClient.getPharmacy(GET_WISHLIST+"1367368?shopping_cart_type=2", await baseAppClient.getPharmacy(GET_WISHLIST+customerId+"?shopping_cart_type=2",
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
_wishListProducts.clear(); _wishListProducts.clear();
response['shopping_carts'].forEach((item) { response['shopping_carts'].forEach((item) {

@ -735,7 +735,14 @@ class TranslationBase {
String get orderDetail => localizedValues['orderDetail'][locale.languageCode]; String get orderDetail => localizedValues['orderDetail'][locale.languageCode];
String get subtotal => localizedValues['subtotal'][locale.languageCode]; String get subtotal => localizedValues['subtotal'][locale.languageCode];
String get shipping => localizedValues['shipping'][locale.languageCode]; String get shipping => localizedValues['shipping'][locale.languageCode];
String get shipBy => localizedValues['shipBy'][locale.languageCode];
String get lakumPoints => localizedValues['lakumPoints'][locale.languageCode];
String get use => localizedValues['use'][locale.languageCode];
String get proceedPay => localizedValues['proceedPay'][locale.languageCode];
String get vat => localizedValues['vat'][locale.languageCode]; String get vat => localizedValues['vat'][locale.languageCode];
String get inclusiveVat => localizedValues['inclusiveVat'][locale.languageCode];
String get items => localizedValues['items'][locale.languageCode];
String get checkOut => localizedValues['checkOut'][locale.languageCode];
String get total => localizedValues['total'][locale.languageCode]; String get total => localizedValues['total'][locale.languageCode];
String get sar => localizedValues['sar'][locale.languageCode]; String get sar => localizedValues['sar'][locale.languageCode];
String get payOnline => localizedValues['payOnline'][locale.languageCode]; String get payOnline => localizedValues['payOnline'][locale.languageCode];
@ -1042,6 +1049,7 @@ class TranslationBase {
localizedValues['termOfService'][locale.languageCode]; localizedValues['termOfService'][locale.languageCode];
String get shoppingCart => String get shoppingCart =>
localizedValues['shoppingCart'][locale.languageCode]; localizedValues['shoppingCart'][locale.languageCode];
String get pharmacyServiceTermsCondition => localizedValues['pharmacyServiceTermsCondition'][locale.languageCode];
String get referralStatus => String get referralStatus =>
localizedValues['referralStatus'][locale.languageCode]; localizedValues['referralStatus'][locale.languageCode];
@ -1069,6 +1077,18 @@ class TranslationBase {
localizedValues['processDoneSuccessfully'][locale.languageCode]; localizedValues['processDoneSuccessfully'][locale.languageCode];
String get selectHomeHealthCareServices => String get selectHomeHealthCareServices =>
localizedValues['selectHomeHealthCareServices'][locale.languageCode]; localizedValues['selectHomeHealthCareServices'][locale.languageCode];
String get topBrands => localizedValues['topBrands'][locale.languageCode];
String get notifyMe => localizedValues['notifyMe'][locale.languageCode];
String get specification => localizedValues['specification'][locale.languageCode];
String get details => localizedValues['details'][locale.languageCode];
String get availability => localizedValues['availability'][locale.languageCode];
String get quantity => localizedValues['quantity'][locale.languageCode];
String get quantitySize => localizedValues['quantitySize'][locale.languageCode];
String get addToCart => localizedValues['addToCart'][locale.languageCode];
String get buyNow => localizedValues['buyNow'][locale.languageCode];
String get quantityShortcut => localizedValues['quantityShortcut'][locale.languageCode];
} }
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -18,6 +18,7 @@ class BorderedButton extends StatelessWidget {
final double fontSize; final double fontSize;
final Widget icon; final Widget icon;
final FontWeight fontWeight; final FontWeight fontWeight;
final bool hasShadow;
BorderedButton( BorderedButton(
this.text, { this.text, {
@ -36,6 +37,7 @@ class BorderedButton extends StatelessWidget {
this.fontSize = 0, this.fontSize = 0,
this.icon, this.icon,
this.fontWeight, this.fontWeight,
this.hasShadow = false,
}); });
@override @override
@ -46,14 +48,21 @@ class BorderedButton extends StatelessWidget {
}, },
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
color: backgroundColor ?? Colors.white, color: backgroundColor ?? Colors.white,
borderRadius: BorderRadius.circular(radius), borderRadius: BorderRadius.circular(radius),
border: Border.fromBorderSide(BorderSide( border: Border.fromBorderSide(BorderSide(
color: hasBorder ? borderColor : Colors.white, color: hasBorder ? borderColor : Colors.white,
width: 0.8, width: 0.8,
)), )),
), boxShadow: [
BoxShadow(
color: !hasShadow ? Colors.transparent : Colors.grey.withOpacity(0.5),
// spreadRadius: 5,
blurRadius: 15.0,
offset: Offset(0.0, 0.75) // changes position of shadow
),
]),
child: Container( child: Container(
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@ -69,8 +78,11 @@ class BorderedButton extends StatelessWidget {
text, text,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
fontSize: fontSize == 0 ? SizeConfig.textMultiplier * 1.6 : fontSize, fontSize: fontSize == 0
fontWeight: fontWeight != null ? fontWeight : FontWeight.normal, ? SizeConfig.textMultiplier * 1.6
: fontSize,
fontWeight:
fontWeight != null ? fontWeight : FontWeight.normal,
color: textColor ?? Color(0xffc4aa54)), color: textColor ?? Color(0xffc4aa54)),
), ),
), ),

@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
class ConfirmDialog { class ConfirmDialog {
final BuildContext context; final BuildContext context;
final title;
final confirmMessage; final confirmMessage;
final okText; final okText;
final cancelText; final cancelText;
@ -14,6 +15,7 @@ class ConfirmDialog {
ConfirmDialog( ConfirmDialog(
{@required this.context, {@required this.context,
this.title,
@required this.confirmMessage, @required this.confirmMessage,
@required this.okText, @required this.okText,
@required this.cancelText, @required this.cancelText,
@ -31,7 +33,7 @@ class ConfirmDialog {
// set up the AlertDialog // set up the AlertDialog
AlertDialog alert = AlertDialog( AlertDialog alert = AlertDialog(
title: Text(TranslationBase.of(context).confirm), title: title != null ? Text(title) : Text(TranslationBase.of(context).confirm),
content: Text(this.confirmMessage), content: Text(this.confirmMessage),
actions: [ actions: [
cancelButton, cancelButton,

@ -0,0 +1,241 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/insurance/insurance_update_screen.dart';
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/bottom_bar.dart';
import 'package:diplomaticquarterapp/widgets/progress_indicator/app_loader_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:diplomaticquarterapp/widgets/robo-search/robosearch.dart';
import 'package:diplomaticquarterapp/widgets/robo-search/search.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart';
import '../../locator.dart';
import 'floating_button_search.dart';
import '../progress_indicator/app_loader_widget.dart';
import 'arrow_back.dart';
import 'network_base_view.dart';
import 'not_auh_page.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/product_detail.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart';
class DetailPageScafold extends StatefulWidget {
final String appBarTitle;
final Widget body;
final Widget bottomSheet;
final bool isLoading;
final bool isShowAppBar;
final bool hasAppBarParam;
final BaseViewModel baseViewModel;
final bool isBottomBar;
final Widget floatingActionButton;
final bool isPharmacy;
final String title;
final String description;
final String image;
final bool isShowDecPage;
final List<String> infoList;
final Color backgroundColor;
final double preferredSize;
final List<Widget> appBarIcons;
final PreferredSizeWidget appBarWidget;
DetailPageScafold(
{@required this.body,
this.appBarTitle = '',
this.isLoading = false,
this.isShowAppBar = false,
this.hasAppBarParam,
this.bottomSheet,
this.baseViewModel,
this.floatingActionButton,
this.isPharmacy = false,
this.title,
this.description,
this.isShowDecPage = true,
this.isBottomBar,
this.backgroundColor,
this.preferredSize = 0.0,
this.appBarIcons,
this.appBarWidget,
this.image,
this.infoList});
@override
_DetailPageScafoldState createState() => _DetailPageScafoldState();
}
class _DetailPageScafoldState extends State<DetailPageScafold> {
AuthenticatedUserObject authenticatedUserObject =
locator<AuthenticatedUserObject>();
@override
Widget build(BuildContext context) {
AppGlobal.context = context;
PreferredSizeWidget appBar;
if (this.widget.appBarWidget == null) {
PreferredSizeWidget appBarWidget = AppBarWidget(
widget.appBarTitle,
widget.appBarIcons,
widget.isShowAppBar,
isPharmacy: widget.isPharmacy,
isShowDecPage: widget.isShowDecPage,
image: widget.image,
);
appBar = widget.preferredSize == 0
? appBarWidget
: PreferredSize(
child: appBarWidget,
preferredSize: Size.fromHeight(widget.preferredSize));
} else {
appBar = this.widget.appBarWidget;
}
return Scaffold(
backgroundColor:
widget.backgroundColor ?? Theme.of(context).scaffoldBackgroundColor,
appBar: appBar,
body: (!Provider.of<ProjectViewModel>(context, listen: false).isLogin &&
widget.isShowDecPage)
? NotAutPage(
title: widget.appBarTitle,
description: widget.description,
infoList: widget.infoList,
)
: widget.baseViewModel != null
? NetworkBaseView(
child: buildBodyWidget(),
baseViewModel: widget.baseViewModel,
)
: buildBodyWidget(),
bottomSheet: widget.bottomSheet,
//floatingActionButton: floatingActionButton ?? floatingActionButton,
// bottomNavigationBar:
// this.isBottomBar == true ? BottomBarSearch() : SizedBox()
// floatingActionButton: FloatingSearchButton(),
);
}
buildAppLoaderWidget(bool isLoading) {
return isLoading ? AppLoaderWidget() : Container();
}
buildBodyWidget() {
// return body; //Stack(children: <Widget>[body, buildAppLoaderWidget(isLoading)]);
return Stack(children: <Widget>[
widget.body, /*FloatingSearchButton()*/
]);
}
}
class AppBarWidget extends StatelessWidget with PreferredSizeWidget {
final AuthenticatedUserObject authenticatedUserObject =
locator<AuthenticatedUserObject>();
final String appBarTitle;
final List<Widget> appBarIcons;
final bool isShowAppBar;
final bool isPharmacy;
final bool isShowDecPage;
final String image;
AppBarWidget(this.appBarTitle, this.appBarIcons, this.isShowAppBar,
{this.isPharmacy = true, this.isShowDecPage = true, this.image});
@override
Widget build(BuildContext context) {
return buildAppBar(context);
}
Widget buildAppBar(BuildContext context) {
return isShowAppBar
? AppBar(
elevation: 0,
backgroundColor:Colors.white,
// isPharmacy ? Colors.green : Theme.of(context).appBarTheme.color,
textTheme: TextTheme(
headline6:
TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
title: Texts(
authenticatedUserObject.isLogin || !isShowDecPage
? appBarTitle.toUpperCase()
: TranslationBase.of(context).serviceInformationTitle,
color: Colors.white,
bold: true,
),
leading: Builder(
builder: (BuildContext context) {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap:()=> Navigator.pop(context),
child: Icon(Icons.arrow_back_ios, color: Colors.grey),
);
},
),
centerTitle: true,
actions: <Widget>[
isPharmacy
? IconButton(
icon: Icon(Icons.shopping_cart),
color: Colors.grey,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => CartOrderPage()),
);
// Navigator.of(context)
// .popUntil(ModalRoute.withName('/'));
})
: Container(),
image != null
? InkWell(
onTap: () => Navigator.push(
context,
FadePage(
page: InsuranceUpdate(),
),
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Image.asset(
image,
height: SizeConfig.heightMultiplier * 5,
width: SizeConfig.heightMultiplier * 5,
color: Colors.grey,
),
),
)
: IconButton(
icon: Icon(FontAwesomeIcons.ellipsisV),
color: Colors.grey,
onPressed: () {
settingModalBottomSheet(context);
},
),
if (appBarIcons != null) ...appBarIcons
],
)
: Container(
height: 0,
width: 0,
);
}
@override
Size get preferredSize => Size(double.maxFinite, 60);
}

@ -1,4 +1,6 @@
import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart';
import 'package:diplomaticquarterapp/pages/pharmacy/order/ProductReview.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/ProductReview.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -20,6 +22,7 @@ class productTile extends StatelessWidget {
final String imgs; final String imgs;
final int status; final int status;
final Product product; final Product product;
final dynamic productID;
productTile( productTile(
{this.productName, {this.productName,
@ -28,13 +31,15 @@ class productTile extends StatelessWidget {
this.productReviews, this.productReviews,
this.qyt, this.qyt,
this.totalPrice, this.totalPrice,
this.isOrderDetails = true, this.isOrderDetails = false,
this.productImage, this.productImage,
this.showLine = true, this.showLine = true,
this.img, this.img,
this.imgs, this.imgs,
this.status, this.status,
this.product}); this.product,
this.productID,
});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -128,11 +133,32 @@ class productTile extends StatelessWidget {
flex: 1, flex: 1,
child: Column( child: Column(
children: [ children: [
Icon(FontAwesomeIcons.trashAlt, size: 15), IconButton(
icon: Icon(
FontAwesomeIcons.trashAlt,
size: 15
),
onPressed: (){
deleteFromWishlistFunction(productID);
},
),
SizedBox( SizedBox(
height: 50, height: 50,
), ),
Icon(FontAwesomeIcons.shoppingCart, size: 15), IconButton(
icon: Icon(
FontAwesomeIcons.shoppingCart,
size: 15
),
onPressed: () async{
await addToCartFunction(1, productID);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => CartOrderPage()),
);
},
),
], ],
), ),
) )
@ -264,106 +290,23 @@ class productTile extends StatelessWidget {
), ),
), ),
/*Container( /*Container(
child: Padding(
padding: EdgeInsets.all(8.0),
child: Row(
children: [
Padding(
padding: EdgeInsets.only(left: 15),
child: Container(
width: 160,
height: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
border: Border(
top: BorderSide(width: 0.5, color: Colors.grey),
left: BorderSide(width: 0.5, color: Colors.grey),
right: BorderSide(width: 0.5, color: Colors.grey),
bottom: BorderSide(width: 0.5, color: Colors.grey),
),
color: Colors.white),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
height: 2,
),
Container(
child: Image.network(
productImage.trim(),
fit: BoxFit.cover,
width: 80,
height: 70,
),
),
SizedBox(
height: 10,
),
// Container(width: 150,height: 20,color: Colors.green,),
Container(
alignment: Alignment.centerLeft,
child: Column(
children: [
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text: productName,
style: TextStyle(
color: Colors.black54,
fontSize: 15,
fontWeight: FontWeight.bold),
),
),
),
),
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: Alignment.topLeft,
child: RichText(
text: TextSpan(
text: 'SAR $productPrice',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
),
),
),
),
Container(
alignment: Alignment.topLeft,
margin: EdgeInsets.all(5),
child: Align(
child: RatingBar.readOnly(
initialRating: productRate,
size: 15.0,
filledColor: Colors.yellow[700],
emptyColor: Colors.grey[500],
isHalfAllowed: true,
halfFilledIcon: Icons.star_half,
filledIcon: Icons.star,
emptyIcon: Icons.star,
),
),
),
],
),
),
],
),
),
),
],
),
),
),*/ ),*/
], ],
), ),
); );
} }
deleteFromWishlistFunction(itemID) async {
ProductDetailViewModel x = new ProductDetailViewModel();
await x.deletWishlistData(itemID);
}
addToCartFunction(quantity, itemID) async {
ProductDetailViewModel x = new ProductDetailViewModel();
await x.addToCartData(quantity, itemID);
}
} }

@ -1,6 +1,7 @@
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/borderedButton.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/others/close_back.dart'; import 'package:diplomaticquarterapp/widgets/others/close_back.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -13,24 +14,36 @@ class PickupLocationFromMap extends StatelessWidget {
final Function(PickResult) onPick; final Function(PickResult) onPick;
final double latitude; final double latitude;
final double longitude; final double longitude;
final bool isWithAppBar;
final String buttonLabel;
final Color buttonColor;
const PickupLocationFromMap({Key key, this.onPick, this.latitude, this.longitude}) const PickupLocationFromMap(
{Key key,
this.onPick,
this.latitude,
this.longitude,
this.isWithAppBar = true,
this.buttonLabel,
this.buttonColor})
: super(key: key); : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: isWithAppBar
elevation: 0, ? AppBar(
textTheme: TextTheme( elevation: 0,
headline6: textTheme: TextTheme(
TextStyle(color: Colors.white, fontWeight: FontWeight.bold), headline6:
), TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
title: Text('Location'), ),
leading: CloseBack(), title: Text('Location'),
centerTitle: true, leading: CloseBack(),
), centerTitle: true,
)
: null,
body: PlacePicker( body: PlacePicker(
apiKey: GOOGLE_API_KEY, apiKey: GOOGLE_API_KEY,
enableMyLocationButton: true, enableMyLocationButton: true,
@ -57,17 +70,30 @@ class PickupLocationFromMap extends StatelessWidget {
child: state == SearchingState.Searching child: state == SearchingState.Searching
? Center(child: CircularProgressIndicator()) ? Center(child: CircularProgressIndicator())
: Container( : Container(
margin: EdgeInsets.all(12), margin: EdgeInsets.all(12),
child: SecondaryButton( child: BorderedButton(
color: Colors.grey[800], buttonLabel != null ? buttonLabel : TranslationBase.of(context).next,
textColor: Colors.white, textColor: Colors.white,
onTap: () { fontWeight: FontWeight.bold,
backgroundColor: buttonColor != null ? buttonColor : Colors.grey[800],
fontSize: 14,
vPadding: 12,
radius: 10,
handler: () {
onPick(selectedPlace); onPick(selectedPlace);
Navigator.of(context).pop(); Navigator.of(context).pop();
}, },
label: TranslationBase.of(context).next,
), ),
), /* SecondaryButton(
color: Colors.grey[800],
textColor: Colors.white,
onTap: () {
onPick(selectedPlace);
Navigator.of(context).pop();
},
label: TranslationBase.of(context).next,
),*/
),
); );
}, },
initialPosition: LatLng(latitude, longitude), initialPosition: LatLng(latitude, longitude),

Loading…
Cancel
Save