import 'package:wanisclient/config/AppSnackbar.dart'; import 'package:wanisclient/config/custom_text.dart'; import 'package:wanisclient/utils/colors.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:google_fonts/google_fonts.dart'; import '../config/constants/app_constant.dart'; import '../providers/utils_singleton.dart'; import 'custom_button.dart'; class TripRatingCard extends StatefulWidget { final String driverName; final String driverImage; final double systembottompadding; final Function(int) onRatingSelected; final Function(int) onRateRider; // Callback for rating submission TripRatingCard({ required this.driverName, required this.driverImage, required this.onRatingSelected, required this.systembottompadding, required this.onRateRider, // Added callback parameter }); @override _TripRatingCardState createState() => _TripRatingCardState(); } class _TripRatingCardState extends State { int selectedRating = 0; @override Widget build(BuildContext context) { return Container( width: MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.width *.78+widget.systembottompadding, decoration: const BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( topLeft: Radius.circular(20), topRight: Radius.circular(20), ), boxShadow: [ BoxShadow( color: Colors.black12, blurRadius: 10, offset: Offset(0, -2), ), ], ), child: Stack( children: [ SingleChildScrollView( padding: EdgeInsets.only( top: 0, left: 0, right: 0, // space so content doesn't go under the fixed button bottom:MediaQuery.of(context).viewPadding.bottom + 100+widget.systembottompadding, ), child: Column( children: [ const SizedBox(height: 20), Txt(text: "Your trip is finished", style: GoogleFonts.poppins( fontSize: 16, fontWeight: FontWeight.bold, color: AppColors.secondaryColor), ), const SizedBox(height: 12), CircleAvatar( radius: 25, backgroundColor: Colors.grey.shade200, // visible while loading child: ClipOval( child: Image.network( '$mediaUrl${widget.driverImage}', // full URL width: 50, height: 50, fit: BoxFit.cover, errorBuilder: (_, __, ___) => Image.asset( // ← fallback 'assets/images/user_avatar.png', width: 50, height: 50, fit: BoxFit.cover, ), ), ), ), const SizedBox(height: 8), Text( widget.driverName, style: GoogleFonts.poppins( fontSize: 18, fontWeight: FontWeight.bold), ), const SizedBox(height: 12), Row( mainAxisAlignment: MainAxisAlignment.center, children: List.generate(5, (index) { return GestureDetector( onTap: () { setState(() { selectedRating = index + 1; }); widget.onRatingSelected(selectedRating); }, child:SvgPicture.asset( 'assets/icons/rating_star.svg', width: 40, color: index < selectedRating ? AppNewColors.primaryColor : Colors.grey.shade400, ), ); }), ), const SizedBox(height: 12), Txt( text:'Your feedback is anonymous', style: GoogleFonts.poppins( fontSize: 14, fontWeight: FontWeight.normal), ), ], ), ), _buildCancelButton(context) ], ), ); } Widget _buildCancelButton(BuildContext context) { return Positioned( left: 0, right: 0, bottom: 0, child: Container( padding: EdgeInsets.fromLTRB( 20, 12, 20, widget.systembottompadding + 12), decoration: BoxDecoration( color: Colors.white, boxShadow: const [ BoxShadow( color: Color(0x0F000000), blurRadius: 10, offset: Offset(0, 2), ), ], border: Border(top: BorderSide(color: Colors.grey.shade200, width: 1.0)), ), child: CustomButton( onClick: ()=>{ widget.onRateRider(selectedRating) }, width: double.infinity, fontSize: 18, height: 48, borderRadius: 12, txtColor: Colors.white, title: "Rate Driver", backgroundColor: AppNewColors.primaryBtnColor, borderColor: AppNewColors.primaryBtnColor, loadercolor: Colors.white, ), ), ); } }