Merge branch 'pharmacy-bugs' into 'development'

pharmacy bugs fixed

See merge request Cloud_Solution/diplomatic-quarter!272
merge-update-with-lab-changes
Mohammad Aljammal 5 years ago
commit d84d60dc56

@ -1,5 +1,6 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart';
import 'package:diplomaticquarterapp/core/model/pharmacy/brands_model.dart';
import 'package:diplomaticquarterapp/core/model/pharmacy/categorise_parent_model.dart';
import 'package:diplomaticquarterapp/core/model/pharmacy/final_products_model.dart';
@ -22,20 +23,20 @@ class PharmacyCategoriseService extends BaseService {
List<CategoriseParentModel> get parentCategoriseList => _parentCategoriseList;
//service three
List<ParentProductsModel> _parentProductsList = List();
List<ParentProductsModel> get parentProductsList => _parentProductsList;
List<PharmacyProduct> _parentProductsList = List();
List<PharmacyProduct> get parentProductsList => _parentProductsList;
//service four
List<SubCategoriesModel> _subCategoriseList = List();
List<SubCategoriesModel> get subCategoriseList => _subCategoriseList;
//service five
List<SubProductsModel> _subProductsList = List();
List<SubProductsModel> get subProductsList => _subProductsList;
List<PharmacyProduct> _subProductsList = List();
List<PharmacyProduct> get subProductsList => _subProductsList;
//service six
List<FinalProductsModel> _finalProducts = List();
List<FinalProductsModel> get finalProducts => _finalProducts;
List<PharmacyProduct> _finalProducts = List();
List<PharmacyProduct> get finalProducts => _finalProducts;
//service 7
@ -44,8 +45,8 @@ class PharmacyCategoriseService extends BaseService {
// service 8
List<SearchProductsModel> _searchList = List();
List<SearchProductsModel> get searchList => _searchList;
List<PharmacyProduct> _searchList = List();
List<PharmacyProduct> get searchList => _searchList;
List<ScanQrModel> _scanList = List();
List<ScanQrModel> get scanList => _scanList;
@ -101,7 +102,7 @@ class PharmacyCategoriseService extends BaseService {
endPoint,
onSuccess: (dynamic response, int statusCode) {
response['products'].forEach((item) {
_searchList.add(SearchProductsModel.fromJson(item));
_searchList.add(PharmacyProduct.fromJson(item));
});
},
onFailure: (String error, int statusCode) {
@ -157,7 +158,7 @@ class PharmacyCategoriseService extends BaseService {
endPoint,
onSuccess: (dynamic response, int statusCode) {
response['products'].forEach((item) {
_parentProductsList.add(ParentProductsModel.fromJson(item));
_parentProductsList.add(PharmacyProduct.fromJson(item));
});
},
onFailure: (String error, int statusCode) {
@ -197,7 +198,7 @@ class PharmacyCategoriseService extends BaseService {
endPoint,
onSuccess: (dynamic response, int statusCode) {
response['products'].forEach((item) {
_subProductsList.add(SubProductsModel.fromJson(item));
_subProductsList.add(PharmacyProduct.fromJson(item));
});
},
onFailure: (String error, int statusCode) {
@ -216,7 +217,7 @@ class PharmacyCategoriseService extends BaseService {
endPoint,
onSuccess: (dynamic response, int statusCode) {
response['products'].forEach((item) {
_finalProducts.add(FinalProductsModel.fromJson(item));
_finalProducts.add(PharmacyProduct.fromJson(item));
});
},
onFailure: (String error, int statusCode) {
@ -235,25 +236,30 @@ class PharmacyCategoriseService extends BaseService {
GET_BRAND_ITEMS,
onSuccess: (dynamic response, int statusCode) {
response['products'].forEach((item) {
_finalProducts.add(FinalProductsModel.fromJson(item));
_finalProducts.add(PharmacyProduct.fromJson(item));
});
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, queryParams: queryParams,
},
queryParams: queryParams,
);
}
Future getLastVisitedProducts() async {
String lastVisited = "";
if (await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS) != null) {
lastVisited = await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS);
if (await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS) !=
null) {
lastVisited =
await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS);
try {
await baseAppClient.getPharmacy("$GET_PHARMACY_PRODUCTs_BY_IDS$lastVisited", onSuccess: (dynamic response, int statusCode) {
await baseAppClient
.getPharmacy("$GET_PHARMACY_PRODUCTs_BY_IDS$lastVisited",
onSuccess: (dynamic response, int statusCode) {
_finalProducts.clear();
response['products'].forEach((item) {
_finalProducts.add(FinalProductsModel.fromJson(item));
_finalProducts.add(PharmacyProduct.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
@ -271,10 +277,11 @@ class PharmacyCategoriseService extends BaseService {
'id,discount_ids,name,namen,localized_names,display_order,short_description,full_description,full_descriptionn,sku,order_minimum_quantity,order_maximum_quantity,price,old_price,images,is_rx,rx_message,rx_messagen,discount_name,discount_namen,approved_rating_sum,approved_total_reviews,allow_back_in_stock_subscriptions,stock_quantity,stock_availability,stock_availabilityn,discount_percentage,reviews',
};
try {
await baseAppClient.getPharmacy(GET_PHARMACY_BEST_SELLER_PRODUCT, onSuccess: (dynamic response, int statusCode) {
await baseAppClient.getPharmacy(GET_PHARMACY_BEST_SELLER_PRODUCT,
onSuccess: (dynamic response, int statusCode) {
_finalProducts.clear();
response['products'].forEach((item) {
_finalProducts.add(FinalProductsModel.fromJson(item));
_finalProducts.add(PharmacyProduct.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart';
import 'package:diplomaticquarterapp/core/model/pharmacy/brands_model.dart';
import 'package:diplomaticquarterapp/core/model/pharmacy/categorise_parent_model.dart';
import 'package:diplomaticquarterapp/core/model/pharmacy/final_products_model.dart';
@ -16,22 +17,29 @@ import 'base_view_model.dart';
class PharmacyCategoriseViewModel extends BaseViewModel {
bool hasError = false;
PharmacyCategoriseService _pharmacyCategoriseService = locator<PharmacyCategoriseService>();
PharmacyCategoriseService _pharmacyCategoriseService =
locator<PharmacyCategoriseService>();
List<PharmacyCategorise> get categorise => _pharmacyCategoriseService.categoriseList;
List<PharmacyCategorise> get categorise =>
_pharmacyCategoriseService.categoriseList;
List<CategoriseParentModel> get categoriseParent => _pharmacyCategoriseService.parentCategoriseList;
List<CategoriseParentModel> get categoriseParent =>
_pharmacyCategoriseService.parentCategoriseList;
List<ParentProductsModel> get parentProducts => _pharmacyCategoriseService.parentProductsList;
List<PharmacyProduct> get parentProducts =>
_pharmacyCategoriseService.parentProductsList;
List<SubCategoriesModel> get subCategorise => _pharmacyCategoriseService.subCategoriseList;
List<SubCategoriesModel> get subCategorise =>
_pharmacyCategoriseService.subCategoriseList;
List<SubProductsModel> get subProducts => _pharmacyCategoriseService.subProductsList;
List<PharmacyProduct> get subProducts =>
_pharmacyCategoriseService.subProductsList;
List<FinalProductsModel> get finalProducts => _pharmacyCategoriseService.finalProducts;
List<PharmacyProduct> get finalProducts =>
_pharmacyCategoriseService.finalProducts;
List<BrandsModel> get brandsList => _pharmacyCategoriseService.brandsList;
List<SearchProductsModel> get searchList => _pharmacyCategoriseService.searchList;
List<PharmacyProduct> get searchList => _pharmacyCategoriseService.searchList;
List<ScanQrModel> get scanList => _pharmacyCategoriseService.scanList;

@ -1,9 +1,11 @@
import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/product_detail.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.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:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'base/base_view.dart';
@ -20,9 +22,7 @@ class FinalProductsPage extends StatefulWidget {
class _FinalProductsPageState extends State<FinalProductsPage> {
String id;
_FinalProductsPageState({this.id});
String categoriseName = "Personal Care";
bool styleOne = true;
bool styleTwo = false;
@ -31,7 +31,6 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
color: Colors.blue,
size: 29.0,
);
@override
Widget build(BuildContext context) {
return BaseView<PharmacyCategoriseViewModel>(
@ -135,6 +134,7 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
itemBuilder: (BuildContext context, int index) {
return NetworkBaseView(
baseViewModel: model,
child: InkWell(
child: Card(
color: model.finalProducts[index]
.discountName !=
@ -184,12 +184,17 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
Stack(
children: [
Container(
margin: EdgeInsets.fromLTRB(
margin:
EdgeInsets.fromLTRB(
0, 16, 0, 0),
alignment: Alignment.center,
alignment:
Alignment.center,
child: Image.network(
model.finalProducts[index]
.images.isNotEmpty
model
.finalProducts[
index]
.images
.isNotEmpty
? model
.finalProducts[
index]
@ -206,21 +211,27 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
index]
.rxMessage !=
null
? MediaQuery.of(context)
? MediaQuery.of(
context)
.size
.width /
2.8
: 0,
padding: EdgeInsets.all(4),
padding:
EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
color:
Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(6)),
.circular(
6)),
),
child: Texts(
model.finalProducts[index]
model
.finalProducts[
index]
.rxMessage !=
null
? model
@ -244,7 +255,8 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
CrossAxisAlignment
.start,
children: [
if (model
.finalProducts[
@ -252,12 +264,13 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
.discountName !=
null)
Container(
width: double.infinity,
width:
double.infinity,
height: 13.0,
decoration:
BoxDecoration(
color:
Color(0xff5AB145),
color: Color(
0xff5AB145),
),
child: Center(
child: Texts(
@ -266,13 +279,16 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
index]
.discountName,
regular: true,
color: Colors.white,
color:
Colors.white,
fontSize: 10.4,
),
),
),
Texts(
model.finalProducts[index]
model
.finalProducts[
index]
.name,
regular: true,
fontSize: 12,
@ -281,7 +297,8 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
),
Padding(
padding:
const EdgeInsets.only(
const EdgeInsets
.only(
top: 4,
bottom: 4),
child: Texts(
@ -322,6 +339,15 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
],
),
),
),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.finalProducts[index]),
)),
},
));
},
),
@ -334,7 +360,8 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
itemCount: model.finalProducts.length,
itemBuilder:
(BuildContext context, int index) {
return Card(
return InkWell(
child: Card(
child: Row(
children: [
Stack(
@ -342,9 +369,11 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
Column(
children: [
Container(
decoration: BoxDecoration(),
decoration:
BoxDecoration(),
child: Padding(
padding: EdgeInsets.only(
padding:
EdgeInsets.only(
left: 9.0,
top: 8.0,
right: 10.0,
@ -352,12 +381,17 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
),
),
Container(
margin: EdgeInsets.fromLTRB(
margin:
EdgeInsets.fromLTRB(
0, 0, 0, 0),
alignment: Alignment.center,
alignment:
Alignment.center,
child: Image.network(
model.finalProducts[index]
.images.isNotEmpty
model
.finalProducts[
index]
.images
.isNotEmpty
? model
.finalProducts[
index]
@ -378,21 +412,27 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
index]
.rxMessage !=
null
? MediaQuery.of(context)
? MediaQuery.of(
context)
.size
.width /
3.5
: 0,
padding: EdgeInsets.all(4),
padding:
EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
color:
Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(6)),
.circular(
6)),
),
child: Texts(
model.finalProducts[index]
model
.finalProducts[
index]
.rxMessage !=
null
? model
@ -419,7 +459,8 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceAround,
MainAxisAlignment
.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
@ -427,15 +468,19 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
height: 4.0,
),
Container(
height: 35.0,
width: 250.0,
width:
MediaQuery.of(context)
.size
.width *
0.65,
child: Texts(
model.finalProducts[index]
.name,
regular: true,
fontSize: 13.2,
fontWeight: FontWeight.w500,
maxLines: 2,
fontWeight:
FontWeight.w500,
maxLines: 5,
),
),
SizedBox(
@ -486,6 +531,15 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
),
],
),
),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.finalProducts[index]),
)),
},
);
}),
),

@ -39,7 +39,8 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
backgroundColor: Colors.white,
isShowDecPage: false,
baseViewModel: model,
body: Container(
body: model.categorise.length != 0
? Container(
//height: MediaQuery.of(context).size.height * 0.57,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -63,7 +64,8 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: model.categorise.length,
itemBuilder: (BuildContext context, int index) {
itemBuilder:
(BuildContext context, int index) {
return Padding(
padding: EdgeInsets.all(8.0),
child: Row(
@ -76,7 +78,8 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
width: 65.0,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.orange.shade200
color: Colors
.orange.shade200
.withOpacity(0.45),
),
child: Icon(
@ -85,18 +88,22 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
),
),
Container(
width: MediaQuery.of(context)
width:
MediaQuery.of(context)
.size
.width *
0.2,
height: MediaQuery.of(context)
height:
MediaQuery.of(context)
.size
.height *
0.09,
child: Center(
child: Texts(
model.categorise[index].name,
fontWeight: FontWeight.w600,
model.categorise[index]
.name,
fontWeight:
FontWeight.w600,
fontSize: 13.8,
),
),
@ -105,11 +112,13 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
),
onTap: () {
model.getOffersProducts(
i: model.categorise[index].id);
String ids = model.categorise[index].id;
i: model
.categorise[index].id);
String ids =
model.categorise[index].id;
categoriseName =
model.categorise[index].name;
categoriseName = model
.categorise[index].name;
}),
],
),
@ -179,7 +188,9 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
styleOne == true
? Expanded(
child: Container(
height: MediaQuery.of(context).size.height * 0.50,
height:
MediaQuery.of(context).size.height *
0.50,
child: GridView.builder(
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
@ -189,7 +200,8 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
childAspectRatio: 0.85,
),
itemCount: model.products.length,
itemBuilder: (BuildContext context, int index) {
itemBuilder:
(BuildContext context, int index) {
return NetworkBaseView(
baseViewModel: model,
child: Card(
@ -224,8 +236,10 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
child: Container(
height: 250.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(110.0),
borderRadius:
BorderRadius.only(
topLeft: Radius.circular(
110.0),
),
color: Colors.white,
),
@ -237,11 +251,14 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
3,
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
CrossAxisAlignment
.start,
children: [
Stack(
children: [
if (model.products[index]
if (model
.products[
index]
.discountName !=
null)
RotatedBox(
@ -251,7 +268,8 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
BoxDecoration(),
child: Padding(
padding:
EdgeInsets.only(
EdgeInsets
.only(
right: 5.0,
top: 20.0,
bottom: 5.0,
@ -259,10 +277,13 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
child: Texts(
'offer'
.toUpperCase(),
color: Colors.red,
fontSize: 13.0,
color: Colors
.red,
fontSize:
13.0,
fontWeight:
FontWeight.w900,
FontWeight
.w900,
),
),
transform: new Matrix4
@ -271,14 +292,21 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
),
),
Container(
margin: EdgeInsets.fromLTRB(
0, 16, 0, 0),
alignment: Alignment.center,
child: Image.network(
model.products[index]
.images.isNotEmpty
margin: EdgeInsets
.fromLTRB(0, 16,
0, 0),
alignment: Alignment
.center,
child:
Image.network(
model
.products[
index]
.images
.isNotEmpty
? model
.products[index]
.products[
index]
.images[0]
.thumb
: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png',
@ -287,85 +315,112 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
),
),
Container(
width: model.products[index]
width: model
.products[
index]
.rxMessage !=
null
? MediaQuery.of(context)
? MediaQuery.of(
context)
.size
.width /
5
: 0,
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
borderRadius:
BorderRadius.only(
padding:
EdgeInsets.all(
4),
decoration:
BoxDecoration(
color: Color(
0xffb23838),
borderRadius: BorderRadius.only(
topLeft: Radius
.circular(6)),
.circular(
6)),
),
child: Texts(
model.products[index]
model
.products[
index]
.rxMessage !=
null
? model
.products[index]
.products[
index]
.rxMessage
: "",
color: Colors.white,
color:
Colors.white,
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
FontWeight
.w400,
),
),
],
),
Container(
margin: EdgeInsets.symmetric(
margin: EdgeInsets
.symmetric(
horizontal: 6,
vertical: 0,
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
CrossAxisAlignment
.start,
children: [
if (model.products[index]
if (model
.products[
index]
.discountName !=
null)
Container(
width: double.infinity,
width: double
.infinity,
height: 22.0,
decoration:
BoxDecoration(
color:
Color(0xff5AB145),
color: Color(
0xff5AB145),
),
child: Center(
child: Texts(
model
.products[index]
.products[
index]
.discountName,
regular: true,
color: Colors.white,
fontSize: 12.0,
regular:
true,
color: Colors
.white,
fontSize:
12.0,
fontWeight:
FontWeight.w700,
FontWeight
.w700,
),
),
),
Texts(
model
.products[index].name,
.products[
index]
.name,
regular: true,
fontSize: 12.58,
fontWeight:
FontWeight.w600,
FontWeight
.w600,
),
Padding(
padding:
const EdgeInsets.only(
const EdgeInsets
.only(
top: 4,
bottom: 4),
bottom:
4),
child: Texts(
"SAR ${model.products[index].price}",
bold: true,
@ -375,26 +430,20 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
Row(
children: [
StarRating(
totalAverage: model
.products[
index]
.approvedRatingSum >
totalAverage: model.products[index].approvedRatingSum >
0
? (model.products[index].approvedRatingSum
.toDouble() /
model
.products[index]
.approvedRatingSum
.toDouble())
? (model.products[index].approvedRatingSum.toDouble() / model.products[index].approvedRatingSum.toDouble())
.toDouble()
: 0,
forceStars: true),
forceStars:
true),
Texts(
"(${model.products[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
FontWeight
.w400,
)
],
),
@ -413,8 +462,8 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
child: Container(
child: ListView.builder(
itemCount: model.products.length,
itemBuilder:
(BuildContext context, int index) {
itemBuilder: (BuildContext context,
int index) {
return Card(
// color:
// model.products[index].discountName !=
@ -427,7 +476,9 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
children: [
Column(
children: [
if (model.products[index]
if (model
.products[
index]
.discountName !=
null)
Container(
@ -435,21 +486,27 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
BoxDecoration(),
child: Padding(
padding:
EdgeInsets.only(
EdgeInsets
.only(
left: 9.0,
top: 8.0,
right: 10.0,
),
child: Container(
color: Colors.yellow,
child:
Container(
color: Colors
.yellow,
height: 25.0,
width: 70.0,
child: Center(
child: Texts(
child:
Texts(
'offer'
.toUpperCase(),
color: Colors.red,
fontSize: 13.0,
color: Colors
.red,
fontSize:
13.0,
fontWeight:
FontWeight
.w900,
@ -457,19 +514,26 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
),
),
),
transform:
new Matrix4.rotationZ(
transform: new Matrix4
.rotationZ(
6.15099),
),
Container(
margin: EdgeInsets.fromLTRB(
margin: EdgeInsets
.fromLTRB(
0, 0, 0, 0),
alignment: Alignment.center,
child: Image.network(
model.products[index]
.images.isNotEmpty
alignment: Alignment
.center,
child:
Image.network(
model
.products[
index]
.images
.isNotEmpty
? model
.products[index]
.products[
index]
.images[0]
.thumb
: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png',
@ -482,35 +546,47 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
Column(
children: [
Container(
width: model.products[index]
width: model
.products[
index]
.rxMessage !=
null
? MediaQuery.of(context)
? MediaQuery.of(
context)
.size
.width /
5
: 0,
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
borderRadius:
BorderRadius.only(
padding:
EdgeInsets.all(
4),
decoration:
BoxDecoration(
color: Color(
0xffb23838),
borderRadius: BorderRadius.only(
topLeft: Radius
.circular(6)),
.circular(
6)),
),
child: Texts(
model.products[index]
model
.products[
index]
.rxMessage !=
null
? model
.products[index]
.products[
index]
.rxMessage
: "",
color: Colors.white,
color:
Colors.white,
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
FontWeight
.w400,
),
),
],
@ -518,36 +594,45 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
],
),
Container(
margin: EdgeInsets.symmetric(
margin:
EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
CrossAxisAlignment
.start,
children: [
if (model.products[index]
if (model
.products[index]
.discountName !=
null)
Container(
width: 250.0,
height: 22.5,
decoration: BoxDecoration(
color: Color(0xff5AB145),
decoration:
BoxDecoration(
color: Color(
0xff5AB145),
),
child: Padding(
padding:
EdgeInsets.symmetric(
padding: EdgeInsets
.symmetric(
horizontal: 5.5,
),
child: Texts(
model.products[index]
model
.products[
index]
.discountName,
regular: true,
color: Colors.white,
color: Colors
.white,
fontSize: 12.0,
fontWeight:
FontWeight.w700,
FontWeight
.w700,
),
),
),
@ -555,18 +640,22 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
height: 4.0,
),
Texts(
model.products[index].name,
model.products[index]
.name,
regular: true,
fontSize: 14.0,
fontWeight: FontWeight.w600,
fontWeight:
FontWeight.w600,
),
SizedBox(
height: 8.0,
),
Padding(
padding:
const EdgeInsets.only(
top: 4, bottom: 4),
const EdgeInsets
.only(
top: 4,
bottom: 4),
child: Texts(
"SAR ${model.products[index].price}",
bold: true,
@ -581,25 +670,20 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
index]
.approvedRatingSum >
0
? (model
.products[
index]
.approvedRatingSum
.toDouble() /
model
.products[
index]
.approvedRatingSum
? (model.products[index].approvedRatingSum.toDouble() /
model.products[index].approvedRatingSum
.toDouble())
.toDouble()
: 0,
forceStars: true),
forceStars:
true),
Texts(
"(${model.products[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w500,
FontWeight
.w500,
)
],
),
@ -614,7 +698,11 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
)
],
),
),
));
)
: Center(
child: Texts(
"SORRY , there's no listed offers now :(",
color: Colors.green,
))));
}
}

@ -1,6 +1,7 @@
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/product_detail.dart';
import 'package:diplomaticquarterapp/pages/sub_categorise_page.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
@ -8,6 +9,7 @@ import 'package:diplomaticquarterapp/widgets/others/StarRating.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_pharmacy_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:giffy_dialog/giffy_dialog.dart';
@ -111,10 +113,10 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
context: context,
builder: (BuildContext context) {
return Container(
height: MediaQuery.of(context)
.size
.height *
0.89,
// height: MediaQuery.of(context)
// .size
// .height *
// 0.89,
color: Colors.white,
child: Center(
child: ListView.builder(
@ -130,7 +132,7 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
child: Padding(
padding:
EdgeInsets.all(
8.0),
4.0),
child: InkWell(
child: Column(
crossAxisAlignment:
@ -229,10 +231,10 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
.size
.width *
0.197,
height: MediaQuery.of(context)
.size
.height *
0.08,
// height: MediaQuery.of(context)
// .size
// .height *
// 0.08,
child: Center(
child: Texts(
projectViewModel.isArabic
@ -646,6 +648,7 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
(BuildContext context, int index) {
return NetworkBaseView(
baseViewModel: model,
child: InkWell(
child: Card(
color: model.parentProducts[index]
.discountName !=
@ -677,7 +680,8 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
borderRadius:
BorderRadius.only(
topLeft:
Radius.circular(110.0),
),
@ -716,9 +720,10 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
child: Texts(
'offer'
.toUpperCase(),
color:
Colors.red,
fontSize: 13.0,
color: Colors
.red,
fontSize:
13.0,
fontWeight:
FontWeight
.w900,
@ -730,8 +735,8 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
),
),
Container(
margin:
EdgeInsets.fromLTRB(
margin: EdgeInsets
.fromLTRB(
0, 16, 0, 0),
alignment:
Alignment.center,
@ -767,8 +772,8 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
EdgeInsets.all(4),
decoration:
BoxDecoration(
color:
Color(0xffb23838),
color: Color(
0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
@ -812,8 +817,8 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
.discountName !=
null)
Container(
width:
double.infinity,
width: double
.infinity,
height: 13.0,
decoration:
BoxDecoration(
@ -829,7 +834,8 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
regular: true,
color: Colors
.white,
fontSize: 10.4,
fontSize:
10.4,
),
),
),
@ -886,6 +892,16 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
],
),
),
),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.parentProducts[
index]),
)),
},
));
},
),
@ -898,7 +914,8 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
itemCount: model.parentProducts.length,
itemBuilder:
(BuildContext context, int index) {
return Card(
return InkWell(
child: Card(
child: Row(
children: [
Stack(
@ -918,8 +935,8 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
),
),
Container(
margin:
EdgeInsets.fromLTRB(
margin: EdgeInsets
.fromLTRB(
0, 0, 0, 0),
alignment:
Alignment.center,
@ -959,14 +976,15 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
EdgeInsets.all(4),
decoration:
BoxDecoration(
color:
Color(0xffb23838),
color: Color(
0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(
6)),
),
child: Expanded(
child: Texts(
model
.parentProducts[
@ -978,11 +996,14 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
index]
.rxMessage
: "",
color: Colors.white,
color:
Colors.white,
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
FontWeight
.w400,
),
),
),
],
@ -990,7 +1011,6 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
],
),
Container(
height: 100.0,
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
@ -1000,14 +1020,22 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
MainAxisAlignment
.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.start,
CrossAxisAlignment
.start,
children: [
SizedBox(
height: 4.0,
),
Texts(
Container(
width: MediaQuery.of(
context)
.size
.width *
0.65,
child: Texts(
model
.parentProducts[index]
.parentProducts[
index]
.name,
regular: true,
fontSize: 13.2,
@ -1015,12 +1043,14 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
FontWeight.w500,
maxLines: 5,
),
),
SizedBox(
height: 8.0,
),
Padding(
padding:
const EdgeInsets.only(
const EdgeInsets
.only(
top: 4,
bottom: 4),
child: Texts(
@ -1060,6 +1090,15 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
),
],
),
),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(model
.parentProducts[index]),
)),
},
);
}),
)

@ -80,12 +80,18 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
alignment: Alignment.centerRight,
child: languageID == 'ar'
? Text(
widget.product.discountDescriptionn,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 17),
widget.product
.discountDescriptionn,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 17),
)
: Text(
widget.product.discountDescription,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 17),
widget.product
.discountDescription,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 17),
),
),
),
@ -96,7 +102,8 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
flex: 0,
child: Container(
child: Image(
image: AssetImage('assets/images/offer.png'),
image: AssetImage(
'assets/images/offer.png'),
),
),
),
@ -174,7 +181,9 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
},
child: Text(
TranslationBase.of(context).details,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold),
),
color: Colors.white,
),
@ -202,7 +211,9 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
},
child: Text(
TranslationBase.of(context).reviews,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold),
),
color: Colors.white,
),
@ -230,7 +241,9 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
},
child: Text(
TranslationBase.of(context).availability,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold),
),
color: Colors.white,
),
@ -258,7 +271,10 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
Container(
child: Text(
TranslationBase.of(context).description,
style: TextStyle(fontSize: 17, color: Colors.grey, fontWeight: FontWeight.w600),
style: TextStyle(
fontSize: 17,
color: Colors.grey,
fontWeight: FontWeight.w600),
),
),
SizedBox(
@ -266,8 +282,13 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
),
Container(
child: Text(
languageID == 'ar' ? widget.product.shortDescriptionn : widget.product.shortDescription ?? "",
style: TextStyle(fontSize: 16, fontFamily: 'WorkSans-Regular'),
languageID == 'ar'
? widget.product.shortDescriptionn
: widget.product.shortDescription ??
"",
style: TextStyle(
fontSize: 16,
fontFamily: 'WorkSans-Regular'),
),
),
SizedBox(
@ -276,7 +297,10 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
Container(
child: Text(
TranslationBase.of(context).howToUse,
style: TextStyle(fontSize: 17, color: Colors.grey, fontWeight: FontWeight.w600),
style: TextStyle(
fontSize: 17,
color: Colors.grey,
fontWeight: FontWeight.w600),
),
),
SizedBox(
@ -284,8 +308,12 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
),
Container(
child: Text(
languageID == 'ar' ? widget.product.fullDescriptionn : widget.product.fullDescription,
style: TextStyle(fontSize: 16, fontFamily: 'WorkSans-Regular'),
languageID == 'ar'
? widget.product.fullDescriptionn
: widget.product.fullDescription,
style: TextStyle(
fontSize: 16,
fontFamily: 'WorkSans-Regular'),
),
),
],
@ -293,41 +321,83 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
)
: isReviews
? BaseView<ProductDetailViewModel>(
onModelReady: (model) => model.getProductReviewsData(widget.product.id),
builder: (_, model, wi) =>
model.productDetailService.length != 0 && model.productDetailService[0].reviews.length != 0
onModelReady: (model) =>
model.getProductReviewsData(
widget.product.id),
builder: (_, model, wi) => model
.productDetailService
.length !=
0 &&
model.productDetailService[0]
.reviews.length !=
0
? ListView.builder(
physics: ScrollPhysics(),
itemCount: model.productDetailService[0].reviews.length,
itemCount: model
.productDetailService[0]
.reviews
.length,
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
itemBuilder: (BuildContext context,
int index) {
return Padding(
padding: EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Container(
child: Row(
children: [
Container(
child: Text(
model.productDetailService[0].reviews[index].customerId.toString(),
style: TextStyle(fontSize: 17, color: Colors.grey, fontWeight: FontWeight.w600),
model
.productDetailService[
0]
.reviews[
index]
.customerId
.toString(),
style: TextStyle(
fontSize: 17,
color: Colors
.grey,
fontWeight:
FontWeight
.w600),
),
),
Container(
margin: EdgeInsets.only(left: 210),
child: RatingBar.readOnly(
initialRating: model.productDetailService[0].reviews[index].rating.toDouble(),
margin:
EdgeInsets.only(
left: 210),
child: RatingBar
.readOnly(
initialRating: model
.productDetailService[
0]
.reviews[
index]
.rating
.toDouble(),
size: 15.0,
filledColor: Colors.yellow[700],
emptyColor: Colors.grey[500],
isHalfAllowed: true,
halfFilledIcon: Icons.star_half,
filledIcon: Icons.star,
emptyIcon: Icons.star,
filledColor:
Colors.yellow[
700],
emptyColor: Colors
.grey[500],
isHalfAllowed:
true,
halfFilledIcon:
Icons
.star_half,
filledIcon:
Icons.star,
emptyIcon:
Icons.star,
),
),
],
@ -338,14 +408,21 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
),
Container(
child: Text(
model.productDetailService[0].reviews[index].reviewText,
style: TextStyle(fontSize: 20),
model
.productDetailService[
0]
.reviews[index]
.reviewText,
style: TextStyle(
fontSize: 20),
),
),
SizedBox(
height: 50,
),
Divider(height: 1, color: Colors.grey),
Divider(
height: 1,
color: Colors.grey),
],
),
);
@ -359,32 +436,47 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
)
: isAvailabilty
? BaseView<ProductDetailViewModel>(
onModelReady: (model) => model.getProductLocationData(),
builder: (_, model, wi) => model.productLocationService.length == 0
onModelReady: (model) =>
model.getProductLocationData(),
builder: (_, model, wi) => model
.productLocationService
.length ==
0
? Container(
padding: EdgeInsets.all(15),
alignment: Alignment.center,
child: Text('No location Available'),
child: Text(
'No location Available'),
)
: ListView.builder(
physics: ScrollPhysics(),
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: model.productLocationService.length,
itemBuilder: (BuildContext context, int index) {
itemCount: model
.productLocationService
.length,
itemBuilder:
(BuildContext context,
int index) {
return Padding(
padding: EdgeInsets.all(8.0),
padding:
EdgeInsets.all(8.0),
child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
// crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment
.start,
children: [
Expanded(
flex: 1,
child: Image.network(model.productLocationService[index].projectImageUrl),
child: Image.network(model
.productLocationService[
index]
.projectImageUrl),
),
SizedBox(
width: 10,
@ -392,31 +484,48 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
Expanded(
flex: 4,
child: Text(
model.productLocationService[index].locationDescription +
model
.productLocationService[
index]
.locationDescription +
"\n" +
fixingString(model.productLocationService[0].cityName.toString()),
style: TextStyle(fontSize: 12),
fixingString(model
.productLocationService[
0]
.cityName
.toString()),
style: TextStyle(
fontSize:
12),
),
),
Expanded(
flex: 1,
child: IconButton(
icon: Icon(Icons.location_on),
color: Colors.red,
onPressed: () {},
icon: Icon(Icons
.location_on),
color:
Colors.red,
onPressed:
() {},
),
),
Expanded(
flex: 1,
child: IconButton(
icon: Icon(Icons.phone),
color: Colors.red,
onPressed: () {},
icon: Icon(Icons
.phone),
color:
Colors.red,
onPressed:
() {},
),
),
],
),
Divider(height: 1.2, color: Colors.grey)
Divider(
height: 1.2,
color: Colors.grey)
],
),
);
@ -431,8 +540,12 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
],
),
),
bottomSheet: footerWidget(widget.product.stockAvailability != 'Out of stock', widget.product.orderMaximumQuantity,
widget.product.orderMinimumQuantity, widget.product.stockQuantity, widget.product),
bottomSheet: footerWidget(
widget.product.stockAvailability != 'Out of stock',
widget.product.orderMaximumQuantity,
widget.product.orderMinimumQuantity,
widget.product.stockQuantity,
widget.product),
)
: AppScaffold(
appBarTitle: 'product detail page',
@ -465,12 +578,18 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
alignment: Alignment.centerRight,
child: languageID == 'ar'
? Text(
widget.product.discountDescriptionn,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 17),
widget.product
.discountDescriptionn,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 17),
)
: Text(
widget.product.discountDescription,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 17),
widget.product
.discountDescription,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 17),
),
),
),
@ -481,7 +600,8 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
flex: 0,
child: Container(
child: Image(
image: AssetImage('assets/images/offer.png'),
image: AssetImage(
'assets/images/offer.png'),
),
),
),
@ -551,7 +671,9 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
},
child: Text(
TranslationBase.of(context).details,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold),
),
color: Colors.white,
),
@ -579,7 +701,9 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
},
child: Text(
TranslationBase.of(context).reviews,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold),
),
color: Colors.white,
),
@ -607,7 +731,9 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
},
child: Text(
TranslationBase.of(context).availability,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold),
),
color: Colors.white,
),
@ -635,7 +761,10 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
Container(
child: Text(
TranslationBase.of(context).description,
style: TextStyle(fontSize: 17, color: Colors.grey, fontWeight: FontWeight.w600),
style: TextStyle(
fontSize: 17,
color: Colors.grey,
fontWeight: FontWeight.w600),
),
),
SizedBox(
@ -643,8 +772,12 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
),
Container(
child: Text(
languageID == 'ar' ? widget.product.fullDescriptionn : widget.product.fullDescription,
style: TextStyle(fontSize: 16, fontFamily: 'WorkSans-Regular'),
languageID == 'ar'
? widget.product.fullDescriptionn
: widget.product.fullDescription,
style: TextStyle(
fontSize: 16,
fontFamily: 'WorkSans-Regular'),
),
),
],
@ -652,41 +785,83 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
)
: isReviews
? BaseView<ProductDetailViewModel>(
onModelReady: (model) => model.getProductReviewsData(widget.product.id),
builder: (_, model, wi) =>
model.productDetailService.length != 0 && model.productDetailService[0].reviews.length != 0
onModelReady: (model) =>
model.getProductReviewsData(
widget.product.id),
builder: (_, model, wi) => model
.productDetailService
.length !=
0 &&
model.productDetailService[0]
.reviews.length !=
0
? ListView.builder(
physics: ScrollPhysics(),
itemCount: model.productDetailService[0].reviews.length,
itemCount: model
.productDetailService[0]
.reviews
.length,
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
itemBuilder: (BuildContext context,
int index) {
return Padding(
padding: EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Container(
child: Row(
children: [
Container(
child: Text(
model.productDetailService[0].reviews[index].customerId.toString(),
style: TextStyle(fontSize: 17, color: Colors.grey, fontWeight: FontWeight.w600),
model
.productDetailService[
0]
.reviews[
index]
.customerId
.toString(),
style: TextStyle(
fontSize: 17,
color: Colors
.grey,
fontWeight:
FontWeight
.w600),
),
),
Container(
margin: EdgeInsets.only(left: 210),
child: RatingBar.readOnly(
initialRating: model.productDetailService[0].reviews[index].rating.toDouble(),
margin:
EdgeInsets.only(
left: 210),
child: RatingBar
.readOnly(
initialRating: model
.productDetailService[
0]
.reviews[
index]
.rating
.toDouble(),
size: 15.0,
filledColor: Colors.yellow[700],
emptyColor: Colors.grey[500],
isHalfAllowed: true,
halfFilledIcon: Icons.star_half,
filledIcon: Icons.star,
emptyIcon: Icons.star,
filledColor:
Colors.yellow[
700],
emptyColor: Colors
.grey[500],
isHalfAllowed:
true,
halfFilledIcon:
Icons
.star_half,
filledIcon:
Icons.star,
emptyIcon:
Icons.star,
),
),
],
@ -697,14 +872,21 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
),
Container(
child: Text(
model.productDetailService[0].reviews[index].reviewText,
style: TextStyle(fontSize: 20),
model
.productDetailService[
0]
.reviews[index]
.reviewText,
style: TextStyle(
fontSize: 20),
),
),
SizedBox(
height: 50,
),
Divider(height: 1, color: Colors.grey),
Divider(
height: 1,
color: Colors.grey),
],
),
);
@ -718,13 +900,17 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
)
: isAvailabilty
? BaseView<ProductDetailViewModel>(
onModelReady: (model) => model.getProductLocationData(),
builder: (_, model, wi) => ListView.builder(
onModelReady: (model) =>
model.getProductLocationData(),
builder: (_, model, wi) =>
ListView.builder(
physics: ScrollPhysics(),
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: model.productLocationService.length,
itemBuilder: (BuildContext context, int index) {
itemCount: model
.productLocationService.length,
itemBuilder: (BuildContext context,
int index) {
return Padding(
padding: EdgeInsets.all(8.0),
child: Column(
@ -733,11 +919,15 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
children: [
Row(
// crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Expanded(
flex: 1,
child: Image.network(model.productLocationService[index].projectImageUrl),
child: Image.network(model
.productLocationService[
index]
.projectImageUrl),
),
SizedBox(
width: 10,
@ -745,16 +935,25 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
Expanded(
flex: 4,
child: Text(
model.productLocationService[index].locationDescription +
model
.productLocationService[
index]
.locationDescription +
"\n" +
fixingString(model.productLocationService[0].cityName.toString()),
style: TextStyle(fontSize: 12),
fixingString(model
.productLocationService[
0]
.cityName
.toString()),
style: TextStyle(
fontSize: 12),
),
),
Expanded(
flex: 1,
child: IconButton(
icon: Icon(Icons.location_on),
icon: Icon(Icons
.location_on),
color: Colors.red,
onPressed: () {},
),
@ -762,14 +961,17 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
Expanded(
flex: 1,
child: IconButton(
icon: Icon(Icons.phone),
icon:
Icon(Icons.phone),
color: Colors.red,
onPressed: () {},
),
),
],
),
Divider(height: 1.2, color: Colors.grey)
Divider(
height: 1.2,
color: Colors.grey)
],
),
);
@ -784,8 +986,12 @@ class __ProductDetailPageState extends State<ProductDetailPage> {
],
),
),
bottomSheet: footerWidget(widget.product.stockAvailability != 'Out of stock', widget.product.orderMaximumQuantity,
widget.product.orderMinimumQuantity, widget.product.stockQuantity, widget.product),
bottomSheet: footerWidget(
widget.product.stockAvailability != 'Out of stock',
widget.product.orderMaximumQuantity,
widget.product.orderMinimumQuantity,
widget.product.stockQuantity,
widget.product),
);
}
}
@ -796,7 +1002,8 @@ class footerWidget extends StatefulWidget {
final int minQuantity;
final int quantityLimit;
final PharmacyProduct item;
footerWidget(this.isAvailble, this.maxQuantity, this.minQuantity, this.quantityLimit, this.item);
footerWidget(this.isAvailble, this.maxQuantity, this.minQuantity,
this.quantityLimit, this.item);
@override
_footerWidgetState createState() => _footerWidgetState();
}
@ -826,7 +1033,8 @@ class _footerWidgetState extends State<footerWidget> {
padding: const EdgeInsets.all(8.0),
child: Text(
TranslationBase.of(context).quantity,
style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
style: TextStyle(
fontSize: 15, fontWeight: FontWeight.bold),
),
),
// ListView(
@ -848,7 +1056,9 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.white,
child: Text(
'1',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
onTap: () {
@ -873,7 +1083,9 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.white,
child: Text(
'2',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
onTap: () {
@ -898,7 +1110,9 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.white,
child: Text(
'3',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
onTap: () {
@ -923,7 +1137,9 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.white,
child: Text(
'4',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
onTap: () {
@ -948,7 +1164,9 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.white,
child: Text(
'5',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
onTap: () {
@ -973,7 +1191,9 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.white,
child: Text(
'6',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
onTap: () {
@ -998,7 +1218,9 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.white,
child: Text(
'7',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
onTap: () {
@ -1023,7 +1245,9 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.white,
child: Text(
'8',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
onTap: () {
@ -1048,7 +1272,9 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.white,
child: Text(
'9',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
onTap: () {
@ -1073,7 +1299,9 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.white,
child: Text(
'10',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
onTap: () {
@ -1094,7 +1322,8 @@ class _footerWidgetState extends State<footerWidget> {
Container(
width: 50.0,
child: TextField(
decoration: InputDecoration(labelText: 'quantity #'),
decoration:
InputDecoration(labelText: 'quantity #'),
onChanged: (text) {
print(price);
print(widget.quantityLimit);
@ -1173,7 +1402,10 @@ class _footerWidgetState extends State<footerWidget> {
alignment: Alignment.center,
child: Text(
TranslationBase.of(context).addToCart,
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold, fontSize: 15),
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 15),
),
),
)
@ -1188,7 +1420,10 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.green,
child: Text(
TranslationBase.of(context).addToCart,
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold, fontSize: 15),
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 15),
),
),
),
@ -1204,7 +1439,10 @@ class _footerWidgetState extends State<footerWidget> {
alignment: Alignment.center,
child: Text(
TranslationBase.of(context).buyNow,
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold, fontSize: 15),
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 15),
),
),
)
@ -1214,7 +1452,8 @@ class _footerWidgetState extends State<footerWidget> {
addToCartFunction(price, widget.item.id);
Navigator.push(
context,
MaterialPageRoute(builder: (context) => CartOrderPage()),
MaterialPageRoute(
builder: (context) => CartOrderPage()),
);
},
child: Container(
@ -1224,7 +1463,10 @@ class _footerWidgetState extends State<footerWidget> {
color: Colors.blue,
child: Text(
TranslationBase.of(context).buyNow,
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold, fontSize: 15),
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 15),
),
),
),
@ -1265,12 +1507,15 @@ class _productNameAndPriceState extends State<productNameAndPrice> {
widget.item.stockAvailability,
style: widget.item.stockAvailability == 'Out of stock'
? TextStyle(fontWeight: FontWeight.bold, color: Colors.red)
: TextStyle(fontWeight: FontWeight.bold, color: Colors.green),
: TextStyle(
fontWeight: FontWeight.bold, color: Colors.green),
),
SizedBox(width: 20),
widget.item.stockAvailability == 'Out of stock' && customerId != null
widget.item.stockAvailability == 'Out of stock' &&
customerId != null
? InkWell(
onTap: () => notifyMeWhenAvailable(context, widget.item.id),
onTap: () =>
notifyMeWhenAvailable(context, widget.item.id),
child: Row(children: [
Text(
TranslationBase.of(context).notifyMe,
@ -1288,7 +1533,9 @@ class _productNameAndPriceState extends State<productNameAndPrice> {
]),
)
: Container(
margin: languageID == 'ar' ? EdgeInsets.only(right: 25) : EdgeInsets.only(left: 25),
margin: languageID == 'ar'
? EdgeInsets.only(right: 25)
: EdgeInsets.only(left: 25),
width: 40,
height: 40,
decoration: BoxDecoration(
@ -1324,9 +1571,12 @@ class _productNameAndPriceState extends State<productNameAndPrice> {
child: Container(
margin: EdgeInsets.only(left: 5),
child: Align(
alignment: languageID == 'ar' ? Alignment.topRight : Alignment.topLeft,
alignment:
languageID == 'ar' ? Alignment.topRight : Alignment.topLeft,
child: Text(
languageID == 'ar' ? widget.item.fullDescriptionn : widget.item.fullDescription,
languageID == 'ar'
? widget.item.fullDescriptionn
: widget.item.fullDescription,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
),
),
@ -1358,7 +1608,9 @@ class _productNameAndPriceState extends State<productNameAndPrice> {
child: Container(
child: widget.item.rxMessage != null
? Text(
languageID == 'ar' ? widget.item.rxMessagen.toString() : widget.item.rxMessage.toString(),
languageID == 'ar'
? widget.item.rxMessagen.toString()
: widget.item.rxMessage.toString(),
style: TextStyle(color: Colors.red, fontSize: 10),
)
: Container()),
@ -1524,7 +1776,9 @@ slideDetail() {
),
color: Colors.white,
),
child: const Text('1', textAlign: TextAlign.center, style: TextStyle(color: Color(0xFF000000))),
child: const Text('1',
textAlign: TextAlign.center,
style: TextStyle(color: Color(0xFF000000))),
),
)
],
@ -1606,7 +1860,13 @@ settingModalBottomSheet(context) {
leading: new Icon(Icons.shopping_cart),
title: new Text('Add to cart'),
onTap: () => {
if (price > 0) {addToCartFunction(price, itemID)} else {AppToast.showErrorToast(message: "you should add quantity")}
if (price > 0)
{addToCartFunction(price, itemID)}
else
{
AppToast.showErrorToast(
message: "you should add quantity")
}
}),
new ListTile(
leading: new Icon(Icons.favorite_border),
@ -1617,7 +1877,8 @@ settingModalBottomSheet(context) {
leading: new Icon(Icons.compare),
title: new Text('Compare'),
onTap: () => {
Provider.of<CompareList>(context, listen: false).addItem(specificationData),
Provider.of<CompareList>(context, listen: false)
.addItem(specificationData),
},
),
],

@ -1,6 +1,8 @@
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/product-brands.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/product_detail.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
@ -8,6 +10,7 @@ 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:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'base/base_view.dart';
@ -45,13 +48,13 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
child: Row(
children: [
Container(
width: MediaQuery.of(context).size.width * 0.79,
width: MediaQuery.of(context).size.width * 0.70,
child: Form(
key: _formKey,
child: TextFields(
autoFocus: true,
hintText: 'Search',
fontSize: 19.0,
fontSize: 14.5,
prefixIcon: Icon(Icons.search),
inputAction: TextInputAction.search,
onSaved: (value) {
@ -102,7 +105,8 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
child: NetworkBaseView(
baseViewModel: model,
child: model.searchList.isNotEmpty
? Container(
? InkWell(
child: Container(
height: MediaQuery.of(context).size.height * 0.80,
child: GridView.builder(
//physics: NeverScrollableScrollPhysics(),
@ -115,8 +119,10 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
),
itemCount: model.searchList.length,
itemBuilder: (BuildContext context, int index) {
return Card(
color: model.searchList[index].discountName !=
return InkWell(
child: Card(
color: model.searchList[index]
.discountName !=
null
? Color(0xffFFFF00)
: Colors.white,
@ -153,7 +159,8 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
padding:
EdgeInsets.symmetric(horizontal: 0),
width:
MediaQuery.of(context).size.width / 3,
MediaQuery.of(context).size.width /
3,
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
@ -165,10 +172,12 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
0, 16, 0, 0),
alignment: Alignment.center,
child: Image.network(
model.searchList[index].images
.isNotEmpty
? model.searchList[index]
.images[0].thumb
model.searchList[index]
.images.isNotEmpty
? model
.searchList[index]
.images[0]
.thumb
: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png',
fit: BoxFit.cover,
height: 80,
@ -186,15 +195,18 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
borderRadius: BorderRadius.only(
borderRadius:
BorderRadius.only(
topLeft:
Radius.circular(6)),
Radius.circular(
6)),
),
child: Texts(
model.searchList[index]
.rxMessage !=
null
? model.searchList[index]
? model
.searchList[index]
.rxMessage
: "",
color: Colors.white,
@ -215,13 +227,15 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
CrossAxisAlignment.start,
children: [
Texts(
model.searchList[index].name,
model
.searchList[index].name,
regular: true,
fontSize: 12,
fontWeight: FontWeight.w400,
),
Padding(
padding: const EdgeInsets.only(
padding:
const EdgeInsets.only(
top: 4, bottom: 4),
child: Texts(
"SAR ${model.searchList[index].price}",
@ -254,7 +268,8 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
"(${model.searchList[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight: FontWeight.w400,
fontWeight:
FontWeight.w400,
)
],
),
@ -264,9 +279,19 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
],
),
),
),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.searchList[index]),
)),
},
);
},
),
),
)
: Texts(msg),
),

@ -1,10 +1,12 @@
import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/product_detail.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.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:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@ -607,6 +609,7 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
itemBuilder: (BuildContext context, int index) {
return NetworkBaseView(
baseViewModel: model,
child: InkWell(
child: Card(
color: model.subProducts[index]
.discountName !=
@ -656,12 +659,17 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
Stack(
children: [
Container(
margin: EdgeInsets.fromLTRB(
margin:
EdgeInsets.fromLTRB(
0, 16, 0, 0),
alignment: Alignment.center,
alignment:
Alignment.center,
child: Image.network(
model.subProducts[index]
.images.isNotEmpty
model
.subProducts[
index]
.images
.isNotEmpty
? model
.subProducts[
index]
@ -678,18 +686,22 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
index]
.rxMessage !=
null
? MediaQuery.of(context)
? MediaQuery.of(
context)
.size
.width /
5
: 0,
padding: EdgeInsets.all(4),
padding:
EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
color:
Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(6)),
.circular(
6)),
),
child: Texts(
model.subProducts[index]
@ -716,7 +728,8 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
CrossAxisAlignment
.start,
children: [
Texts(
model.subProducts[index]
@ -728,7 +741,8 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
),
Padding(
padding:
const EdgeInsets.only(
const EdgeInsets
.only(
top: 4,
bottom: 4),
child: Texts(
@ -769,6 +783,15 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
],
),
),
),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.subProducts[index]),
)),
},
));
},
),
@ -780,7 +803,8 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
itemCount: model.subProducts.length,
itemBuilder:
(BuildContext context, int index) {
return Card(
return InkWell(
child: Card(
child: Row(
children: [
Stack(
@ -788,9 +812,11 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
Column(
children: [
Container(
decoration: BoxDecoration(),
decoration:
BoxDecoration(),
child: Padding(
padding: EdgeInsets.only(
padding:
EdgeInsets.only(
left: 9.0,
top: 8.0,
right: 10.0,
@ -798,12 +824,17 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
),
),
Container(
margin: EdgeInsets.fromLTRB(
margin:
EdgeInsets.fromLTRB(
0, 0, 0, 0),
alignment: Alignment.center,
alignment:
Alignment.center,
child: Image.network(
model.subProducts[index]
.images.isNotEmpty
model
.subProducts[
index]
.images
.isNotEmpty
? model
.subProducts[
index]
@ -824,18 +855,22 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
index]
.rxMessage !=
null
? MediaQuery.of(context)
? MediaQuery.of(
context)
.size
.width /
5
: 0,
padding: EdgeInsets.all(4),
padding:
EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
color:
Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(6)),
.circular(
6)),
),
child: Texts(
model.subProducts[index]
@ -865,7 +900,8 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceAround,
MainAxisAlignment
.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
@ -873,15 +909,19 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
height: 4.0,
),
Container(
height: 35.0,
width: 250.0,
width:
MediaQuery.of(context)
.size
.width *
0.65,
child: Texts(
model.subProducts[index]
.name,
regular: true,
fontSize: 13.2,
fontWeight: FontWeight.w500,
maxLines: 2,
fontWeight:
FontWeight.w500,
maxLines: 5,
),
),
SizedBox(
@ -932,6 +972,15 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
),
],
),
),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.subProducts[index]),
)),
},
);
}),
)

Loading…
Cancel
Save