import 'package:flutter/material.dart'; import 'package:pshared/models/recipient/recipient.dart'; import 'package:pshared/provider/recipient/provider.dart'; import 'package:pweb/pages/address_book/page/search.dart'; import 'package:pweb/pages/payment_methods/widgets/card.dart'; import 'package:pweb/pages/payment_methods/widgets/search.dart'; import 'package:pweb/pages/payment_methods/widgets/section_title.dart'; import 'package:pweb/utils/dimensions.dart'; import 'package:pweb/generated/i18n/app_localizations.dart'; class RecipientSection extends StatelessWidget { final Recipient? recipient; final Recipient? previousRecipient; final AppDimensions dimensions; final RecipientsProvider recipientProvider; final String searchQuery; final List filteredRecipients; final TextEditingController searchController; final FocusNode searchFocusNode; final ValueChanged onSearchChanged; final ValueChanged onRecipientSelected; final VoidCallback onRecipientCleared; const RecipientSection({ super.key, required this.recipient, required this.previousRecipient, required this.dimensions, required this.recipientProvider, required this.searchQuery, required this.filteredRecipients, required this.searchController, required this.searchFocusNode, required this.onSearchChanged, required this.onRecipientSelected, required this.onRecipientCleared, }); @override Widget build(BuildContext context) { final loc = AppLocalizations.of(context)!; if (recipient != null) { return SelectedRecipientCard( dimensions: dimensions, recipient: recipient!, onClear: onRecipientCleared, ); } return AnimatedBuilder( animation: recipientProvider, builder: (context, _) { final hasQuery = searchQuery.isNotEmpty; final prev = previousRecipient; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SectionTitle(loc.recipient), SizedBox(height: dimensions.paddingSmall), RecipientSearchField( controller: searchController, onChanged: onSearchChanged, focusNode: searchFocusNode, ), if (prev != null) ...[ SizedBox(height: dimensions.paddingSmall), ListTile( dense: true, contentPadding: EdgeInsets.zero, leading: const Icon(Icons.undo), title: Text(loc.back), subtitle: Text(prev.name), onTap: () => onRecipientSelected(prev), ), ], if (hasQuery) ...[ SizedBox(height: dimensions.paddingMedium), RecipientSearchResults( dimensions: dimensions, recipientProvider: recipientProvider, results: filteredRecipients, onRecipientSelected: onRecipientSelected, ), ], ], ); }, ); } }