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

@ -70,6 +70,7 @@ class Translations with BaseTranslations<AppLocale, Translations> {
late final Translations$desiccant$en desiccant = Translations$desiccant$en.internal(_root);
late final Translations$unit$en unit = Translations$unit$en.internal(_root);
late final Translations$market$en market = Translations$market$en.internal(_root);
late final Translations$chatList$en chatList = Translations$chatList$en.internal(_root);
late final Translations$chat$en chat = Translations$chat$en.internal(_root);
late final Translations$trust$en trust = Translations$trust$en.internal(_root);
}
@ -1142,6 +1143,21 @@ class Translations$market$en {
String get queued => 'Saved — we\'ll share these when you\'re connected';
}
// Path: chatList
class Translations$chatList$en {
Translations$chatList$en.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// en: 'Messages'
String get title => 'Messages';
/// en: 'No conversations yet. Message someone from the market.'
String get empty => 'No conversations yet. Message someone from the market.';
}
// Path: chat
class Translations$chat$en {
Translations$chat$en.internal(this._root);
@ -1969,6 +1985,8 @@ extension on Translations {
'market.useLocation' => 'Use my approximate location',
'market.locationFailed' => 'Couldn\'t get your location — check that location is on and the permission is granted',
'market.queued' => 'Saved — we\'ll share these when you\'re connected',
'chatList.title' => 'Messages',
'chatList.empty' => 'No conversations yet. Message someone from the market.',
'chat.title' => 'Chat',
'chat.hint' => 'Write a message…',
'chat.send' => 'Send',