import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import '../../../core/analytics/analytics_service.dart'; import '../../../core/theme/halo_tokens.dart'; import '../../../core/theme/widgets/widgets.dart'; import '../../payment/state/payment_draft_provider.dart'; /// Phase 4 Stage 8 — Bestie Choice Sheet. /// /// Triggered from the home `Mulai Curhat` CTA when the user has at least one /// prior session. Two cards: continue with a known bestie (→ history list) /// vs. find a new bestie (→ soft-prompt + blast). class BestieChoiceSheet extends ConsumerWidget { const BestieChoiceSheet({super.key}); static Future show(BuildContext context) { return HaloBottomSheet.show( context, child: const BestieChoiceSheet(), ); } @override Widget build(BuildContext context, WidgetRef ref) { return Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const Text( 'mau curhat sama siapa?', textAlign: TextAlign.center, style: TextStyle( fontFamily: HaloTokens.fontDisplay, fontSize: 22, fontWeight: FontWeight.w700, color: HaloTokens.ink, ), ), const SizedBox(height: HaloSpacing.s8), const Text( 'pilih lanjut sama bestie yang udah kenal, atau coba bestie baru.', textAlign: TextAlign.center, style: TextStyle( fontFamily: HaloTokens.fontBody, fontSize: 14, color: HaloTokens.inkSoft, ), ), const SizedBox(height: HaloSpacing.s24), _ChoiceCard( title: 'bestie yang udah kenal', subtitle: 'lanjut cerita ke bestie yang pernah dengerin kamu.', icon: Icons.favorite_outline, onTap: () { // ignore: discarded_futures ref.read(analyticsProvider).logBestieChoiceSelect(knownBestie: true); Navigator.of(context).pop(); context.push('/bestie/history'); }, ), const SizedBox(height: HaloSpacing.s12), _ChoiceCard( title: 'bestie baru', subtitle: 'cari bestie baru yang siap dengerin sekarang.', icon: Icons.auto_awesome_outlined, onTap: () { // ignore: discarded_futures ref.read(analyticsProvider).logBestieChoiceSelect(knownBestie: false); // explicit reset — this branch is blast-only, clear any stale targeted mitra ref.read(paymentDraftNotifierProvider.notifier).reset(); Navigator.of(context).pop(); context.push('/payment/entry'); }, ), ], ); } } class _ChoiceCard extends StatelessWidget { final String title; final String subtitle; final IconData icon; final VoidCallback onTap; const _ChoiceCard({ required this.title, required this.subtitle, required this.icon, required this.onTap, }); @override Widget build(BuildContext context) { return Material( color: HaloTokens.brandSofter, borderRadius: HaloRadius.lg, child: InkWell( onTap: onTap, borderRadius: HaloRadius.lg, child: Padding( padding: const EdgeInsets.all(HaloSpacing.s16), child: Row( children: [ Container( width: 48, height: 48, decoration: const BoxDecoration( color: HaloTokens.brandSoft, shape: BoxShape.circle, ), alignment: Alignment.center, child: Icon(icon, color: HaloTokens.brandDark, size: 24), ), const SizedBox(width: HaloSpacing.s12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: const TextStyle( fontFamily: HaloTokens.fontDisplay, fontSize: 16, fontWeight: FontWeight.w700, color: HaloTokens.ink, ), ), const SizedBox(height: 2), Text( subtitle, style: const TextStyle( fontFamily: HaloTokens.fontBody, fontSize: 13, height: 18 / 13, color: HaloTokens.inkSoft, ), ), ], ), ), const Icon(Icons.chevron_right, color: HaloTokens.brandDark), ], ), ), ), ); } }