feat(block2): messages inbox + drawer 'Chat' link (was unreachable)

Chat was only reachable via an offer's 'Message' button, and the drawer 'Chat'
sat on 'coming soon' — so messaging/trust were effectively hidden.
- MessageStore keeps a conversation index (the keystore has no key enumeration)
  and exposes conversations() — peers newest-active-first with their last line.
- ChatListScreen: the messages inbox (tap a conversation → /chat/:pubkey).
- Drawer 'Chat' is now a live destination -> /messages (gated like Market).
- i18n en/es/pt. conversations() covered by a plain test (no widget hang).

Analyzer clean.
This commit is contained in:
vjrj 2026-07-10 12:26:33 +02:00
parent 7bf80d2031
commit abc2d37402
12 changed files with 211 additions and 3 deletions

View file

@ -69,6 +69,7 @@ class TranslationsEs extends Translations with BaseTranslations<AppLocale, Trans
@override late final _Translations$desiccant$es desiccant = _Translations$desiccant$es._(_root);
@override late final _Translations$unit$es unit = _Translations$unit$es._(_root);
@override late final _Translations$market$es market = _Translations$market$es._(_root);
@override late final _Translations$chatList$es chatList = _Translations$chatList$es._(_root);
@override late final _Translations$chat$es chat = _Translations$chat$es._(_root);
@override late final _Translations$trust$es trust = _Translations$trust$es._(_root);
}
@ -634,6 +635,17 @@ class _Translations$market$es extends Translations$market$en {
@override String get queued => 'Guardado — las compartiremos cuando tengas conexión';
}
// Path: chatList
class _Translations$chatList$es extends Translations$chatList$en {
_Translations$chatList$es._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get title => 'Mensajes';
@override String get empty => 'Aún no hay conversaciones. Escribe a alguien desde el mercado.';
}
// Path: chat
class _Translations$chat$es extends Translations$chat$en {
_Translations$chat$es._(TranslationsEs root) : this._root = root, super.internal(root);
@ -1325,6 +1337,8 @@ extension on TranslationsEs {
'market.useLocation' => 'Usar mi ubicación aproximada',
'market.locationFailed' => 'No se pudo obtener tu ubicación — comprueba que la ubicación está activada y el permiso concedido',
'market.queued' => 'Guardado — las compartiremos cuando tengas conexión',
'chatList.title' => 'Mensajes',
'chatList.empty' => 'Aún no hay conversaciones. Escribe a alguien desde el mercado.',
'chat.title' => 'Chat',
'chat.hint' => 'Escribe un mensaje…',
'chat.send' => 'Enviar',