feat(photos): camera-or-gallery picker + swipeable full-screen viewer
- Adding a photo (quick-add and detail) now offers a Camera / Gallery chooser (shared pickPhoto helper); camera errors on desktop degrade gracefully. - Full-screen viewer: pinch-to-zoom pans only while zoomed, so a plain horizontal swipe pages between photos again. 54 tests green; Linux runs.
This commit is contained in:
parent
4b209d6752
commit
c789cd1027
8 changed files with 136 additions and 40 deletions
|
|
@ -14,6 +14,10 @@
|
|||
"openMarket": "Open market",
|
||||
"yourInventory": "Your inventory"
|
||||
},
|
||||
"photo": {
|
||||
"camera": "Take a photo",
|
||||
"gallery": "Choose from gallery"
|
||||
},
|
||||
"menu": {
|
||||
"inventory": "Inventory",
|
||||
"market": "Market",
|
||||
|
|
|
|||
|
|
@ -14,6 +14,10 @@
|
|||
"openMarket": "Mercado abierto",
|
||||
"yourInventory": "Tu inventario"
|
||||
},
|
||||
"photo": {
|
||||
"camera": "Hacer una foto",
|
||||
"gallery": "Elegir de la galería"
|
||||
},
|
||||
"menu": {
|
||||
"inventory": "Inventario",
|
||||
"market": "Mercado",
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 2
|
||||
/// Strings: 256 (128 per locale)
|
||||
/// Strings: 260 (130 per locale)
|
||||
///
|
||||
/// Built on 2026-07-08 at 12:01 UTC
|
||||
/// Built on 2026-07-08 at 12:10 UTC
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, unused_import
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ class Translations with BaseTranslations<AppLocale, Translations> {
|
|||
late final Translations$app$en app = Translations$app$en.internal(_root);
|
||||
late final Translations$common$en common = Translations$common$en.internal(_root);
|
||||
late final Translations$home$en home = Translations$home$en.internal(_root);
|
||||
late final Translations$photo$en photo = Translations$photo$en.internal(_root);
|
||||
late final Translations$menu$en menu = Translations$menu$en.internal(_root);
|
||||
late final Translations$settings$en settings = Translations$settings$en.internal(_root);
|
||||
late final Translations$inventory$en inventory = Translations$inventory$en.internal(_root);
|
||||
|
|
@ -110,6 +111,21 @@ class Translations$home$en {
|
|||
String get yourInventory => 'Your inventory';
|
||||
}
|
||||
|
||||
// Path: photo
|
||||
class Translations$photo$en {
|
||||
Translations$photo$en.internal(this._root);
|
||||
|
||||
final Translations _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
|
||||
/// en: 'Take a photo'
|
||||
String get camera => 'Take a photo';
|
||||
|
||||
/// en: 'Choose from gallery'
|
||||
String get gallery => 'Choose from gallery';
|
||||
}
|
||||
|
||||
// Path: menu
|
||||
class Translations$menu$en {
|
||||
Translations$menu$en.internal(this._root);
|
||||
|
|
@ -773,6 +789,8 @@ extension on Translations {
|
|||
'common.comingSoon' => 'Coming soon',
|
||||
'home.openMarket' => 'Open market',
|
||||
'home.yourInventory' => 'Your inventory',
|
||||
'photo.camera' => 'Take a photo',
|
||||
'photo.gallery' => 'Choose from gallery',
|
||||
'menu.inventory' => 'Inventory',
|
||||
'menu.market' => 'Market',
|
||||
'menu.profile' => 'Your profile',
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ class TranslationsEs extends Translations with BaseTranslations<AppLocale, Trans
|
|||
@override late final _Translations$app$es app = _Translations$app$es._(_root);
|
||||
@override late final _Translations$common$es common = _Translations$common$es._(_root);
|
||||
@override late final _Translations$home$es home = _Translations$home$es._(_root);
|
||||
@override late final _Translations$photo$es photo = _Translations$photo$es._(_root);
|
||||
@override late final _Translations$menu$es menu = _Translations$menu$es._(_root);
|
||||
@override late final _Translations$settings$es settings = _Translations$settings$es._(_root);
|
||||
@override late final _Translations$inventory$es inventory = _Translations$inventory$es._(_root);
|
||||
|
|
@ -91,6 +92,17 @@ class _Translations$home$es extends Translations$home$en {
|
|||
@override String get yourInventory => 'Tu inventario';
|
||||
}
|
||||
|
||||
// Path: photo
|
||||
class _Translations$photo$es extends Translations$photo$en {
|
||||
_Translations$photo$es._(TranslationsEs root) : this._root = root, super.internal(root);
|
||||
|
||||
final TranslationsEs _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get camera => 'Hacer una foto';
|
||||
@override String get gallery => 'Elegir de la galería';
|
||||
}
|
||||
|
||||
// Path: menu
|
||||
class _Translations$menu$es extends Translations$menu$en {
|
||||
_Translations$menu$es._(TranslationsEs root) : this._root = root, super.internal(root);
|
||||
|
|
@ -538,6 +550,8 @@ extension on TranslationsEs {
|
|||
'common.comingSoon' => 'Pronto',
|
||||
'home.openMarket' => 'Mercado abierto',
|
||||
'home.yourInventory' => 'Tu inventario',
|
||||
'photo.camera' => 'Hacer una foto',
|
||||
'photo.gallery' => 'Elegir de la galería',
|
||||
'menu.inventory' => 'Inventario',
|
||||
'menu.market' => 'Mercado',
|
||||
'menu.profile' => 'Tu perfil',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue