Merge branch 'pharmacy-bugs' into 'development'

pharmacy bugs fixed

See merge request Cloud_Solution/diplomatic-quarter!272
merge-requests/273/merge
Mohammad Aljammal 5 years ago
commit d84d60dc56

@ -1,5 +1,6 @@
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/PharmacyProduct.dart';
import 'package:diplomaticquarterapp/core/model/pharmacy/brands_model.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/categorise_parent_model.dart';
import 'package:diplomaticquarterapp/core/model/pharmacy/final_products_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; List<CategoriseParentModel> get parentCategoriseList => _parentCategoriseList;
//service three //service three
List<ParentProductsModel> _parentProductsList = List(); List<PharmacyProduct> _parentProductsList = List();
List<ParentProductsModel> get parentProductsList => _parentProductsList; List<PharmacyProduct> get parentProductsList => _parentProductsList;
//service four //service four
List<SubCategoriesModel> _subCategoriseList = List(); List<SubCategoriesModel> _subCategoriseList = List();
List<SubCategoriesModel> get subCategoriseList => _subCategoriseList; List<SubCategoriesModel> get subCategoriseList => _subCategoriseList;
//service five //service five
List<SubProductsModel> _subProductsList = List(); List<PharmacyProduct> _subProductsList = List();
List<SubProductsModel> get subProductsList => _subProductsList; List<PharmacyProduct> get subProductsList => _subProductsList;
//service six //service six
List<FinalProductsModel> _finalProducts = List(); List<PharmacyProduct> _finalProducts = List();
List<FinalProductsModel> get finalProducts => _finalProducts; List<PharmacyProduct> get finalProducts => _finalProducts;
//service 7 //service 7
@ -44,8 +45,8 @@ class PharmacyCategoriseService extends BaseService {
// service 8 // service 8
List<SearchProductsModel> _searchList = List(); List<PharmacyProduct> _searchList = List();
List<SearchProductsModel> get searchList => _searchList; List<PharmacyProduct> get searchList => _searchList;
List<ScanQrModel> _scanList = List(); List<ScanQrModel> _scanList = List();
List<ScanQrModel> get scanList => _scanList; List<ScanQrModel> get scanList => _scanList;
@ -101,7 +102,7 @@ class PharmacyCategoriseService extends BaseService {
endPoint, endPoint,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
response['products'].forEach((item) { response['products'].forEach((item) {
_searchList.add(SearchProductsModel.fromJson(item)); _searchList.add(PharmacyProduct.fromJson(item));
}); });
}, },
onFailure: (String error, int statusCode) { onFailure: (String error, int statusCode) {
@ -157,7 +158,7 @@ class PharmacyCategoriseService extends BaseService {
endPoint, endPoint,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
response['products'].forEach((item) { response['products'].forEach((item) {
_parentProductsList.add(ParentProductsModel.fromJson(item)); _parentProductsList.add(PharmacyProduct.fromJson(item));
}); });
}, },
onFailure: (String error, int statusCode) { onFailure: (String error, int statusCode) {
@ -197,7 +198,7 @@ class PharmacyCategoriseService extends BaseService {
endPoint, endPoint,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
response['products'].forEach((item) { response['products'].forEach((item) {
_subProductsList.add(SubProductsModel.fromJson(item)); _subProductsList.add(PharmacyProduct.fromJson(item));
}); });
}, },
onFailure: (String error, int statusCode) { onFailure: (String error, int statusCode) {
@ -216,7 +217,7 @@ class PharmacyCategoriseService extends BaseService {
endPoint, endPoint,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
response['products'].forEach((item) { response['products'].forEach((item) {
_finalProducts.add(FinalProductsModel.fromJson(item)); _finalProducts.add(PharmacyProduct.fromJson(item));
}); });
}, },
onFailure: (String error, int statusCode) { onFailure: (String error, int statusCode) {
@ -235,25 +236,30 @@ class PharmacyCategoriseService extends BaseService {
GET_BRAND_ITEMS, GET_BRAND_ITEMS,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
response['products'].forEach((item) { response['products'].forEach((item) {
_finalProducts.add(FinalProductsModel.fromJson(item)); _finalProducts.add(PharmacyProduct.fromJson(item));
}); });
}, },
onFailure: (String error, int statusCode) { onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;
}, queryParams: queryParams, },
queryParams: queryParams,
); );
} }
Future getLastVisitedProducts() async { Future getLastVisitedProducts() async {
String lastVisited = ""; String lastVisited = "";
if (await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS) != null) { if (await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS) !=
lastVisited = await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS); null) {
lastVisited =
await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS);
try { 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(); _finalProducts.clear();
response['products'].forEach((item) { response['products'].forEach((item) {
_finalProducts.add(FinalProductsModel.fromJson(item)); _finalProducts.add(PharmacyProduct.fromJson(item));
}); });
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
@ -268,13 +274,14 @@ class PharmacyCategoriseService extends BaseService {
Future getBestSellerProducts() async { Future getBestSellerProducts() async {
Map<String, String> queryParams = { Map<String, String> queryParams = {
'fields': 'fields':
'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', '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 { 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(); _finalProducts.clear();
response['products'].forEach((item) { response['products'].forEach((item) {
_finalProducts.add(FinalProductsModel.fromJson(item)); _finalProducts.add(PharmacyProduct.fromJson(item));
}); });
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; 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/brands_model.dart';
import 'package:diplomaticquarterapp/core/model/pharmacy/categorise_parent_model.dart'; import 'package:diplomaticquarterapp/core/model/pharmacy/categorise_parent_model.dart';
import 'package:diplomaticquarterapp/core/model/pharmacy/final_products_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 { class PharmacyCategoriseViewModel extends BaseViewModel {
bool hasError = false; 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<BrandsModel> get brandsList => _pharmacyCategoriseService.brandsList;
List<SearchProductsModel> get searchList => _pharmacyCategoriseService.searchList; List<PharmacyProduct> get searchList => _pharmacyCategoriseService.searchList;
List<ScanQrModel> get scanList => _pharmacyCategoriseService.scanList; List<ScanQrModel> get scanList => _pharmacyCategoriseService.scanList;

@ -1,9 +1,11 @@
import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.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/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/StarRating.dart'; import 'package:diplomaticquarterapp/widgets/others/StarRating.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_pharmacy_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_pharmacy_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/network_base_view.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:flutter/material.dart';
import 'base/base_view.dart'; import 'base/base_view.dart';
@ -20,9 +22,7 @@ class FinalProductsPage extends StatefulWidget {
class _FinalProductsPageState extends State<FinalProductsPage> { class _FinalProductsPageState extends State<FinalProductsPage> {
String id; String id;
_FinalProductsPageState({this.id}); _FinalProductsPageState({this.id});
String categoriseName = "Personal Care"; String categoriseName = "Personal Care";
bool styleOne = true; bool styleOne = true;
bool styleTwo = false; bool styleTwo = false;
@ -31,7 +31,6 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
color: Colors.blue, color: Colors.blue,
size: 29.0, size: 29.0,
); );
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BaseView<PharmacyCategoriseViewModel>( return BaseView<PharmacyCategoriseViewModel>(
@ -135,193 +134,220 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return NetworkBaseView( return NetworkBaseView(
baseViewModel: model, baseViewModel: model,
child: Card( child: InkWell(
color: model.finalProducts[index] child: Card(
.discountName != color: model.finalProducts[index]
null .discountName !=
? Color(0xffFFFF00) null
: Colors.white, ? Color(0xffFFFF00)
elevation: 0, : Colors.white,
shape: Border( elevation: 0,
right: BorderSide( shape: Border(
color: Colors.grey.shade300, right: BorderSide(
width: 1, color: Colors.grey.shade300,
), width: 1,
left: BorderSide( ),
color: Colors.grey.shade300, left: BorderSide(
width: 1, color: Colors.grey.shade300,
), width: 1,
bottom: BorderSide( ),
color: Colors.grey.shade300, bottom: BorderSide(
width: 1, color: Colors.grey.shade300,
width: 1,
),
top: BorderSide(
color: Colors.grey.shade300,
width: 1,
),
), ),
top: BorderSide( margin: EdgeInsets.symmetric(
color: Colors.grey.shade300, horizontal: 8,
width: 1, vertical: 4,
), ),
), child: Container(
margin: EdgeInsets.symmetric( decoration: BoxDecoration(
horizontal: 8, borderRadius: BorderRadius.only(
vertical: 4, topLeft: Radius.circular(110.0),
), ),
child: Container( color: Colors.white,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(110.0),
), ),
color: Colors.white, padding: EdgeInsets.symmetric(
), horizontal: 0),
padding: EdgeInsets.symmetric( width: MediaQuery.of(context)
horizontal: 0), .size
width: MediaQuery.of(context) .width /
.size 3,
.width / child: Column(
3, crossAxisAlignment:
child: Column( CrossAxisAlignment.start,
crossAxisAlignment: children: [
CrossAxisAlignment.start, Stack(
children: [ children: [
Stack( Container(
children: [ margin:
Container( EdgeInsets.fromLTRB(
margin: EdgeInsets.fromLTRB( 0, 16, 0, 0),
0, 16, 0, 0), alignment:
alignment: Alignment.center, Alignment.center,
child: Image.network( child: Image.network(
model.finalProducts[index] model
.images.isNotEmpty
? model
.finalProducts[
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,
),
),
Container(
width: model
.finalProducts[ .finalProducts[
index] index]
.rxMessage != .images
null .isNotEmpty
? MediaQuery.of(context) ? model
.size .finalProducts[
.width / index]
2.8 .images[0]
: 0, .thumb
padding: EdgeInsets.all(4), : 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png',
decoration: BoxDecoration( fit: BoxFit.cover,
color: Color(0xffb23838), height: 80,
borderRadius: ),
BorderRadius.only(
topLeft: Radius
.circular(6)),
), ),
child: Texts( Container(
model.finalProducts[index] width: model
.finalProducts[
index]
.rxMessage != .rxMessage !=
null null
? model ? MediaQuery.of(
.finalProducts[ context)
index] .size
.rxMessage .width /
: "", 2.8
color: Colors.white, : 0,
regular: true, padding:
fontSize: 10, EdgeInsets.all(4),
fontWeight: decoration: BoxDecoration(
FontWeight.w600, color:
Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(
6)),
),
child: Texts(
model
.finalProducts[
index]
.rxMessage !=
null
? model
.finalProducts[
index]
.rxMessage
: "",
color: Colors.white,
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w600,
),
), ),
), ],
],
),
Container(
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
), ),
child: Column( Container(
crossAxisAlignment: margin: EdgeInsets.symmetric(
CrossAxisAlignment.start, horizontal: 6,
children: [ vertical: 0,
if (model ),
child: Column(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
if (model
.finalProducts[
index]
.discountName !=
null)
Container(
width:
double.infinity,
height: 13.0,
decoration:
BoxDecoration(
color: Color(
0xff5AB145),
),
child: Center(
child: Texts(
model
.finalProducts[
index]
.discountName,
regular: true,
color:
Colors.white,
fontSize: 10.4,
),
),
),
Texts(
model
.finalProducts[ .finalProducts[
index] index]
.discountName != .name,
null) regular: true,
Container( fontSize: 12,
width: double.infinity, fontWeight:
height: 13.0, FontWeight.w400,
decoration: ),
BoxDecoration( Padding(
color: padding:
Color(0xff5AB145), const EdgeInsets
), .only(
child: Center( top: 4,
child: Texts( bottom: 4),
model child: Texts(
.finalProducts[ "SAR ${model.finalProducts[index].price}",
index] bold: true,
.discountName, fontSize: 14,
regular: true,
color: Colors.white,
fontSize: 10.4,
),
), ),
), ),
Texts( Row(
model.finalProducts[index] children: [
.name, StarRating(
regular: true, totalAverage: model
fontSize: 12, .finalProducts[
fontWeight: index]
FontWeight.w400, .approvedRatingSum >
), 0
Padding( ? (model.finalProducts[index].approvedRatingSum
padding: .toDouble() /
const EdgeInsets.only( model
top: 4, .finalProducts[index]
bottom: 4), .approvedRatingSum
child: Texts( .toDouble())
"SAR ${model.finalProducts[index].price}", .toDouble()
bold: true, : 0,
fontSize: 14, forceStars: true),
Texts(
"(${model.finalProducts[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
)
],
), ),
), ],
Row( ),
children: [
StarRating(
totalAverage: model
.finalProducts[
index]
.approvedRatingSum >
0
? (model.finalProducts[index].approvedRatingSum
.toDouble() /
model
.finalProducts[index]
.approvedRatingSum
.toDouble())
.toDouble()
: 0,
forceStars: true),
Texts(
"(${model.finalProducts[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
)
],
),
],
), ),
), ],
], ),
), ),
), ),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.finalProducts[index]),
)),
},
)); ));
}, },
), ),
@ -334,158 +360,186 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
itemCount: model.finalProducts.length, itemCount: model.finalProducts.length,
itemBuilder: itemBuilder:
(BuildContext context, int index) { (BuildContext context, int index) {
return Card( return InkWell(
child: Row( child: Card(
children: [ child: Row(
Stack( children: [
children: [ Stack(
Column( children: [
children: [ Column(
Container( children: [
decoration: BoxDecoration(), Container(
child: Padding( decoration:
padding: EdgeInsets.only( BoxDecoration(),
left: 9.0, child: Padding(
top: 8.0, padding:
right: 10.0, EdgeInsets.only(
left: 9.0,
top: 8.0,
right: 10.0,
),
), ),
), ),
), Container(
Container( margin:
margin: EdgeInsets.fromLTRB( EdgeInsets.fromLTRB(
0, 0, 0, 0), 0, 0, 0, 0),
alignment: Alignment.center, alignment:
child: Image.network( Alignment.center,
model.finalProducts[index] child: Image.network(
.images.isNotEmpty model
? model .finalProducts[
.finalProducts[ index]
index] .images
.images[0] .isNotEmpty
.thumb ? model
: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png', .finalProducts[
fit: BoxFit.contain, index]
height: 80, .images[0]
.thumb
: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png',
fit: BoxFit.contain,
height: 80,
),
), ),
), ],
], ),
Column(
children: [
Container(
width: model
.finalProducts[
index]
.rxMessage !=
null
? MediaQuery.of(
context)
.size
.width /
3.5
: 0,
padding:
EdgeInsets.all(4),
decoration: BoxDecoration(
color:
Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(
6)),
),
child: Texts(
model
.finalProducts[
index]
.rxMessage !=
null
? model
.finalProducts[
index]
.rxMessage
: "",
color: Colors.white,
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w600,
),
),
],
),
],
),
Container(
height: 100.0,
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
), ),
Column( child: Column(
mainAxisAlignment:
MainAxisAlignment
.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [ children: [
SizedBox(
height: 4.0,
),
Container( Container(
width: model width:
.finalProducts[ MediaQuery.of(context)
index]
.rxMessage !=
null
? MediaQuery.of(context)
.size .size
.width / .width *
3.5 0.65,
: 0,
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(6)),
),
child: Texts( child: Texts(
model.finalProducts[index] model.finalProducts[index]
.rxMessage != .name,
null
? model
.finalProducts[
index]
.rxMessage
: "",
color: Colors.white,
regular: true, regular: true,
fontSize: 10, fontSize: 13.2,
fontWeight: fontWeight:
FontWeight.w600, FontWeight.w500,
maxLines: 5,
), ),
), ),
], SizedBox(
), height: 8.0,
],
),
Container(
height: 100.0,
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
SizedBox(
height: 4.0,
),
Container(
height: 35.0,
width: 250.0,
child: Texts(
model.finalProducts[index]
.name,
regular: true,
fontSize: 13.2,
fontWeight: FontWeight.w500,
maxLines: 2,
), ),
), Padding(
SizedBox( padding:
height: 8.0, const EdgeInsets.only(
), top: 4, bottom: 4),
Padding( child: Texts(
padding: "SAR ${model.finalProducts[index].price}",
const EdgeInsets.only( bold: true,
top: 4, bottom: 4), fontSize: 14,
child: Texts( ),
"SAR ${model.finalProducts[index].price}",
bold: true,
fontSize: 14,
), ),
), Row(
Row( children: [
children: [ StarRating(
StarRating( totalAverage: model
totalAverage: model .finalProducts[
.finalProducts[ index]
index] .approvedRatingSum >
.approvedRatingSum > 0
0 ? (model
? (model .finalProducts[
.finalProducts[ index]
index] .approvedRatingSum
.approvedRatingSum .toDouble() /
.toDouble() / model
model .finalProducts[
.finalProducts[ index]
index] .approvedRatingSum
.approvedRatingSum .toDouble())
.toDouble()) .toDouble()
.toDouble() : 0,
: 0, forceStars: true),
forceStars: true), Texts(
Texts( "(${model.finalProducts[index].approvedTotalReviews})",
"(${model.finalProducts[index].approvedTotalReviews})", regular: true,
regular: true, fontSize: 10,
fontSize: 10, fontWeight:
fontWeight: FontWeight.w400,
FontWeight.w400, )
) ],
], ),
), ],
], ),
), ),
), ],
], ),
), ),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.finalProducts[index]),
)),
},
); );
}), }),
), ),

File diff suppressed because it is too large Load Diff

@ -1,6 +1,7 @@
import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.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/sub_categorise_page.dart'; import 'package:diplomaticquarterapp/pages/sub_categorise_page.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.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_pharmacy_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/network_base_view.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:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:giffy_dialog/giffy_dialog.dart'; import 'package:giffy_dialog/giffy_dialog.dart';
@ -111,10 +113,10 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
return Container( return Container(
height: MediaQuery.of(context) // height: MediaQuery.of(context)
.size // .size
.height * // .height *
0.89, // 0.89,
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: ListView.builder( child: ListView.builder(
@ -130,7 +132,7 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
child: Padding( child: Padding(
padding: padding:
EdgeInsets.all( EdgeInsets.all(
8.0), 4.0),
child: InkWell( child: InkWell(
child: Column( child: Column(
crossAxisAlignment: crossAxisAlignment:
@ -229,10 +231,10 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
.size .size
.width * .width *
0.197, 0.197,
height: MediaQuery.of(context) // height: MediaQuery.of(context)
.size // .size
.height * // .height *
0.08, // 0.08,
child: Center( child: Center(
child: Texts( child: Texts(
projectViewModel.isArabic projectViewModel.isArabic
@ -646,246 +648,260 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
(BuildContext context, int index) { (BuildContext context, int index) {
return NetworkBaseView( return NetworkBaseView(
baseViewModel: model, baseViewModel: model,
child: Card( child: InkWell(
color: model.parentProducts[index] child: Card(
.discountName != color: model.parentProducts[index]
null .discountName !=
? Color(0xffFFFF00) null
: Colors.white, ? Color(0xffFFFF00)
elevation: 0, : Colors.white,
shape: Border( elevation: 0,
right: BorderSide( shape: Border(
color: Colors.grey.shade300, right: BorderSide(
width: 1, color: Colors.grey.shade300,
), width: 1,
left: BorderSide( ),
color: Colors.grey.shade300, left: BorderSide(
width: 1, color: Colors.grey.shade300,
), width: 1,
bottom: BorderSide( ),
color: Colors.grey.shade300, bottom: BorderSide(
width: 1, color: Colors.grey.shade300,
width: 1,
),
top: BorderSide(
color: Colors.grey.shade300,
width: 1,
),
), ),
top: BorderSide( margin: EdgeInsets.symmetric(
color: Colors.grey.shade300, horizontal: 8,
width: 1, vertical: 4,
), ),
), child: Container(
margin: EdgeInsets.symmetric( decoration: BoxDecoration(
horizontal: 8, borderRadius:
vertical: 4, BorderRadius.only(
), topLeft:
child: Container( Radius.circular(110.0),
decoration: BoxDecoration( ),
borderRadius: BorderRadius.only( color: Colors.white,
topLeft:
Radius.circular(110.0),
), ),
color: Colors.white, padding: EdgeInsets.symmetric(
), horizontal: 0),
padding: EdgeInsets.symmetric( width: MediaQuery.of(context)
horizontal: 0), .size
width: MediaQuery.of(context) .width /
.size 3,
.width / child: Column(
3, crossAxisAlignment:
child: Column( CrossAxisAlignment.start,
crossAxisAlignment: children: [
CrossAxisAlignment.start, Stack(
children: [ children: [
Stack( if (model
children: [ .parentProducts[
if (model index]
.parentProducts[ .discountName !=
index] null)
.discountName != RotatedBox(
null) quarterTurns: 4,
RotatedBox( child: Container(
quarterTurns: 4, decoration:
child: Container( BoxDecoration(),
decoration: child: Padding(
BoxDecoration(), padding:
child: Padding( EdgeInsets
padding: .only(
EdgeInsets right: 5.0,
.only( top: 20.0,
right: 5.0, bottom: 5.0,
top: 20.0, ),
bottom: 5.0, child: Texts(
), 'offer'
child: Texts( .toUpperCase(),
'offer' color: Colors
.toUpperCase(), .red,
color: fontSize:
Colors.red, 13.0,
fontSize: 13.0, fontWeight:
fontWeight: FontWeight
FontWeight .w900,
.w900, ),
), ),
transform: new Matrix4
.rotationZ(
5.837200),
), ),
transform: new Matrix4
.rotationZ(
5.837200),
), ),
), Container(
Container( margin: EdgeInsets
margin: .fromLTRB(
EdgeInsets.fromLTRB( 0, 16, 0, 0),
0, 16, 0, 0), alignment:
alignment: Alignment.center,
Alignment.center, child: Image.network(
child: Image.network( model
model
.parentProducts[
index]
.images
.isNotEmpty
? model
.parentProducts[
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,
),
),
Container(
width: model
.parentProducts[ .parentProducts[
index] index]
.rxMessage != .images
null .isNotEmpty
? MediaQuery.of( ? model
context) .parentProducts[
.size index]
.width / .images[0]
5 .thumb
: 0, : 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png',
padding: fit: BoxFit.cover,
EdgeInsets.all(4), height: 80,
decoration: ),
BoxDecoration(
color:
Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(
6)),
), ),
child: Texts( Container(
model width: model
.parentProducts[ .parentProducts[
index] index]
.rxMessage != .rxMessage !=
null null
? model ? MediaQuery.of(
.parentProducts[ context)
index] .size
.rxMessage .width /
: "", 5
color: Colors.white, : 0,
regular: true, padding:
fontSize: 10, EdgeInsets.all(4),
fontWeight: decoration:
FontWeight.w400, BoxDecoration(
color: Color(
0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(
6)),
),
child: Texts(
model
.parentProducts[
index]
.rxMessage !=
null
? model
.parentProducts[
index]
.rxMessage
: "",
color: Colors.white,
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
),
), ),
), ],
],
),
Container(
margin:
EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
), ),
child: Column( Container(
crossAxisAlignment: margin:
CrossAxisAlignment EdgeInsets.symmetric(
.start, horizontal: 6,
children: [ vertical: 0,
if (model ),
child: Column(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
if (model
.parentProducts[
index]
.discountName !=
null)
Container(
width: double
.infinity,
height: 13.0,
decoration:
BoxDecoration(
color: Color(
0xff5AB145),
),
child: Center(
child: Texts(
model
.parentProducts[
index]
.discountName,
regular: true,
color: Colors
.white,
fontSize:
10.4,
),
),
),
Texts(
model
.parentProducts[ .parentProducts[
index] index]
.discountName != .name,
null) regular: true,
Container( fontSize: 12,
width: fontWeight:
double.infinity, FontWeight.w700,
height: 13.0, ),
decoration: Padding(
BoxDecoration( padding:
color: Color( const EdgeInsets
0xff5AB145), .only(
), top: 4,
child: Center( bottom: 4),
child: Texts( child: Texts(
model "SAR ${model.parentProducts[index].price}",
.parentProducts[ bold: true,
index] fontSize: 14,
.discountName,
regular: true,
color: Colors
.white,
fontSize: 10.4,
),
), ),
), ),
Texts( Row(
model children: [
.parentProducts[ StarRating(
index] totalAverage: model
.name, .parentProducts[
regular: true, index]
fontSize: 12, .approvedRatingSum >
fontWeight: 0
FontWeight.w700, ? (model.parentProducts[index].approvedRatingSum.toDouble() /
), model.parentProducts[index].approvedRatingSum
Padding( .toDouble())
padding: .toDouble()
const EdgeInsets : 0,
.only( forceStars:
top: 4, true),
bottom: 4), Texts(
child: Texts( "(${model.parentProducts[index].approvedTotalReviews})",
"SAR ${model.parentProducts[index].price}", regular: true,
bold: true, fontSize: 10,
fontSize: 14, fontWeight:
FontWeight
.w400,
)
],
), ),
), ],
Row( ),
children: [
StarRating(
totalAverage: model
.parentProducts[
index]
.approvedRatingSum >
0
? (model.parentProducts[index].approvedRatingSum.toDouble() /
model.parentProducts[index].approvedRatingSum
.toDouble())
.toDouble()
: 0,
forceStars:
true),
Texts(
"(${model.parentProducts[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight:
FontWeight
.w400,
)
],
),
],
), ),
), ],
], ),
), ),
), ),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.parentProducts[
index]),
)),
},
)); ));
}, },
), ),
@ -898,168 +914,191 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
itemCount: model.parentProducts.length, itemCount: model.parentProducts.length,
itemBuilder: itemBuilder:
(BuildContext context, int index) { (BuildContext context, int index) {
return Card( return InkWell(
child: Row( child: Card(
children: [ child: Row(
Stack( children: [
children: [ Stack(
Column( children: [
children: [ Column(
Container( children: [
decoration: Container(
BoxDecoration(), decoration:
child: Padding( BoxDecoration(),
padding: child: Padding(
EdgeInsets.only( padding:
left: 9.0, EdgeInsets.only(
top: 8.0, left: 9.0,
right: 10.0, top: 8.0,
right: 10.0,
),
), ),
), ),
), Container(
Container( margin: EdgeInsets
margin: .fromLTRB(
EdgeInsets.fromLTRB( 0, 0, 0, 0),
0, 0, 0, 0), alignment:
alignment: Alignment.center,
Alignment.center, child: Image.network(
child: Image.network( model
model
.parentProducts[
index]
.images
.isNotEmpty
? model
.parentProducts[
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.contain,
height: 80,
),
),
],
),
Column(
children: [
Container(
width: model
.parentProducts[ .parentProducts[
index] index]
.rxMessage != .images
null .isNotEmpty
? MediaQuery.of( ? model
context) .parentProducts[
.size index]
.width / .images[0]
5 .thumb
: 0, : 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png',
padding: fit: BoxFit.contain,
EdgeInsets.all(4), height: 80,
decoration: ),
BoxDecoration(
color:
Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(
6)),
), ),
child: Texts( ],
model ),
Column(
children: [
Container(
width: model
.parentProducts[ .parentProducts[
index] index]
.rxMessage != .rxMessage !=
null null
? model ? MediaQuery.of(
.parentProducts[ context)
index] .size
.rxMessage .width /
: "", 5
color: Colors.white, : 0,
padding:
EdgeInsets.all(4),
decoration:
BoxDecoration(
color: Color(
0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(
6)),
),
child: Expanded(
child: Texts(
model
.parentProducts[
index]
.rxMessage !=
null
? model
.parentProducts[
index]
.rxMessage
: "",
color:
Colors.white,
regular: true,
fontSize: 10,
fontWeight:
FontWeight
.w400,
),
),
),
],
),
],
),
Container(
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
),
child: Column(
mainAxisAlignment:
MainAxisAlignment
.spaceAround,
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
SizedBox(
height: 4.0,
),
Container(
width: MediaQuery.of(
context)
.size
.width *
0.65,
child: Texts(
model
.parentProducts[
index]
.name,
regular: true, regular: true,
fontSize: 10, fontSize: 13.2,
fontWeight: fontWeight:
FontWeight.w400, FontWeight.w500,
maxLines: 5,
),
),
SizedBox(
height: 8.0,
),
Padding(
padding:
const EdgeInsets
.only(
top: 4,
bottom: 4),
child: Texts(
"SAR ${model.parentProducts[index].price}",
bold: true,
fontSize: 14,
), ),
), ),
Row(
children: [
StarRating(
totalAverage: model
.parentProducts[
index]
.approvedRatingSum >
0
? (model.parentProducts[index].approvedRatingSum
.toDouble() /
model
.parentProducts[index]
.approvedRatingSum
.toDouble())
.toDouble()
: 0,
forceStars: true),
Texts(
"(${model.parentProducts[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
)
],
),
], ],
), ),
],
),
Container(
height: 100.0,
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
),
child: Column(
mainAxisAlignment:
MainAxisAlignment
.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
SizedBox(
height: 4.0,
),
Texts(
model
.parentProducts[index]
.name,
regular: true,
fontSize: 13.2,
fontWeight:
FontWeight.w500,
maxLines: 5,
),
SizedBox(
height: 8.0,
),
Padding(
padding:
const EdgeInsets.only(
top: 4,
bottom: 4),
child: Texts(
"SAR ${model.parentProducts[index].price}",
bold: true,
fontSize: 14,
),
),
Row(
children: [
StarRating(
totalAverage: model
.parentProducts[
index]
.approvedRatingSum >
0
? (model.parentProducts[index].approvedRatingSum
.toDouble() /
model
.parentProducts[index]
.approvedRatingSum
.toDouble())
.toDouble()
: 0,
forceStars: true),
Texts(
"(${model.parentProducts[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
)
],
),
],
), ),
), ],
], ),
), ),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(model
.parentProducts[index]),
)),
},
); );
}), }),
) )

File diff suppressed because it is too large Load Diff

@ -1,6 +1,8 @@
import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.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/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.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/StarRating.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_pharmacy_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_pharmacy_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/network_base_view.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:flutter/material.dart';
import 'base/base_view.dart'; import 'base/base_view.dart';
@ -45,13 +48,13 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
child: Row( child: Row(
children: [ children: [
Container( Container(
width: MediaQuery.of(context).size.width * 0.79, width: MediaQuery.of(context).size.width * 0.70,
child: Form( child: Form(
key: _formKey, key: _formKey,
child: TextFields( child: TextFields(
autoFocus: true, autoFocus: true,
hintText: 'Search', hintText: 'Search',
fontSize: 19.0, fontSize: 14.5,
prefixIcon: Icon(Icons.search), prefixIcon: Icon(Icons.search),
inputAction: TextInputAction.search, inputAction: TextInputAction.search,
onSaved: (value) { onSaved: (value) {
@ -102,170 +105,192 @@ class _SearchProductsPageState extends State<SearchProductsPage> {
child: NetworkBaseView( child: NetworkBaseView(
baseViewModel: model, baseViewModel: model,
child: model.searchList.isNotEmpty child: model.searchList.isNotEmpty
? Container( ? InkWell(
height: MediaQuery.of(context).size.height * 0.80, child: Container(
child: GridView.builder( height: MediaQuery.of(context).size.height * 0.80,
//physics: NeverScrollableScrollPhysics(), child: GridView.builder(
gridDelegate: //physics: NeverScrollableScrollPhysics(),
SliverGridDelegateWithFixedCrossAxisCount( gridDelegate:
crossAxisCount: 2, SliverGridDelegateWithFixedCrossAxisCount(
crossAxisSpacing: 0.5, crossAxisCount: 2,
mainAxisSpacing: 2.0, crossAxisSpacing: 0.5,
childAspectRatio: 1.0, mainAxisSpacing: 2.0,
), childAspectRatio: 1.0,
itemCount: model.searchList.length, ),
itemBuilder: (BuildContext context, int index) { itemCount: model.searchList.length,
return Card( itemBuilder: (BuildContext context, int index) {
color: model.searchList[index].discountName != return InkWell(
null child: Card(
? Color(0xffFFFF00) color: model.searchList[index]
: Colors.white, .discountName !=
elevation: 0, null
shape: Border( ? Color(0xffFFFF00)
right: BorderSide( : Colors.white,
color: Colors.grey.shade300, elevation: 0,
width: 1, shape: Border(
), right: BorderSide(
left: BorderSide( color: Colors.grey.shade300,
color: Colors.grey.shade300, width: 1,
width: 1, ),
), left: BorderSide(
bottom: BorderSide( color: Colors.grey.shade300,
color: Colors.grey.shade300, width: 1,
width: 1, ),
), bottom: BorderSide(
top: BorderSide( color: Colors.grey.shade300,
color: Colors.grey.shade300, width: 1,
width: 1, ),
), top: BorderSide(
), color: Colors.grey.shade300,
margin: EdgeInsets.symmetric( width: 1,
horizontal: 8, ),
vertical: 4,
),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(110.0),
), ),
color: Colors.white, margin: EdgeInsets.symmetric(
), horizontal: 8,
padding: vertical: 4,
EdgeInsets.symmetric(horizontal: 0), ),
width: child: Container(
MediaQuery.of(context).size.width / 3, decoration: BoxDecoration(
child: Column( borderRadius: BorderRadius.only(
crossAxisAlignment: topLeft: Radius.circular(110.0),
CrossAxisAlignment.start, ),
children: [ color: Colors.white,
Stack( ),
padding:
EdgeInsets.symmetric(horizontal: 0),
width:
MediaQuery.of(context).size.width /
3,
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [ children: [
Container( Stack(
margin: EdgeInsets.fromLTRB( children: [
0, 16, 0, 0), Container(
alignment: Alignment.center, margin: EdgeInsets.fromLTRB(
child: Image.network( 0, 16, 0, 0),
model.searchList[index].images alignment: Alignment.center,
.isNotEmpty child: Image.network(
? model.searchList[index] model.searchList[index]
.images[0].thumb .images.isNotEmpty
: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png', ? model
fit: BoxFit.cover, .searchList[index]
height: 80, .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,
),
),
Container(
width: model.searchList[index]
.rxMessage !=
null
? MediaQuery.of(context)
.size
.width /
5
: 0,
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft:
Radius.circular(
6)),
),
child: Texts(
model.searchList[index]
.rxMessage !=
null
? model
.searchList[index]
.rxMessage
: "",
color: Colors.white,
regular: true,
fontSize: 10,
fontWeight: FontWeight.w400,
),
),
],
), ),
Container( Container(
width: model.searchList[index] margin: EdgeInsets.symmetric(
.rxMessage != horizontal: 6,
null vertical: 0,
? MediaQuery.of(context)
.size
.width /
5
: 0,
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
borderRadius: BorderRadius.only(
topLeft:
Radius.circular(6)),
), ),
child: Texts( child: Column(
model.searchList[index] crossAxisAlignment:
.rxMessage != CrossAxisAlignment.start,
null
? model.searchList[index]
.rxMessage
: "",
color: Colors.white,
regular: true,
fontSize: 10,
fontWeight: FontWeight.w400,
),
),
],
),
Container(
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Texts(
model.searchList[index].name,
regular: true,
fontSize: 12,
fontWeight: FontWeight.w400,
),
Padding(
padding: const EdgeInsets.only(
top: 4, bottom: 4),
child: Texts(
"SAR ${model.searchList[index].price}",
bold: true,
fontSize: 14,
),
),
Row(
children: [ children: [
StarRating(
totalAverage: model
.searchList[
index]
.approvedRatingSum >
0
? (model
.searchList[
index]
.approvedRatingSum
.toDouble() /
model
.searchList[
index]
.approvedRatingSum
.toDouble())
.toDouble()
: 0,
forceStars: true),
Texts( Texts(
"(${model.searchList[index].approvedTotalReviews})", model
.searchList[index].name,
regular: true, regular: true,
fontSize: 10, fontSize: 12,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
) ),
Padding(
padding:
const EdgeInsets.only(
top: 4, bottom: 4),
child: Texts(
"SAR ${model.searchList[index].price}",
bold: true,
fontSize: 14,
),
),
Row(
children: [
StarRating(
totalAverage: model
.searchList[
index]
.approvedRatingSum >
0
? (model
.searchList[
index]
.approvedRatingSum
.toDouble() /
model
.searchList[
index]
.approvedRatingSum
.toDouble())
.toDouble()
: 0,
forceStars: true),
Texts(
"(${model.searchList[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
)
],
),
], ],
), ),
], ),
), ],
), ),
], ),
), ),
), onTap: () => {
); Navigator.push(
}, context,
FadePage(
page: ProductDetailPage(
model.searchList[index]),
)),
},
);
},
),
), ),
) )
: Texts(msg), : Texts(msg),

@ -1,10 +1,12 @@
import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.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/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/StarRating.dart'; import 'package:diplomaticquarterapp/widgets/others/StarRating.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_pharmacy_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_pharmacy_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/network_base_view.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:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -607,168 +609,189 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return NetworkBaseView( return NetworkBaseView(
baseViewModel: model, baseViewModel: model,
child: Card( child: InkWell(
color: model.subProducts[index] child: Card(
.discountName != color: model.subProducts[index]
null .discountName !=
? Color(0xffFFFF00) null
: Colors.white, ? Color(0xffFFFF00)
elevation: 0, : Colors.white,
shape: Border( elevation: 0,
right: BorderSide( shape: Border(
color: Colors.grey.shade300, right: BorderSide(
width: 1, color: Colors.grey.shade300,
), width: 1,
left: BorderSide( ),
color: Colors.grey.shade300, left: BorderSide(
width: 1, color: Colors.grey.shade300,
), width: 1,
bottom: BorderSide( ),
color: Colors.grey.shade300, bottom: BorderSide(
width: 1, color: Colors.grey.shade300,
width: 1,
),
top: BorderSide(
color: Colors.grey.shade300,
width: 1,
),
), ),
top: BorderSide( margin: EdgeInsets.symmetric(
color: Colors.grey.shade300, horizontal: 8,
width: 1, vertical: 4,
), ),
), child: Container(
margin: EdgeInsets.symmetric( decoration: BoxDecoration(
horizontal: 8, borderRadius: BorderRadius.only(
vertical: 4, topLeft: Radius.circular(110.0),
), ),
child: Container( color: Colors.white,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(110.0),
), ),
color: Colors.white, padding: EdgeInsets.symmetric(
), horizontal: 0),
padding: EdgeInsets.symmetric( width: MediaQuery.of(context)
horizontal: 0), .size
width: MediaQuery.of(context) .width /
.size 3,
.width / child: Column(
3, crossAxisAlignment:
child: Column( CrossAxisAlignment.start,
crossAxisAlignment: children: [
CrossAxisAlignment.start, Stack(
children: [ children: [
Stack( Container(
children: [ margin:
Container( EdgeInsets.fromLTRB(
margin: EdgeInsets.fromLTRB( 0, 16, 0, 0),
0, 16, 0, 0), alignment:
alignment: Alignment.center, Alignment.center,
child: Image.network( child: Image.network(
model.subProducts[index] model
.images.isNotEmpty
? model
.subProducts[
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,
),
),
Container(
width: model
.subProducts[ .subProducts[
index] index]
.rxMessage != .images
null .isNotEmpty
? MediaQuery.of(context) ? model
.size .subProducts[
.width / index]
5 .images[0]
: 0, .thumb
padding: EdgeInsets.all(4), : 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png',
decoration: BoxDecoration( fit: BoxFit.cover,
color: Color(0xffb23838), height: 80,
borderRadius: ),
BorderRadius.only(
topLeft: Radius
.circular(6)),
), ),
child: Texts( Container(
model.subProducts[index] width: model
.subProducts[
index]
.rxMessage != .rxMessage !=
null null
? model ? MediaQuery.of(
.subProducts[ context)
index] .size
.rxMessage .width /
: "", 5
color: Colors.white, : 0,
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
),
),
],
),
Container(
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Texts(
model.subProducts[index]
.name,
regular: true,
fontSize: 12,
fontWeight:
FontWeight.w400,
),
Padding(
padding: padding:
const EdgeInsets.only( EdgeInsets.all(4),
top: 4, decoration: BoxDecoration(
bottom: 4), color:
Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(
6)),
),
child: Texts( child: Texts(
"SAR ${model.subProducts[index].price}", model.subProducts[index]
bold: true, .rxMessage !=
fontSize: 14, null
? model
.subProducts[
index]
.rxMessage
: "",
color: Colors.white,
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
), ),
), ),
Row(
children: [
StarRating(
totalAverage: model
.subProducts[
index]
.approvedRatingSum >
0
? (model.subProducts[index].approvedRatingSum
.toDouble() /
model
.subProducts[index]
.approvedRatingSum
.toDouble())
.toDouble()
: 0,
forceStars: true),
Texts(
"(${model.subProducts[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
)
],
),
], ],
), ),
), Container(
], margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Texts(
model.subProducts[index]
.name,
regular: true,
fontSize: 12,
fontWeight:
FontWeight.w400,
),
Padding(
padding:
const EdgeInsets
.only(
top: 4,
bottom: 4),
child: Texts(
"SAR ${model.subProducts[index].price}",
bold: true,
fontSize: 14,
),
),
Row(
children: [
StarRating(
totalAverage: model
.subProducts[
index]
.approvedRatingSum >
0
? (model.subProducts[index].approvedRatingSum
.toDouble() /
model
.subProducts[index]
.approvedRatingSum
.toDouble())
.toDouble()
: 0,
forceStars: true),
Texts(
"(${model.subProducts[index].approvedTotalReviews})",
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
)
],
),
],
),
),
],
),
), ),
), ),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.subProducts[index]),
)),
},
)); ));
}, },
), ),
@ -780,158 +803,184 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
itemCount: model.subProducts.length, itemCount: model.subProducts.length,
itemBuilder: itemBuilder:
(BuildContext context, int index) { (BuildContext context, int index) {
return Card( return InkWell(
child: Row( child: Card(
children: [ child: Row(
Stack( children: [
children: [ Stack(
Column( children: [
children: [ Column(
Container( children: [
decoration: BoxDecoration(), Container(
child: Padding( decoration:
padding: EdgeInsets.only( BoxDecoration(),
left: 9.0, child: Padding(
top: 8.0, padding:
right: 10.0, EdgeInsets.only(
left: 9.0,
top: 8.0,
right: 10.0,
),
), ),
), ),
), Container(
Container( margin:
margin: EdgeInsets.fromLTRB( EdgeInsets.fromLTRB(
0, 0, 0, 0), 0, 0, 0, 0),
alignment: Alignment.center, alignment:
child: Image.network( Alignment.center,
model.subProducts[index] child: Image.network(
.images.isNotEmpty model
? model .subProducts[
.subProducts[ index]
index] .images
.images[0] .isNotEmpty
.thumb ? model
: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png', .subProducts[
fit: BoxFit.contain, index]
height: 80, .images[0]
.thumb
: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png',
fit: BoxFit.contain,
height: 80,
),
), ),
), ],
], ),
Column(
children: [
Container(
width: model
.subProducts[
index]
.rxMessage !=
null
? MediaQuery.of(
context)
.size
.width /
5
: 0,
padding:
EdgeInsets.all(4),
decoration: BoxDecoration(
color:
Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(
6)),
),
child: Texts(
model.subProducts[index]
.rxMessage !=
null
? model
.subProducts[
index]
.rxMessage
: "",
color: Colors.white,
regular: true,
fontSize: 10,
fontWeight:
FontWeight.w400,
),
),
],
),
],
),
Container(
height: 100.0,
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
), ),
Column( child: Column(
mainAxisAlignment:
MainAxisAlignment
.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [ children: [
SizedBox(
height: 4.0,
),
Container( Container(
width: model width:
.subProducts[ MediaQuery.of(context)
index]
.rxMessage !=
null
? MediaQuery.of(context)
.size .size
.width / .width *
5 0.65,
: 0,
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
color: Color(0xffb23838),
borderRadius:
BorderRadius.only(
topLeft: Radius
.circular(6)),
),
child: Texts( child: Texts(
model.subProducts[index] model.subProducts[index]
.rxMessage != .name,
null
? model
.subProducts[
index]
.rxMessage
: "",
color: Colors.white,
regular: true, regular: true,
fontSize: 10, fontSize: 13.2,
fontWeight: fontWeight:
FontWeight.w400, FontWeight.w500,
maxLines: 5,
), ),
), ),
], SizedBox(
), height: 8.0,
],
),
Container(
height: 100.0,
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 0,
),
child: Column(
mainAxisAlignment:
MainAxisAlignment.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
SizedBox(
height: 4.0,
),
Container(
height: 35.0,
width: 250.0,
child: Texts(
model.subProducts[index]
.name,
regular: true,
fontSize: 13.2,
fontWeight: FontWeight.w500,
maxLines: 2,
), ),
), Padding(
SizedBox( padding:
height: 8.0, const EdgeInsets.only(
), top: 4, bottom: 4),
Padding( child: Texts(
padding: "SAR ${model.subProducts[index].price}",
const EdgeInsets.only( bold: true,
top: 4, bottom: 4), fontSize: 14,
child: Texts( ),
"SAR ${model.subProducts[index].price}",
bold: true,
fontSize: 14,
), ),
), Row(
Row( children: [
children: [ StarRating(
StarRating( totalAverage: model
totalAverage: model .subProducts[
.subProducts[ index]
index] .approvedRatingSum >
.approvedRatingSum > 0
0 ? (model
? (model .subProducts[
.subProducts[ index]
index] .approvedRatingSum
.approvedRatingSum .toDouble() /
.toDouble() / model
model .parentProducts[
.parentProducts[ index]
index] .approvedRatingSum
.approvedRatingSum .toDouble())
.toDouble()) .toDouble()
.toDouble() : 0,
: 0, forceStars: true),
forceStars: true), Texts(
Texts( "(${model.subProducts[index].approvedTotalReviews})",
"(${model.subProducts[index].approvedTotalReviews})", regular: true,
regular: true, fontSize: 10,
fontSize: 10, fontWeight:
fontWeight: FontWeight.w400,
FontWeight.w400, )
) ],
], ),
), ],
], ),
), ),
), ],
], ),
), ),
onTap: () => {
Navigator.push(
context,
FadePage(
page: ProductDetailPage(
model.subProducts[index]),
)),
},
); );
}), }),
) )

Loading…
Cancel
Save