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 with SingleTickerProviderStateMixin { List 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( 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: [ 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: [ 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: [ // 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: [ // 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: [ 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: [ // 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); } }