feat(inventory): external links on the variety detail

Add Wikipedia/forum-style URLs to a variety:
- Repository: addExternalLink/removeExternalLink (soft delete); watchVariety
  loads links and re-emits on external_links changes; ExternalLinkItem model
  (title preferred over URL for display).
- Cubit: addExternalLink/removeExternalLink.
- Detail: a "Links" section with tappable link chips (open via url_launcher,
  http(s):// prepended if missing), delete per chip, and an "Add link" dialog
  (URL + optional title).

Tests: repo add/remove + widget add/remove. 52 green; Linux runs.
This commit is contained in:
vjrj 2026-07-08 13:38:31 +02:00
parent 02a9d5bf39
commit b23f4f1c77
14 changed files with 315 additions and 2 deletions

View file

@ -45,6 +45,10 @@
"noLots": "No lots yet.",
"names": "Also known as",
"addName": "Add name",
"links": "Links",
"addLink": "Add link",
"linkUrl": "URL",
"linkTitle": "Title (optional)",
"notes": "Notes",
"addLot": "Add lot",
"editLot": "Edit lot",

View file

@ -45,6 +45,10 @@
"noLots": "Aún no hay lotes.",
"names": "También conocida como",
"addName": "Añadir nombre",
"links": "Enlaces",
"addLink": "Añadir enlace",
"linkUrl": "URL",
"linkTitle": "Título (opcional)",
"notes": "Notas",
"addLot": "Añadir lote",
"editLot": "Editar lote",

View file

@ -4,9 +4,9 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 2
/// Strings: 236 (118 per locale)
/// Strings: 244 (122 per locale)
///
/// Built on 2026-07-08 at 10:18 UTC
/// Built on 2026-07-08 at 10:27 UTC
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import

View file

@ -216,6 +216,18 @@ class Translations$detail$en {
/// en: 'Add name'
String get addName => 'Add name';
/// en: 'Links'
String get links => 'Links';
/// en: 'Add link'
String get addLink => 'Add link';
/// en: 'URL'
String get linkUrl => 'URL';
/// en: 'Title (optional)'
String get linkTitle => 'Title (optional)';
/// en: 'Notes'
String get notes => 'Notes';
@ -757,6 +769,10 @@ extension on Translations {
'detail.noLots' => 'No lots yet.',
'detail.names' => 'Also known as',
'detail.addName' => 'Add name',
'detail.links' => 'Links',
'detail.addLink' => 'Add link',
'detail.linkUrl' => 'URL',
'detail.linkTitle' => 'Title (optional)',
'detail.notes' => 'Notes',
'detail.addLot' => 'Add lot',
'detail.editLot' => 'Edit lot',

View file

@ -148,6 +148,10 @@ class _Translations$detail$es extends Translations$detail$en {
@override String get noLots => 'Aún no hay lotes.';
@override String get names => 'También conocida como';
@override String get addName => 'Añadir nombre';
@override String get links => 'Enlaces';
@override String get addLink => 'Añadir enlace';
@override String get linkUrl => 'URL';
@override String get linkTitle => 'Título (opcional)';
@override String get notes => 'Notas';
@override String get addLot => 'Añadir lote';
@override String get editLot => 'Editar lote';
@ -542,6 +546,10 @@ extension on TranslationsEs {
'detail.noLots' => 'Aún no hay lotes.',
'detail.names' => 'También conocida como',
'detail.addName' => 'Añadir nombre',
'detail.links' => 'Enlaces',
'detail.addLink' => 'Añadir enlace',
'detail.linkUrl' => 'URL',
'detail.linkTitle' => 'Título (opcional)',
'detail.notes' => 'Notas',
'detail.addLot' => 'Añadir lote',
'detail.editLot' => 'Editar lote',