From cda981c92d64d78aea485152c181263d9e1b3454 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Mon, 21 Jul 2025 11:32:42 +0200 Subject: [PATCH] move review window to its own widget --- .../components/mih_business_info_card.dart | 361 ++---------------- 1 file changed, 22 insertions(+), 339 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart index e2edf8a3..088a531e 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart @@ -1,18 +1,11 @@ import 'package:custom_rating_bar/custom_rating_bar.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.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_validation_services.dart'; import 'package:supertokens_flutter/supertokens.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -42,14 +35,6 @@ class MihBusinessCard extends StatefulWidget { } class _MihBusinessCardState extends State { - final _formKey = GlobalKey(); - final TextEditingController _reviewTitleController = TextEditingController(); - final TextEditingController _reviewScoreController = TextEditingController(); - final TextEditingController _reviewDescriptionController = - TextEditingController(); - late final VoidCallback _reviewDescriptionListener; - final ValueNotifier _counter = ValueNotifier(0); - Future _makePhoneCall(String phoneNumber) async { final Uri url = Uri(scheme: 'tel', path: phoneNumber); if (await canLaunchUrl(url)) { @@ -354,23 +339,6 @@ class _MihBusinessCardState extends State { ); } - @override - void dispose() { - super.dispose(); - _reviewDescriptionController.removeListener(_reviewDescriptionListener); - } - - @override - void initState() { - super.initState(); - _reviewDescriptionListener = () { - setState(() { - _counter.value = _reviewDescriptionController.text.characters.length; - }); - }; - _reviewDescriptionController.addListener(_reviewDescriptionListener); - } - @override Widget build(BuildContext context) { // double screenWidth = MediaQuery.of(context).size.width; @@ -525,281 +493,36 @@ class _MihBusinessCardState extends State { ); } - Color getMissionVisionLimitColor(int limit) { - if (_counter.value <= limit) { - return MzansiInnovationHub.of(context)!.theme.secondaryColor(); - } else { - return MzansiInnovationHub.of(context)!.theme.errorColor(); - } - } - Future businessReviewRatingWindow( bool previouslyRated, double width) async { showDialog( context: context, builder: (context) => FutureBuilder( - future: getUserReview(), - builder: (context, asyncSnapshot) { - if (asyncSnapshot.connectionState == ConnectionState.waiting) { - return const Mihloadingcircle( - message: "Checking for previous reviews...", - ); - } else if (asyncSnapshot.connectionState == ConnectionState.done && - asyncSnapshot.hasData) { - _reviewTitleController.text = - asyncSnapshot.requireData!.rating_title; - _reviewDescriptionController.text = - asyncSnapshot.requireData!.rating_description; - _reviewScoreController.text = - asyncSnapshot.requireData!.rating_score; - return MihPackageWindow( - fullscreen: false, - windowTitle: - asyncSnapshot.hasData ? "Edit Review" : "Add Review", - onWindowTapClose: () { - Navigator.of(context).pop(); - }, - menuOptions: asyncSnapshot.hasData - ? [ - SpeedDialChild( - child: Icon( - Icons.delete, - color: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - ), - label: "Delete Review", - labelBackgroundColor: MzansiInnovationHub.of(context)! - .theme - .successColor(), - labelStyle: TextStyle( - color: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - fontWeight: FontWeight.bold, - ), - backgroundColor: MzansiInnovationHub.of(context)! - .theme - .successColor(), - onTap: () { - // showTestWindow(); - showDeleteReviewAlert(); - }, - ), - ] - : null, - windowBody: MihSingleChildScroll( - child: Padding( - padding: - MzansiInnovationHub.of(context)!.theme.screenType == - "desktop" - ? EdgeInsets.symmetric(horizontal: width * 0.05) - : EdgeInsets.symmetric(horizontal: width * 0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - children: [ - MihForm( - formKey: _formKey, - formFields: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - "Business Rating", - textAlign: TextAlign.left, - style: TextStyle( - color: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - const SizedBox(height: 4), - RatingBar( - size: 50, - alignment: Alignment.centerLeft, - filledIcon: Icons.star, - emptyIcon: Icons.star_border, - halfFilledIcon: Icons.star_half, - filledColor: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - emptyColor: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - halfFilledColor: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - isHalfAllowed: true, - initialRating: asyncSnapshot.hasData - ? double.parse(_reviewScoreController.text) - : 1, - maxRating: 5, - onRatingChanged: (double) { - setState(() { - _reviewScoreController.text = - double.toStringAsFixed(1); - }); - print(_reviewScoreController.text); - }, - ), - const SizedBox(height: 10), - MihTextFormField( - // width: 200, - fillColor: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - inputColor: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - controller: _reviewTitleController, - multiLineInput: false, - requiredText: true, - hintText: "Review Title", - validator: (value) { - return MihValidationServices() - .isEmpty(_reviewTitleController.text); - }, - ), - const SizedBox(height: 10), - MihTextFormField( - height: 250, - fillColor: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - inputColor: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - controller: _reviewDescriptionController, - multiLineInput: true, - requiredText: false, - hintText: "Review Description", - validator: (value) { - if (_reviewDescriptionController.text.isEmpty) { - return null; - } else { - return MihValidationServices().validateLength( - _reviewDescriptionController.text, 256); - } - }, - ), - SizedBox( - height: 15, - child: ValueListenableBuilder( - valueListenable: _counter, - builder: (BuildContext context, int value, - Widget? child) { - return Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Text( - "$value", - style: TextStyle( - color: - getMissionVisionLimitColor(256), - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(width: 5), - Text( - "/256", - style: TextStyle( - color: - getMissionVisionLimitColor(256), - fontWeight: FontWeight.bold, - ), - ), - ], - ); - }, - ), - ), - const SizedBox(height: 25), - Center( - child: MihButton( - onPressed: () { - if (_formKey.currentState!.validate()) { - // submitForm(); - } else { - MihAlertServices() - .formNotFilledCompletely(context); - } - }, - buttonColor: MzansiInnovationHub.of(context)! - .theme - .successColor(), - width: 300, - child: Text( - asyncSnapshot.hasData - ? "Edit Review" - : "Add Review", - style: TextStyle( - color: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - ], - ), - ], - ), - ), - ), - ); - } else { - return MihPackageAlert( - alertColour: - MzansiInnovationHub.of(context)!.theme.errorColor(), - alertIcon: Icon( - Icons.warning_rounded, - size: 100, - color: MzansiInnovationHub.of(context)!.theme.errorColor(), - ), - alertTitle: "Error Pulling Data", - alertBody: Column( - children: [ - Text( - "Please ensure you are connectede top the internet and you are running the latest version of MIH then try again.", - style: TextStyle( - color: MzansiInnovationHub.of(context)! - .theme - .secondaryColor(), - fontSize: 15, - ), - ), - ], - ), - ); - } - }), - ); - } - - void showDeleteReviewAlert() { - showDialog( - context: context, - builder: (context) => MihPackageAlert( + future: getUserReview(), + builder: (context, asyncSnapshot) { + if (asyncSnapshot.connectionState == ConnectionState.waiting) { + return const Mihloadingcircle( + message: "Checking for previous reviews...", + ); + } else if (asyncSnapshot.connectionState == ConnectionState.done) { + return MihReviewBusinessWindow( + businessId: widget.businessid, + businessReview: asyncSnapshot.data, + screenWidth: width, + ); + } else { + return MihPackageAlert( alertColour: MzansiInnovationHub.of(context)!.theme.errorColor(), alertIcon: Icon( Icons.warning_rounded, size: 100, color: MzansiInnovationHub.of(context)!.theme.errorColor(), ), - alertTitle: "Delete Review", + alertTitle: "Error Pulling Data", alertBody: Column( children: [ Text( - "Are you sure you want to delete this review? This action cannot be undone.", + "Please ensure you are connectede top the internet and you are running the latest version of MIH then try again.", style: TextStyle( color: MzansiInnovationHub.of(context)! .theme @@ -807,52 +530,12 @@ class _MihBusinessCardState extends State { fontSize: 15, ), ), - const SizedBox(height: 25), - Wrap( - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - width: 300, - onPressed: () { - Navigator.of(context).pop(); - }, - buttonColor: - MzansiInnovationHub.of(context)!.theme.errorColor(), - child: Text( - "Delete", - style: TextStyle( - color: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - MihButton( - width: 300, - onPressed: () { - Navigator.of(context).pop(); - }, - buttonColor: MzansiInnovationHub.of(context)! - .theme - .successColor(), - child: Text( - "Cancel", - style: TextStyle( - color: MzansiInnovationHub.of(context)! - .theme - .primaryColor(), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), ], ), - )); + ); + } + }, + ), + ); } }