add a display is no reviews

This commit is contained in:
2025-07-22 10:40:23 +02:00
parent 3b73e324b4
commit ddef2fcf8e

View File

@@ -1,15 +1,17 @@
import 'package:custom_rating_bar/custom_rating_bar.dart'; import 'package:custom_rating_bar/custom_rating_bar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_review_business_window.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart';
class MihBusinessReviews extends StatefulWidget { class MihBusinessReviews extends StatefulWidget {
final String businessId; final Business business;
const MihBusinessReviews({ const MihBusinessReviews({
super.key, super.key,
required this.businessId, required this.business,
}); });
@override @override
@@ -27,11 +29,27 @@ class _MihBusinessReviewsState extends State<MihBusinessReviews> {
// ); // );
// } // }
void onReviewTap(BusinessReview? businessReview, double width) {
// showDialog(context: context, builder: (context)=> )
showDialog(
context: context,
builder: (context) {
return MihReviewBusinessWindow(
business: widget.business,
businessReview: businessReview,
screenWidth: width,
readOnly: true,
);
},
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
double screenWidth = MediaQuery.of(context).size.width;
return FutureBuilder( return FutureBuilder(
future: MihMzansiDirectoryServices().getAllReviewsofBusiness( future: MihMzansiDirectoryServices().getAllReviewsofBusiness(
widget.businessId, widget.business.business_id,
), ),
builder: (context, asyncSnapshot) { builder: (context, asyncSnapshot) {
if (asyncSnapshot.connectionState == ConnectionState.waiting) { if (asyncSnapshot.connectionState == ConnectionState.waiting) {
@@ -39,57 +57,97 @@ class _MihBusinessReviewsState extends State<MihBusinessReviews> {
} else if (asyncSnapshot.connectionState == ConnectionState.done && } else if (asyncSnapshot.connectionState == ConnectionState.done &&
asyncSnapshot.hasData) { asyncSnapshot.hasData) {
List<BusinessReview> reviews = asyncSnapshot.data!; List<BusinessReview> reviews = asyncSnapshot.data!;
return ListView.separated( if (reviews.isEmpty) {
itemCount: reviews.length, return Column(
separatorBuilder: (context, index) => Divider(), children: [
itemBuilder: (context, index) { const SizedBox(height: 50),
return ListTile( Icon(
title: RatingBar.readOnly( Icons.star_rate_rounded,
size: 25, size: 150,
alignment: Alignment.centerLeft, color:
filledIcon: Icons.star,
emptyIcon: Icons.star_border,
halfFilledIcon: Icons.star_half,
filledColor:
MzansiInnovationHub.of(context)!.theme.secondaryColor(), MzansiInnovationHub.of(context)!.theme.secondaryColor(),
emptyColor:
MzansiInnovationHub.of(context)!.theme.secondaryColor(),
halfFilledColor:
MzansiInnovationHub.of(context)!.theme.secondaryColor(),
isHalfAllowed: true,
initialRating: double.parse(reviews[index].rating_score),
maxRating: 5,
), ),
subtitle: Column( Text(
mainAxisAlignment: MainAxisAlignment.start, "No reviews yet, be the first the review\n${widget.business.Name}",
children: [ textAlign: TextAlign.center,
Row( style: TextStyle(
children: [ fontSize: 18,
Text( fontWeight: FontWeight.bold,
reviews[index].rating_title, ),
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
],
),
Row(
children: [
Text(
reviews[index].rating_description,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.normal,
),
),
],
),
],
), ),
); ],
}, );
); } else {
int descriptionDisplayCOunt = 75;
return ListView.separated(
itemCount: reviews.length,
separatorBuilder: (context, index) => Divider(),
itemBuilder: (context, index) {
return ListTile(
onTap: () {
onReviewTap(reviews[index], screenWidth);
},
title: RatingBar.readOnly(
size: 25,
alignment: Alignment.centerLeft,
filledIcon: Icons.star,
emptyIcon: Icons.star_border,
halfFilledIcon: Icons.star_half,
filledColor: const Color(0xffe9e8a1),
// MzansiInnovationHub.of(context)!.theme.primaryColor(),
emptyColor: MzansiInnovationHub.of(context)!
.theme
.secondaryColor(),
halfFilledColor: const Color(0xffe9e8a1),
// MzansiInnovationHub.of(context)!.theme.primaryColor(),
// filledColor:
// MzansiInnovationHub.of(context)!.theme.secondaryColor(),
// emptyColor:
// MzansiInnovationHub.of(context)!.theme.secondaryColor(),
// halfFilledColor:
// MzansiInnovationHub.of(context)!.theme.secondaryColor(),
isHalfAllowed: true,
initialRating: double.parse(reviews[index].rating_score),
maxRating: 5,
),
subtitle: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
Text(
reviews[index].rating_title,
softWrap: true,
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
Text(
"${reviews[index].rating_description.substring(0, reviews[index].rating_description.length >= descriptionDisplayCOunt ? descriptionDisplayCOunt : reviews[index].rating_description.length - 1)}${reviews[index].rating_description.length >= descriptionDisplayCOunt ? "..." : ""}",
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.normal,
),
),
Row(
children: [
Text(
reviews[index].date_time.split("T")[0],
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.normal,
),
),
],
),
],
),
);
},
);
}
} else { } else {
return Center(child: Text('Error')); return Center(child: Text('Error'));
} }