import 'package:mobdr/config/constant.dart'; import 'package:mobdr/config/global_style.dart'; import 'package:mobdr/model/review_model.dart'; import 'package:mobdr/ui/reusable/reusable_widget.dart'; import 'package:flutter/material.dart'; class ProductReviewPage extends StatefulWidget { @override _ProductReviewPageState createState() => _ProductReviewPageState(); } class _ProductReviewPageState extends State { // initialize reusable widget final _reusableWidget = ReusableWidget(); List starList = ['All Review', '1', '2', '3', '4', '5']; int starIndex = 0; @override void initState() { super.initState(); } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( iconTheme: IconThemeData( color: GlobalStyle.appBarIconThemeColor, ), elevation: GlobalStyle.appBarElevation, title: Text( 'Product Review', style: GlobalStyle.appBarTitle, ), backgroundColor: GlobalStyle.appBarBackgroundColor, systemOverlayStyle: GlobalStyle.appBarSystemOverlayStyle, bottom: _reusableWidget.bottomAppBar(), ), body: ListView( padding: EdgeInsets.all(16), children: [ SingleChildScrollView( scrollDirection: Axis.horizontal, child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: List.generate(starList.length, (index) { return radioStar(starList[index], index); }), ), ), SizedBox(height: 16), Container( child: ListView.builder( shrinkWrap: true, physics: ScrollPhysics(), itemCount: reviewData.length, // Add one more item for progress indicator itemBuilder: (BuildContext context, int index) { return _buildReviewCard(index); }, ), ), ], )); } Widget radioStar(String txt, int index) { return GestureDetector( onTap: () { setState(() { starIndex = index; }); }, child: Container( padding: EdgeInsets.fromLTRB(12, 8, 12, 8), margin: EdgeInsets.only(right: 10), decoration: BoxDecoration( color: starIndex == index ? SOFT_BLUE : Colors.white, border: Border.all( width: 1, color: starIndex == index ? SOFT_BLUE : Colors.grey[300]!), borderRadius: BorderRadius.all(Radius.circular(10))), child: index == 0 ? Text(txt, style: TextStyle( color: starIndex == index ? Colors.white : CHARCOAL)) : Wrap( crossAxisAlignment: WrapCrossAlignment.center, children: [ Text(txt, style: TextStyle( color: starIndex == index ? Colors.white : CHARCOAL)), SizedBox(width: 2), Icon(Icons.star, color: starIndex == index ? Colors.white : Colors.yellow[700], size: 12), ], )), ); } Widget _buildReviewCard(index) { return Card( margin: EdgeInsets.only(top: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), elevation: 2, color: Colors.white, child: Container( padding: EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(reviewData[index].date, style: TextStyle(fontSize: 13, color: SOFT_GREY)), SizedBox(height: 4), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(reviewData[index].name, style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold)), _reusableWidget.createRatingBar( rating: reviewData[index].rating, size: 12) ], ), SizedBox(height: 4), Text(reviewData[index].review) ], ), ), ); } }