feat: add complete review/rating system for events

New feature: Users can view, submit, and interact with event reviews.

Components added:
- ReviewModel, ReviewStatsModel, ReviewListResponse (models)
- ReviewService with getReviews, submitReview, markHelpful, flagReview
- StarRatingInput (interactive 5-star picker with labels)
- StarDisplay (read-only fractional star display)
- ReviewSummary (average rating + distribution bars)
- ReviewForm (star picker + comment field + submit/update)
- ReviewCard (avatar, timestamp, expandable comment, helpful/flag)
- ReviewSection (main container with pagination and state mgmt)

Integration:
- Added to LearnMoreScreen (both mobile and desktop layouts)
- Review API endpoints point to app.eventifyplus.com Node.js backend
- EventModel updated with averageRating/reviewCount fields

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-30 18:04:37 +05:30
parent b55f02e057
commit d2b49d4eb5
11 changed files with 1034 additions and 0 deletions

View File

@@ -12,6 +12,7 @@ import '../features/events/models/event_models.dart';
import '../features/events/services/events_service.dart';
import '../core/auth/auth_guard.dart';
import '../core/constants.dart';
import '../features/reviews/widgets/review_section.dart';
class LearnMoreScreen extends StatefulWidget {
final int eventId;
@@ -416,6 +417,8 @@ class _LearnMoreScreenState extends State<LearnMoreScreen> {
if (_event!.importantInfo.isEmpty &&
(_event!.importantInformation ?? '').isNotEmpty)
_buildImportantInfoFallback(theme),
const SizedBox(height: 24),
ReviewSection(eventId: widget.eventId),
],
),
),
@@ -556,6 +559,11 @@ class _LearnMoreScreenState extends State<LearnMoreScreen> {
if (_event!.importantInfo.isEmpty &&
(_event!.importantInformation ?? '').isNotEmpty)
_buildImportantInfoFallback(theme),
const SizedBox(height: 24),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 0),
child: ReviewSection(eventId: widget.eventId),
),
const SizedBox(height: 100),
],
),