import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/StarRating.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_pharmacy_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'base/base_view.dart'; import 'final_products_page.dart'; class SubCategorisePage extends StatefulWidget { String id; String title; String parentId; SubCategorisePage({this.id, this.parentId, this.title}); @override _SubCategorisePageState createState() => _SubCategorisePageState(id: id, title: title, parentId: parentId); } class _SubCategorisePageState extends State { bool checkedBrands = false; bool checkedCategorise = false; String id; String title; String parentId; _SubCategorisePageState({this.title, this.parentId, this.id}); String categoriseName = "Personal Care"; bool styleOne = true; bool styleTwo = false; Icon styleIcon = Icon( Icons.widgets_sharp, color: Colors.blue, size: 29.0, ); @override Widget build(BuildContext context) { return BaseView( onModelReady: (model) => model.getSubCategorise(i: id), builder: (BuildContext context, PharmacyCategoriseViewModel model, Widget child) => PharmacyAppScaffold( appBarTitle: title, isBottomBar: false, isShowAppBar: true, backgroundColor: Colors.white, isShowDecPage: false, baseViewModel: model, body: SingleChildScrollView( child: Container( height: MediaQuery.of(context).size.height * 5.97, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( child: Image.network( parentId == '1' ? 'https://uat.hmgwebservices.com/epharmacy/content/images/thumbs/0089188_personal-care_2.png' : parentId == '2' ? 'https://uat.hmgwebservices.com/epharmacy/content/images/thumbs/0089189_skin-care_2.png' : parentId == '3' ? 'https://uat.hmgwebservices.com/epharmacy/content/images/thumbs/0089190_health-care_2.png' : parentId == '4' ? 'https://uat.hmgwebservices.com/epharmacy/content/images/thumbs/0089191_sexual-health_2.png' : parentId == '5' ? 'https://uat.hmgwebservices.com/epharmacy/content/images/thumbs/0089192_beauty_2.png' : parentId == '6' ? 'https://uat.hmgwebservices.com/epharmacy/content/images/thumbs/0089193_baby-child_2.png' : parentId == '7' ? 'https://uat.hmgwebservices.com/epharmacy/content/images/thumbs/0089194_vitamins-supplements_2.png' : parentId == '8' ? 'https://uat.hmgwebservices.com/epharmacy/content/images/thumbs/0089195_diet-nutrition_2.png' : parentId == '9' ? 'https://uat.hmgwebservices.com/epharmacy/content/images/thumbs/0089196_household_2.png' : parentId == '10' ? 'https://uat.hmgwebservices.com/epharmacy/content/images/thumbs/0089197_home-care-appliances_2.png' : '', fit: BoxFit.fill, height: 160.0, width: double.infinity), ), if (model.subCategorise.length > 8) Column( children: [ InkWell( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Padding( padding: EdgeInsets.all(10.0), child: Container( child: Texts('View All Categories'), ), ), Icon(Icons.arrow_forward) ], ), onTap: () { showModalBottomSheet( isScrollControlled: true, context: context, builder: (BuildContext context) { return Container( height: MediaQuery.of(context).size.height * 0.89, color: Colors.white, child: Center( child: ListView.builder( scrollDirection: Axis.vertical, itemCount: model.subCategorise.length, itemBuilder: (BuildContext context, int index) { return Container( child: Padding( padding: EdgeInsets.all(8.0), child: InkWell( child: Column( crossAxisAlignment: CrossAxisAlignment .start, children: [ Texts(model .subCategorise[ index] .name), Divider( thickness: 0.6, color: Colors.black12, ) ], ), onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => FinalProductsPage( id: model .subCategorise[ index] .id, ), ), ); }, ), ), ); }), ), ); }, ); }, ), Divider( thickness: 1.0, color: Colors.grey.shade400, ), ], ), //Expanded widget heree if nassery Padding( padding: EdgeInsets.only(top: 35.0), child: Container( height: MediaQuery.of(context).size.height * 0.2, child: Center( child: ListView.builder( scrollDirection: Axis.horizontal, itemCount: model.subCategorise.length, itemBuilder: (BuildContext context, int index) { return Padding( padding: EdgeInsets.symmetric(horizontal: 8.0), child: InkWell( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Padding( padding: EdgeInsets.symmetric( horizontal: 13.0), child: Container( height: 60.0, width: 65.0, decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.orange.shade200 .withOpacity(0.45), ), child: Center( child: Icon( Icons.apps_sharp, size: 32.0, ), ), ), ), Container( width: MediaQuery.of(context) .size .width * 0.17, height: MediaQuery.of(context) .size .height * 0.10, child: Center( child: Texts( model.subCategorise[index].name, fontSize: 14, fontWeight: FontWeight.w600, maxLines: 2, ), ), ), ], ), onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => FinalProductsPage( id: model.subCategorise[index].id, ), ), ); }, ), ); }), ), ), ), Divider( thickness: 1.0, color: Colors.grey.shade400, ), Padding( padding: EdgeInsets.symmetric(horizontal: 8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ InkWell( child: Row( children: [ Icon(Icons.wrap_text), SizedBox( width: 10.0, ), Texts( 'Refine', fontWeight: FontWeight.w600, ), ], ), onTap: () { showModalBottomSheet( isScrollControlled: true, context: context, builder: (BuildContext context) { return DraggableScrollableSheet( initialChildSize: 0.95, maxChildSize: 0.95, minChildSize: 0.9, builder: (BuildContext context, ScrollController scrollController) { return SingleChildScrollView( controller: scrollController, child: Container( height: MediaQuery.of(context) .size .height * 1.95, child: Column( children: [ Padding( padding: EdgeInsets.all(8.0), child: Row( children: [ Icon( Icons.wrap_text, ), SizedBox( width: 10.0, ), Texts( 'Refine', fontWeight: FontWeight.w600, ), SizedBox( width: 250.0, ), InkWell( child: Texts( 'Close', color: Colors.red, fontWeight: FontWeight.w600, fontSize: 15.0, ), onTap: () { Navigator.pop( context); }, ), ], ), ), Divider( thickness: 1.0, color: Colors.black12, ), Column( children: [ ExpansionTile( title: Texts('Categorise'), children: [ Container( height: 350, child: ListView .builder( controller: scrollController, scrollDirection: Axis .vertical, shrinkWrap: true, itemCount: model .categoriseParent .length, itemBuilder: (BuildContext context, int index) { return CheckboxListTile( tristate: true, title: Texts(model .categoriseParent[index] .name), controlAffinity: ListTileControlAffinity.leading, value: checkedCategorise, onChanged: (bool value) { setState( () { checkedCategorise = value; }); }, ); }), ) ], ), Divider( thickness: 1.0, color: Colors.black12, ), ExpansionTile( title: Texts('Brands'), children: [ Container( height: 350, child: ListView .builder( scrollDirection: Axis .vertical, shrinkWrap: true, itemCount: model .brandsList .length, itemBuilder: (BuildContext context, int index) { return CheckboxListTile( tristate: true, title: Texts(model .brandsList[index] .name), controlAffinity: ListTileControlAffinity.leading, value: checkedBrands, onChanged: (bool value) { setState( () { checkedBrands = value; }); }, autofocus: true, ); }), ) ], ), Divider( thickness: 1.0, color: Colors.black12, ), ExpansionTile( title: Texts('Price'), children: [ Container( color: Color( 0xffEEEEEE), child: Row( mainAxisAlignment: MainAxisAlignment .spaceAround, children: [ Column( mainAxisAlignment: MainAxisAlignment .start, children: [ Texts( 'Min'), Container( color: Colors .white, width: 200, height: 40, child: TextFormField( decoration: InputDecoration( border: OutlineInputBorder(), ), ), ), ], ), Column( mainAxisAlignment: MainAxisAlignment .start, children: [ Texts( 'Max'), Container( color: Colors .white, width: 200, height: 40, child: TextFormField( decoration: InputDecoration( border: OutlineInputBorder(), ), ), ), ], ), ], ), ) ], ), Divider( thickness: 1.0, color: Colors.black12, ), SizedBox( height: MediaQuery.of( context) .size .height * 0.4, ), Padding( padding: EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment .spaceEvenly, children: [ Container( width: 100, child: Button( label: 'Reset', backgroundColor: Colors.red, ), ), SizedBox( width: 30, ), Container( width: 200, child: Button( label: 'Apply', backgroundColor: Colors .green, ), ), ], ), ), ], ), ], ), ), ); }); }, ); }, ), Row( children: [ Container( height: 44.0, child: VerticalDivider( color: Colors.black45, thickness: 1.0, //width: 0.3, // indent: 0.0, ), ), 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, ); } }); }, ), ), ], ), ], ), ), Divider( thickness: 1.0, color: Colors.grey.shade400, ), styleOne == true ? Container( height: MediaQuery.of(context).size.height * 3.85, child: GridView.builder( physics: NeverScrollableScrollPhysics(), gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, crossAxisSpacing: 0.5, mainAxisSpacing: 2.0, childAspectRatio: 1.0, ), itemCount: model.subProducts.length, itemBuilder: (BuildContext context, int index) { return NetworkBaseView( baseViewModel: model, child: Card( color: model.subProducts[index] .discountName != null ? Color(0xffFFFF00) : Colors.white, elevation: 0, shape: Border( right: BorderSide( color: Colors.grey.shade300, width: 1, ), left: BorderSide( color: Colors.grey.shade300, width: 1, ), bottom: BorderSide( color: Colors.grey.shade300, width: 1, ), top: BorderSide( color: Colors.grey.shade300, width: 1, ), ), margin: EdgeInsets.symmetric( horizontal: 8, vertical: 4, ), child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.only( topLeft: Radius.circular(110.0), ), color: Colors.white, ), padding: EdgeInsets.symmetric( horizontal: 0), width: MediaQuery.of(context) .size .width / 3, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Stack( children: [ Container( margin: EdgeInsets.fromLTRB( 0, 16, 0, 0), alignment: Alignment.center, child: Image.network( model.subProducts[index] .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[ 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( 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, ) ], ), ], ), ), ], ), ), )); }, ), ) : Container( height: MediaQuery.of(context).size.height * 5.0, child: ListView.builder( physics: NeverScrollableScrollPhysics(), itemCount: model.subProducts.length, itemBuilder: (BuildContext context, int index) { return Card( child: Row( children: [ Stack( children: [ Column( children: [ Container( decoration: BoxDecoration(), child: Padding( padding: EdgeInsets.only( left: 9.0, top: 8.0, right: 10.0, ), ), ), Container( margin: EdgeInsets.fromLTRB( 0, 0, 0, 0), alignment: Alignment.center, child: Image.network( model.subProducts[index] .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.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, ), 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, ), ), SizedBox( height: 8.0, ), 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 .parentProducts[ index] .approvedRatingSum .toDouble()) .toDouble() : 0, forceStars: true), Texts( "(${model.subProducts[index].approvedTotalReviews})", regular: true, fontSize: 10, fontWeight: FontWeight.w400, ) ], ), ], ), ), ], ), ); }), ) ], ), ), ), )); } }