feat(market): search + pull-to-refresh in the market list

Match the inventory patterns the market was missing:
- Search: OffersState gains a `query` + `visibleOffers` getter and
  OffersCubit.search() filters the already-discovered offers locally by
  summary (case-insensitive), never re-hitting the transport. The filter
  survives a refresh. Rounded search field mirrors inventory's.
- Pull-to-refresh: RefreshIndicator re-runs discovery for the current
  area (empty state included, so a swipe re-scans). Text filter kept.
- i18n: market.searchHint / market.noMatches (en/es/pt).

Note: the shared slang output (strings*.g.dart, incl. the generated
Asturian locale) is regenerated wholesale, so it also carries the
in-progress `ast` locale keys already present in the working tree.
This commit is contained in:
vjrj 2026-07-10 15:40:13 +02:00
parent bd18978aff
commit beb29915d8
11 changed files with 1614 additions and 21 deletions

View file

@ -620,6 +620,8 @@ class _Translations$market$es extends Translations$market$en {
@override String get setAreaBody => 'Dile al mercado tu zona aproximada para ver semillas cerca.';
@override String get searching => 'Buscando por tu zona…';
@override String get empty => 'Aún no hay semillas compartidas cerca de ti';
@override String get searchHint => 'Buscar entre estas semillas';
@override String get noMatches => 'Ninguna semilla compartida coincide con tu búsqueda';
@override String get near => 'Cerca de ti';
@override String get contact => 'Mensaje';
@override String get mine => '';
@ -1358,6 +1360,8 @@ extension on TranslationsEs {
'market.setAreaBody' => 'Dile al mercado tu zona aproximada para ver semillas cerca.',
'market.searching' => 'Buscando por tu zona…',
'market.empty' => 'Aún no hay semillas compartidas cerca de ti',
'market.searchHint' => 'Buscar entre estas semillas',
'market.noMatches' => 'Ninguna semilla compartida coincide con tu búsqueda',
'market.near' => 'Cerca de ti',
'market.contact' => 'Mensaje',
'market.mine' => '',