You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
diplomatic-quarter/lib/pages/pharmacies/screens/recommended-product-page.dart

998 lines
57 KiB
Dart

import 'package:diplomaticquarterapp/core/model/pharmacies/recommendedProduct_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:rating_bar/rating_bar.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
dynamic languageID;
bool isInWishlist = false;
int price = 0;
var itemID;
var product;
var customerId;
class RecommendedProductPage extends StatefulWidget {
String productId ;
RecommendedProductPage({this.productId});
@override
_RecommendedProductPageState createState() => _RecommendedProductPageState(productId: productId);
}
class _RecommendedProductPageState extends State<RecommendedProductPage>
with SingleTickerProviderStateMixin {
List<RecommendedProductModel> recommendedProductList = [];
String productId;
_RecommendedProductPageState({this.productId});
String id = "";
bool styleOne = true;
bool styleTwo = false;
Icon styleIcon = Icon(
Icons.widgets_sharp,
color: Colors.blue,
size: 29.0,
);
getLanguageID() async {
languageID = await sharedPref.getString(APP_LANGUAGE);
}
// String productId = "4561";
// String productId = "";
@override
void initState() {
checkWishlist();
userInfo(id, product);
print("-------------this--------------");
print(itemID);
}
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
final double itemHeight = ((size.height - kToolbarHeight - 24) * 0.80) / 2;
final double itemWidth = size.width / 2;
return BaseView<PharmacyModuleViewModel>(
onModelReady: (model) => model.getRecommendedProducts(productId),
builder: (_, model, wi) => AppScaffold(
appBarTitle: TranslationBase.of(context).recommended,
baseViewModel: model,
isShowAppBar: true,
isPharmacy: true,
backgroundColor: Colors.white,
body: SingleChildScrollView(
child: Column(children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.only(
top: 8,
bottom: 10,
left: 10,
),
child: Text(
model.recommendedProductList.length.toString(),
style: TextStyle(
color: Colors.black,
fontSize: 14.0,
),
),
),
Container(
padding: EdgeInsets.only(top: 8, bottom: 10, left: 8),
child: Text(
TranslationBase.of(context).result,
style: TextStyle(
color: Colors.black,
fontSize: 14.0,
),
),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: SizedBox(
child: Container(
width: 1,
color: Colors.grey,
),
),
),
Container(
child: Image.asset(
'assets/images/pharmacy/sort.png',
width: 20,
height: 20,
// color: Colors.red,
),
),
Container(
child: Text(
TranslationBase.of(context).sort,
style: TextStyle(
color: Colors.black,
fontSize: 14.0,
),
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: SizedBox(
child: Container(
width: 1,
color: Colors.grey,
),
),
),
Divider(
thickness: 1.0,
color: Colors.black12,
),
Padding(
padding: EdgeInsets.all(8.0),
child: InkWell(
child: styleIcon,
onTap: () {
setState(() {
if (styleOne == true) {
styleOne = false;
styleTwo = true;
styleIcon = Icon(
Icons.auto_awesome_mosaic,
color: Colors.blue,
size: 29.0,
);
} else {
styleOne = true;
styleTwo = false;
styleIcon = Icon(
Icons.widgets_sharp,
color: Colors.blue,
size: 29.0,
);
}
});
},
),
),
],
),
]),
SizedBox(
height: 2,
),
Divider(
color: Colors.grey[350],
height: 10,
thickness: 6,
indent: 0,
endIndent: 0,
),
styleOne == true
? Container(
margin: EdgeInsets.all(5.0),
child: model.recommendedProductList.length != null
? CustomScrollView(
primary: false,
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
slivers: <Widget>[
SliverPadding(
padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
sliver: SliverGrid.count(
crossAxisCount: 2,
childAspectRatio: (itemWidth / itemHeight),
children: model.recommendedProductList
.map((e) => Card(
elevation: 2,
shape: RoundedRectangleBorder(
side: BorderSide(
color: Colors.grey[300],
width: 2),
borderRadius:
BorderRadius.circular(
10)),
margin: EdgeInsets.symmetric(
horizontal: 8,
vertical: 11,
),
child: Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.all(
Radius.circular(15),
),
),
padding: EdgeInsets.symmetric(
horizontal: 4),
width: MediaQuery.of(context)
.size.width / 3,
//
child: Column(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Stack(children: [
Container(
child: Align(
alignment:
Alignment
.topRight,
child:
itemID.contains(e.id)
// !isInWishlist
? IconButton(
icon:
Icon(Icons.favorite_border),
color:
Colors.grey,
iconSize:
30,
onPressed:
() {
setState(() {
addToWishlistFunction(itemID);
});
},
)
:
IconButton(
icon:
Icon(Icons.favorite),
color:
Colors.red,
iconSize:
30,
onPressed:
() {
setState(() {
deleteFromWishlistFunction(itemID);
});
},
)
//
),
),
Container(
margin: EdgeInsets
.fromLTRB(0, 16,
10, 16),
alignment:
Alignment.center,
// padding: EdgeInsets.only(left: 25, bottom: 20),
child: (e.images !=
null &&
e.images.length >
0)
? Image.network(
e.images[0]
.src
.toString(),
// item.images[0].src,
fit: BoxFit
.cover,
height: 60,
)
: Image.asset(
"assets/images/no_image.png",
fit: BoxFit
.cover,
height: 60,
),
),
Container(
width: e.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(
e.rxMessage != null
? e.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: [
Text(
languageID == "ar"
? e.namen
: e.name,
style: TextStyle(
color: Colors
.black,
fontSize: 13.0,
// fontWeight: FontWeight.bold,
),
),
Padding(
// padding: const EdgeInsets.only(top: 15, bottom: 10),
padding:
const EdgeInsets
.only(
top: 10,
bottom:
5),
child: Texts(
"SAR ${e.price}",
bold: true,
fontSize: 14,
),
),
],
),
),
Row(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: <Widget>[
Container(
padding: EdgeInsets
.only(
right:
10),
// margin: EdgeInsets.only(left: 5),
child: Align(
alignment:
Alignment
.topLeft,
child: RatingBar
.readOnly(
initialRating: e
.approvedRatingSum
.toDouble(),
// initialRating: productRate,
size: 13.0,
filledColor:
Colors.yellow[
700],
emptyColor:
Colors.grey[
500],
isHalfAllowed:
true,
halfFilledIcon:
Icons
.star_half,
filledIcon:
Icons
.star,
emptyIcon:
Icons
.star,
),
),
),
Texts(
"(${e.approvedTotalReviews.toString()})",
// bold: true,
fontSize: 12,
),
]),
],
),
),
)
// Column(
// crossAxisAlignment:
// CrossAxisAlignment.start,
// children: [
// Container(
// child: Align(
// alignment: Alignment.topRight,
// child: !isInWishlist
// ? IconButton(
// icon: Icon(Icons.favorite_border),
// color: Colors.grey,
// iconSize: 30,
// onPressed: () {
// setState(() {
// addToWishlistFunction(itemID);
// });
// },
// )
// : IconButton(
// icon: Icon(Icons.favorite),
// color: Colors.red,
// iconSize: 30,
// onPressed: () {
// setState(() {
// deleteFromWishlistFunction(itemID);
// });
// },
// )
////
// ),),
// Container(
// padding: EdgeInsets.only(
// left: 25, bottom: 20),
//// margin: EdgeInsets.fromLTRB(0, 16, 0, 0),
//// alignment: Alignment.centerLeft,
// child: (e.images != null &&
// e.images.length > 0)
// ? Image.network(
// e.images[0].src
// .toString(),
//// item.images[0].src,
// fit: BoxFit.cover,
// height: 80,
// )
// : Image.asset(
// "assets/images/no_image.png",
// fit: BoxFit.cover,
// height: 80,
// ),
// ),
// Text(
// e.name,
//// model.recommendedProduct[0].products[index].shortDescription
//// .toString(),
// style: TextStyle(
// color: Colors.black,
// fontSize: 15.0,
//// fontWeight: FontWeight.bold,
// ),
// ),
// Padding(
// padding: const EdgeInsets.only(
// top: 15, bottom: 10),
// child: Texts(
// "SAR ${e.price}",
// bold: true,
// fontSize: 14,
// ),
// ),
// Row(
// crossAxisAlignment:
// CrossAxisAlignment.start,
// children: <Widget>[
// Container(
// padding: EdgeInsets.only(
// right: 10),
//// margin: EdgeInsets.only(left: 5),
// child: Align(
// alignment:
// Alignment.topLeft,
// child: RatingBar.readOnly(
// initialRating: e
// .approvedRatingSum
// .toDouble(),
//// initialRating: productRate,
// size: 15.0,
// filledColor:
// Colors.yellow[700],
// emptyColor:
// Colors.grey[500],
// isHalfAllowed: true,
// halfFilledIcon:
// Icons.star_half,
// filledIcon: Icons.star,
// emptyIcon: Icons.star,
// ),
// ),
// ),
// Texts(
// "(${e.approvedTotalReviews.toString()})",
//// bold: true,
// fontSize: 12,
// ),
// ]),
// ],
// ),
)
.toList(),
// children:[
// ListView.builder(
// scrollDirection: Axis.vertical,
// shrinkWrap: true,
// physics: ScrollPhysics(),
// itemCount: model.recommendedProductList.length,
// itemBuilder: (context, index) {
// return Container(
// height: 30,
// padding: EdgeInsets.only( left: 15.0, top: 10, right: 10),
// margin: EdgeInsets.only(right: 10.0),
// decoration: BoxDecoration(
// border: Border.all(
// color: Colors.grey,
// style: BorderStyle.solid,
// width: 1.0,
// ),
// color: Colors.white,
// borderRadius: BorderRadius.circular(10.0)),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Container(
// child: Align(
// alignment: Alignment.topRight,
// child:!isInWishlist
// ? InkWell(
// onTap: () {
// },
// child: SvgPicture.asset(
// 'assets/images/pharmacy/heart-empty.svg',
// width: 20,
// height: 20,
// color: Colors.grey,
// ),
// )
// : InkWell(
// onTap: () {
// },
// child: SvgPicture.asset(
// 'assets/images/pharmacy/Redheart.svg',
// width: 20,
// height: 20,
//// color: Colors.red,
// ),
// )
// ),
// ),
// Container(
// padding: EdgeInsets.only(left: 25, bottom: 20),
//// margin: EdgeInsets.fromLTRB(0, 16, 0, 0),
//// alignment: Alignment.centerLeft,
// child: (model.recommendedProductList[index].images != null &&
// model.recommendedProductList[index].images.length > 0)
// ? Image.network(
// model.recommendedProductList[index].images[0].src.toString(),
//// item.images[0].src,
// fit: BoxFit.cover,
// height: 80,
// )
// : Image.asset(
// "assets/images/no_image.png",
// fit: BoxFit.cover,
// height: 80,
// ),
// ),
// Text(
// model.recommendedProductList[index].name,
//// model.recommendedProduct[0].products[index].shortDescription
//// .toString(),
// style: TextStyle(
// color: Colors.black,
// fontSize: 15.0,
//// fontWeight: FontWeight.bold,
// ),
// ),
// Padding(
// padding: const EdgeInsets.only(top: 15, bottom: 10),
// child: Texts(
// "SAR ${model.recommendedProductList[index].price}",
// bold: true,
// fontSize: 14,
// ),
// ),
// Row(
// crossAxisAlignment:
// CrossAxisAlignment.start,
// children: <Widget>[
// Container(
// padding: EdgeInsets.only(right: 10),
//// margin: EdgeInsets.only(left: 5),
// child: Align(
// alignment: Alignment.topLeft,
// child: RatingBar.readOnly(
// initialRating:
// model.recommendedProductList[index].approvedRatingSum.toDouble(),
//// initialRating: productRate,
// size: 15.0,
// filledColor: Colors.yellow[700],
// emptyColor: Colors.grey[500],
// isHalfAllowed: true,
// halfFilledIcon: Icons.star_half,
// filledIcon: Icons.star,
// emptyIcon: Icons.star,
// ),
// ),
// ),
// Texts(
// "(${model.recommendedProductList[index].approvedTotalReviews.toString()})",
//// bold: true,
// fontSize: 12,
// ),
// ]),
// ],
// ),
// );
// }
// ),
// ]
),
),
])
: Container(),
)
: Container(
height: model.recommendedProductList.length > 0
? MediaQuery.of(context).size.height * 0.60
: 0,
child: ListView.builder(
physics: ScrollPhysics(),
// physics: NeverScrollableScrollPhysics(),
itemCount: model.recommendedProductList.length,
itemBuilder: (context, index) {
return Card(
elevation: 2,
shape: RoundedRectangleBorder(
side:
BorderSide(color: Colors.grey[300], width: 2),
borderRadius: BorderRadius.circular(10)),
//
margin: EdgeInsets.symmetric(
horizontal: 8,
vertical: 4,
),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(15),
),
),
padding: EdgeInsets.symmetric(horizontal: 5),
width: MediaQuery.of(context).size.width / 3,
//
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Stack(children: [
Container(
child: Align(
alignment: Alignment.topRight,
child: //true
//wishlistVar[index].id.contains(model.recommendedProductList[index].id)
!isInWishlist
? IconButton(
icon: Icon(
Icons.favorite_border),
color: Colors.grey,
iconSize: 30,
onPressed: () {
setState(() {
addToWishlistFunction(
itemID);
});
},
)
: IconButton(
icon: Icon(Icons.favorite),
color: Colors.red,
iconSize: 30,
onPressed: () {
setState(() {
deleteFromWishlistFunction(
itemID);
});
},
)
//
),
),
Container(
margin: EdgeInsets.fromLTRB(0, 16, 10, 16),
alignment: Alignment.center,
// padding: EdgeInsets.only(left: 25, bottom: 20),
child: (model.recommendedProductList[index]
.images !=
null &&
model.recommendedProductList[index]
.images.length >
0)
? Image.network(
model.recommendedProductList[index]
.images[0].src
.toString(),
// item.images[0].src,
fit: BoxFit.cover,
height: 60,
)
: Image.asset(
"assets/images/no_image.png",
fit: BoxFit.cover,
height: 60,
),
),
Container(
width: model.recommendedProductList[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.recommendedProductList[index]
.rxMessage !=
null
? model.recommendedProductList[index]
.rxMessage
: "",
color: Colors.white,
regular: true,
fontSize: 10,
fontWeight: FontWeight.w400,
),
),
]),
Container(
margin: EdgeInsets.symmetric(
horizontal: 6,
vertical: 2,
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
model
.recommendedProductList[index].name,
style: TextStyle(
color: Colors.black,
fontSize: 13.0,
// fontWeight: FontWeight.bold,
),
),
Padding(
// padding: const EdgeInsets.only(top: 15, bottom: 10),
padding: const EdgeInsets.only(
top: 10, bottom: 5),
child: Texts(
"SAR ${model.recommendedProductList[index].price}",
bold: true,
fontSize: 14,
),
),
],
),
),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Container(
padding: EdgeInsets.only(
right: 10, bottom: 10),
// margin: EdgeInsets.only(left: 5),
child: Align(
alignment: Alignment.topLeft,
child: RatingBar.readOnly(
initialRating: model
.recommendedProductList[index]
.approvedRatingSum
.toDouble(),
// initialRating: productRate,
size: 13.0,
filledColor: Colors.yellow[700],
emptyColor: Colors.grey[500],
isHalfAllowed: true,
halfFilledIcon: Icons.star_half,
filledIcon: Icons.star,
emptyIcon: Icons.star,
),
),
),
Texts(
"(${model.recommendedProductList[index].approvedTotalReviews.toString()})",
// bold: true,
fontSize: 12,
),
]),
],
),
),
);
// Container(
// height: 30,
// padding: EdgeInsets.only( left: 10.0, top: 10, right: 10),
//// margin: EdgeInsets.only(right: 10.0),
// decoration: BoxDecoration(
// border: Border.all(
// color: Colors.grey,
// style: BorderStyle.solid,
// width: 1.0,
// ),
// color: Colors.white,
// borderRadius: BorderRadius.circular(10.0)),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Container(
// child: Align(
// alignment: Alignment.topRight,
// child:!isInWishlist
// ? InkWell(
// onTap: () {
// },
// child: SvgPicture.asset(
// 'assets/images/pharmacy/heart-empty.svg',
// width: 20,
// height: 20,
// color: Colors.grey,
// ),
// )
// : InkWell(
// onTap: () {
// },
// child: SvgPicture.asset(
// 'assets/images/pharmacy/Redheart.svg',
// width: 20,
// height: 20,
//// color: Colors.red,
// ),
// )
// ),
// ),
// Container(
// padding: EdgeInsets.only(left: 25, bottom: 20),
//// margin: EdgeInsets.fromLTRB(0, 16, 0, 0),
//// alignment: Alignment.centerLeft,
// child: (model.recommendedProductList[index].images != null &&
// model.recommendedProductList[index].images.length > 0)
// ? Image.network(
// model.recommendedProductList[index].images[0].src.toString(),
//// item.images[0].src,
// fit: BoxFit.cover,
// height: 80,
// )
// : Image.asset(
// "assets/images/no_image.png",
// fit: BoxFit.cover,
// height: 80,
// ),
// ),
// Text(
// model.recommendedProductList[index].name,
//// model.recommendedProduct[0].products[index].shortDescription
//// .toString(),
// style: TextStyle(
// color: Colors.black,
// fontSize: 15.0,
//// fontWeight: FontWeight.bold,
// ),
// ),
// Padding(
// padding: const EdgeInsets.only(top: 15, bottom: 10),
// child: Texts(
// "SAR ${model.recommendedProductList[index].price}",
// bold: true,
// fontSize: 14,
// ),
// ),
// Row(
// crossAxisAlignment:
// CrossAxisAlignment.start,
// children: <Widget>[
// Container(
// padding: EdgeInsets.only(right: 10),
//// margin: EdgeInsets.only(left: 5),
// child: Align(
// alignment: Alignment.topLeft,
// child: RatingBar.readOnly(
// initialRating:
// model.recommendedProductList[index].approvedRatingSum.toDouble(),
//// initialRating: productRate,
// size: 15.0,
// filledColor: Colors.yellow[700],
// emptyColor: Colors.grey[500],
// isHalfAllowed: true,
// halfFilledIcon: Icons.star_half,
// filledIcon: Icons.star,
// emptyIcon: Icons.star,
// ),
// ),
// ),
// Texts(
// "(${model.recommendedProductList[index].approvedTotalReviews.toString()})",
//// bold: true,
// fontSize: 12,
// ),
// ]),
// ],
// ),
// );
}),
),
]),
),
),
);
}
checkWishlist() async {
ProductDetailViewModel x = new ProductDetailViewModel();
await x.checkWishlistData();
for (int i = 0; i < x.wishListItems.length; i++) {
// itemID = x.wishListItems[i].id;
print("-------------wishlist---------------");
print(itemID);
// print(product.id);
print(x.wishListItems[i].productId);
if (itemID == x.wishListItems[i].productId) {
isInWishlist = true;
// print('in wishlist');
break;
} else {
isInWishlist = false;
// print('not in wishlist');
}
}
}
Future userInfo(id, product) async {
customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
if (customerId != null) {
itemID = id;
product = product;
checkWishlist();
}
print("customerId:$customerId");
return customerId;
}
addToWishlistFunction(itemID) async {
ProductDetailViewModel x = new ProductDetailViewModel();
isInWishlist = true;
await x.addToWishlistData(itemID);
}
deleteFromWishlistFunction(itemID) async {
ProductDetailViewModel x = new ProductDetailViewModel();
isInWishlist = false;
await x.addToWishlistData(itemID);
}
}