import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../core/chat/chat_request_notifier.dart'; class IncomingRequestSheet extends ConsumerWidget { final String sessionId; const IncomingRequestSheet({super.key, required this.sessionId}); @override Widget build(BuildContext context, WidgetRef ref) { final requestState = ref.watch(chatRequestProvider); // Request is still active — show accept/decline if (requestState is ChatRequestIncomingData) { return _buildActiveRequest(context, ref); } // Request was taken by another mitra or cancelled — show info return _buildStaleRequest(context); } Widget _buildActiveRequest(BuildContext context, WidgetRef ref) { return Container( padding: const EdgeInsets.all(24), child: Column( mainAxisSize: MainAxisSize.min, children: [ const Icon(Icons.chat, size: 48, color: Colors.blue), const SizedBox(height: 16), const Text( 'Ada permintaan chat baru!', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), const SizedBox(height: 8), const Text( 'Seorang customer ingin curhat denganmu.', style: TextStyle(fontSize: 14, color: Colors.grey), ), const SizedBox(height: 24), Row( children: [ Expanded( child: OutlinedButton( onPressed: () { ref.read(chatRequestProvider.notifier).decline(sessionId); Navigator.of(context).pop(); }, child: const Text('Tolak'), ), ), const SizedBox(width: 16), Expanded( child: ElevatedButton( onPressed: () { ref.read(chatRequestProvider.notifier).accept(sessionId); Navigator.of(context).pop(); }, child: const Text('Terima'), ), ), ], ), ], ), ); } Widget _buildStaleRequest(BuildContext context) { return Container( padding: const EdgeInsets.all(24), child: Column( mainAxisSize: MainAxisSize.min, children: [ const Icon(Icons.info_outline, size: 48, color: Colors.orange), const SizedBox(height: 16), const Text( 'Permintaan tidak tersedia', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), const SizedBox(height: 8), const Text( 'Permintaan ini sudah dibatalkan oleh customer atau diterima oleh Bestie lain.', style: TextStyle(fontSize: 14, color: Colors.grey), textAlign: TextAlign.center, ), const SizedBox(height: 24), SizedBox( width: double.infinity, child: ElevatedButton( onPressed: () => Navigator.of(context).pop(), child: const Text('OK'), ), ), ], ), ); } }