import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import '../../Utility/AppColors.dart'; import '../../Utility/Reusablewidgets.dart'; class ProcessTicketChatScreen extends StatefulWidget { final String? reason; const ProcessTicketChatScreen({super.key, this.reason}); @override State createState() => _ProcessTicketChatScreenState(); } class _ProcessTicketChatScreenState extends State { final TextEditingController _messageController = TextEditingController(); List _selectedImages = []; @override Widget build(BuildContext context) { return SafeArea( top: false, child: Scaffold( backgroundColor: AppColors.backgroundRegular, appBar: AppBar( automaticallyImplyLeading: false, backgroundColor: Colors.white, elevation: 0, title: Row( children: [ InkResponse( onTap: () => Navigator.pop(context, true), child: SvgPicture.asset( "assets/svg/continue_left_ic.svg", height: 25, ), ), const SizedBox(width: 10), const Text( "Help?", style: TextStyle( fontSize: 16, fontFamily: "Plus Jakarta Sans", fontWeight: FontWeight.w600, color: Colors.black87, ), ), const Spacer(), Container( padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), decoration: BoxDecoration( color: const Color(0xFFD7F7D9), borderRadius: BorderRadius.circular(16), ), child: const Text( "In Process", style: TextStyle( fontSize: 12, fontFamily: "Plus Jakarta Sans", fontWeight: FontWeight.w500, color: Colors.green, ), ), ), ], ), ), // Chat Messages + Button body: Column( children: [ Expanded( child: SingleChildScrollView( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 4,), /// USER MESSAGE _chatBubble( name: "Rajveer Singh", date: "25th Jan 2025", message: "I am writing to express my dissatisfaction regarding an issue with my order set for January 25, 2025. It’s frustrating to encounter problems like this, and I would appreciate prompt assistance from your support team to resolve this matter.", isUser: true, ), const SizedBox(height: 16), /// SUPPORT MESSAGE _chatBubble( name: "Genrental Support", date: "25th Jan 2025", message: "We regret to inform you that there is a problem with your order scheduled for January 25, 2025. Please contact our support team for assistance.", isUser: false, ), ], ), ), ), /// Bottom Button Container( width: double.infinity, padding: const EdgeInsets.all(16), color: Colors.white, child: ElevatedButton( onPressed: _openMessageSheet, style: ElevatedButton.styleFrom( backgroundColor: AppColors.buttonColor, foregroundColor: Colors.white, padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(28), ), elevation: 0, ), child: const Text( "Send a Message", style: TextStyle( fontSize: 16, fontFamily: "Plus Jakarta Sans", fontWeight: FontWeight.w600, ), ), ), ), ], ), ), ); } /// Chat bubble widget Widget _chatBubble({ required String name, required String date, required String message, required bool isUser, }) { return Container( width: double.infinity, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Profile Icon CircleAvatar( radius: 16, backgroundColor: isUser ? Colors.blue.shade200 : Colors.blue, child: Text( name[0], style: const TextStyle( color: Colors.white, fontSize: 14, fontWeight: FontWeight.w600, ), ), ), const SizedBox(width: 10), // Message Content Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( name, style: const TextStyle( fontSize: 14, fontFamily: "Plus Jakarta Sans", fontWeight: FontWeight.w600, color: Colors.black, ), ), const SizedBox(height: 2), Text( date, style: TextStyle( fontSize: 12, fontFamily: "Plus Jakarta Sans", fontWeight: FontWeight.w400, color: Colors.grey[600], ), ), const SizedBox(height: 6), Text( message, style: const TextStyle( fontSize: 13, fontFamily: "Plus Jakarta Sans", fontWeight: FontWeight.w400, color: Colors.black87, height: 1.5, ), ), const SizedBox(height: 10), Container( height: 1, width: double.infinity, color: Colors.grey.shade300, ), ], ), ), ], ), ); } /// Bottom Sheet for sending message void _openMessageSheet() { showModalBottomSheet( isScrollControlled: true, backgroundColor: Colors.white, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.vertical(top: Radius.circular(24)), ), context: context, builder: (context) { return Padding( padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom, top: 16, left: 16, right: 16, ), child: StatefulBuilder( builder: (context, setSheetState) { return Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Center( child: Container( width: 40, height: 4, decoration: BoxDecoration( color: Colors.grey[300], borderRadius: BorderRadius.circular(4), ), ), ), const SizedBox(height: 12), const Center( child: Text( "Send a Message", style: TextStyle( fontSize: 16, fontFamily: "Plus Jakarta Sans", fontWeight: FontWeight.w600, color: Colors.black, ), ), ), const SizedBox(height: 16), Text( "Message", style: TextStyle( fontSize: 12, fontFamily: "Plus Jakarta Sans", fontWeight: FontWeight.w500, color: Colors.grey[700], ), ), const SizedBox(height: 6), Container( decoration: BoxDecoration( color: Colors.grey.shade100, borderRadius: BorderRadius.circular(12), ), child: TextFormField( controller: _messageController, maxLines: 5, decoration: InputDecoration( hintText: "Write your message", hintStyle: TextStyle( fontSize: 14, color: Colors.grey[400], fontFamily: "Plus Jakarta Sans", ), border: InputBorder.none, contentPadding: const EdgeInsets.all(12), ), ), ), const SizedBox(height: 16), Text( "Attach Screenshot (optional)", style: TextStyle( fontSize: 12, fontFamily: "Plus Jakarta Sans", fontWeight: FontWeight.w500, color: Colors.grey[700], ), ), const SizedBox(height: 8), Wrap( spacing: 8, runSpacing: 8, children: [ GestureDetector( onTap: () { setSheetState(() { _selectedImages .add('https://via.placeholder.com/100'); }); }, child: Container( width: 60, height: 60, decoration: BoxDecoration( color: Colors.grey.shade100, borderRadius: BorderRadius.circular(8), ), child: Icon( Icons.add, color: Colors.grey[600], ), ), ), ..._selectedImages.map( (img) => Stack( children: [ ClipRRect( borderRadius: BorderRadius.circular(8), child: Image.network( img, width: 60, height: 60, fit: BoxFit.cover, ), ), Positioned( top: 2, right: 2, child: GestureDetector( onTap: () { setSheetState(() { _selectedImages.remove(img); }); }, child: Container( decoration: const BoxDecoration( color: Colors.black54, shape: BoxShape.circle, ), child: const Icon( Icons.close, size: 14, color: Colors.white, ), ), ), ), ], ), ), ], ), const SizedBox(height: 24), SizedBox( width: double.infinity, child: ElevatedButton( onPressed: () { Navigator.pop(context); _messageController.clear(); }, style: ElevatedButton.styleFrom( backgroundColor: AppColors.buttonColor, foregroundColor: Colors.white, padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(28), ), elevation: 0, ), child: const Text( "Send Message", style: TextStyle( fontSize: 16, fontFamily: "Plus Jakarta Sans", fontWeight: FontWeight.w600, ), ), ), ), const SizedBox(height: 16), ], ); }, ), ); }, ); } @override void dispose() { _messageController.dispose(); super.dispose(); } }