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

@ -40,6 +40,7 @@
"langEs": "Español",
"langEn": "English",
"langPt": "Português",
"langAst": "Asturianu",
"about": "Acerca de",
"aboutText": "Inventário local e cifrado para sementes tradicionais. AGPL-3.0.",
"aboutOpen": "Acerca do Tanemaki"
@ -342,6 +343,8 @@
"setAreaBody": "Diz ao mercado a tua zona aproximada para ver sementes por perto.",
"searching": "A procurar pela tua zona…",
"empty": "Ainda não há sementes partilhadas perto de ti",
"searchHint": "Procurar nestas sementes",
"noMatches": "Nenhuma semente partilhada corresponde à procura",
"near": "Perto de ti",
"contact": "Mensagem",
"mine": "Tu",