Merge branch 'master' of github.com:GaecKo/flutter into feature/end_workout_button

This commit is contained in:
Arthur De Neyer
2025-10-15 23:43:06 +02:00
9 changed files with 201 additions and 2 deletions

View File

@@ -471,6 +471,26 @@
}, },
"gallery": "Galeria", "gallery": "Galeria",
"@gallery": {}, "@gallery": {},
"imageFormatNotSupported": "{imageFormat} no és compatible",
"@imageFormatNotSupported": {
"description": "Label shown on the error container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"imageFormatNotSupportedDetail": "Les imatges {imageFormat} encara no són compatibles.",
"@imageFormatNotSupportedDetail": {
"description": "Label shown on the image preview container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"addImage": "Afegeix imatge", "addImage": "Afegeix imatge",
"@addImage": {}, "@addImage": {},
"dataCopied": "Dades copiades a una nova entrada", "dataCopied": "Dades copiades a una nova entrada",

View File

@@ -508,6 +508,26 @@
"@takePicture": {}, "@takePicture": {},
"gallery": "Galerie", "gallery": "Galerie",
"@gallery": {}, "@gallery": {},
"imageFormatNotSupported": "{imageFormat} není podporován",
"@imageFormatNotSupported": {
"description": "Label shown on the error container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"imageFormatNotSupportedDetail": "Obrazy {imageFormat} zatím nejsou podporovány.",
"@imageFormatNotSupportedDetail": {
"description": "Label shown on the image preview container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"productFound": "Produkt nalezen", "productFound": "Produkt nalezen",
"@productFound": { "@productFound": {
"description": "Header label for dialog when product is found with barcode" "description": "Header label for dialog when product is found with barcode"

View File

@@ -357,6 +357,26 @@
"@addImage": {}, "@addImage": {},
"gallery": "Galerie", "gallery": "Galerie",
"@gallery": {}, "@gallery": {},
"imageFormatNotSupported": "{imageFormat} wird nicht unterstützt",
"@imageFormatNotSupported": {
"description": "Label shown on the error container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"imageFormatNotSupportedDetail": "{imageFormat}-Bilder werden noch nicht unterstützt.",
"@imageFormatNotSupportedDetail": {
"description": "Label shown on the image preview container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"chooseFromLibrary": "Wähle aus der Bibliothek", "chooseFromLibrary": "Wähle aus der Bibliothek",
"@chooseFromLibrary": {}, "@chooseFromLibrary": {},
"takePicture": "Bild aufnehmen", "takePicture": "Bild aufnehmen",

View File

@@ -771,6 +771,26 @@
}, },
"imageDetailsLicenseNotice": "By submitting this image, you agree to release it under the CC-BY-SA-4. The image must be either your own work or the author must have released it under a license compatible with it.", "imageDetailsLicenseNotice": "By submitting this image, you agree to release it under the CC-BY-SA-4. The image must be either your own work or the author must have released it under a license compatible with it.",
"imageDetailsLicenseNoticeLinkToLicense": "See license text.", "imageDetailsLicenseNoticeLinkToLicense": "See license text.",
"imageFormatNotSupported": "{imageFormat} not supported",
"@imageFormatNotSupported": {
"description": "Label shown on the error container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"imageFormatNotSupportedDetail": "{imageFormat} images are not supported yet.",
"@imageFormatNotSupportedDetail": {
"description": "Label shown on the image preview container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"add": "add", "add": "add",
"@add": { "@add": {
"description": "Add button text" "description": "Add button text"
@@ -1033,4 +1053,4 @@
"darkMode": "Always dark mode", "darkMode": "Always dark mode",
"lightMode": "Always light mode", "lightMode": "Always light mode",
"systemMode": "System settings" "systemMode": "System settings"
} }

View File

@@ -344,6 +344,26 @@
"@addImage": {}, "@addImage": {},
"gallery": "Galería", "gallery": "Galería",
"@gallery": {}, "@gallery": {},
"imageFormatNotSupported": "{imageFormat} no compatible",
"@imageFormatNotSupported": {
"description": "Label shown on the error container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"imageFormatNotSupportedDetail": "Las imágenes {imageFormat} aún no son compatibles.",
"@imageFormatNotSupportedDetail": {
"description": "Label shown on the image preview container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"chooseFromLibrary": "Elije de la biblioteca de fotos", "chooseFromLibrary": "Elije de la biblioteca de fotos",
"@chooseFromLibrary": {}, "@chooseFromLibrary": {},
"takePicture": "Toma una foto", "takePicture": "Toma una foto",

View File

@@ -354,6 +354,26 @@
"@addImage": {}, "@addImage": {},
"gallery": "Galerie", "gallery": "Galerie",
"@gallery": {}, "@gallery": {},
"imageFormatNotSupported": "{imageFormat} non pris en charge",
"@imageFormatNotSupported": {
"description": "Label shown on the error container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"imageFormatNotSupportedDetail": "{imageFormat} non pris en charge",
"@imageFormatNotSupportedDetail": {
"description": "Label shown on the image preview container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"chooseFromLibrary": "Choisir depuis la bibliothèque", "chooseFromLibrary": "Choisir depuis la bibliothèque",
"@chooseFromLibrary": {}, "@chooseFromLibrary": {},
"takePicture": "Prendre une photo", "takePicture": "Prendre une photo",

View File

@@ -473,6 +473,26 @@
"@chooseFromLibrary": {}, "@chooseFromLibrary": {},
"gallery": "Gallery", "gallery": "Gallery",
"@gallery": {}, "@gallery": {},
"imageFormatNotSupported": "{imageFormat}はサポートされていません",
"@imageFormatNotSupported": {
"description": "Label shown on the error container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"imageFormatNotSupportedDetail": "{imageFormat}形式の画像はまだサポートされていません。",
"@imageFormatNotSupportedDetail": {
"description": "Label shown on the image preview container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"addImage": "Add image", "addImage": "Add image",
"@addImage": {}, "@addImage": {},
"dataCopied": "Data copied to new entry", "dataCopied": "Data copied to new entry",

View File

@@ -479,6 +479,26 @@
"@chooseFromLibrary": {}, "@chooseFromLibrary": {},
"gallery": "Галерея", "gallery": "Галерея",
"@gallery": {}, "@gallery": {},
"imageFormatNotSupported": "{imageFormat} не підтримується",
"@imageFormatNotSupported": {
"description": "Label shown on the error container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"imageFormatNotSupportedDetail": "Зображення {imageFormat} поки що не підтримуються.",
"@imageFormatNotSupportedDetail": {
"description": "Label shown on the image preview container when image format is not supported",
"type": "text",
"placeholders": {
"imageFormat": {
"type": "String"
}
}
},
"addImage": "Додати зображення", "addImage": "Додати зображення",
"@addImage": {}, "@addImage": {},
"dataCopied": "Дані скопійовано до нового запису", "dataCopied": "Дані скопійовано до нового запису",

View File

@@ -35,6 +35,8 @@ class Gallery extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final provider = Provider.of<GalleryProvider>(context); final provider = Provider.of<GalleryProvider>(context);
final i18n = AppLocalizations.of(context);
final theme = Theme.of(context);
return Padding( return Padding(
padding: const EdgeInsets.all(5), padding: const EdgeInsets.all(5),
@@ -63,6 +65,23 @@ class Gallery extends StatelessWidget {
image: NetworkImage(currentImage.url!), image: NetworkImage(currentImage.url!),
fit: BoxFit.cover, fit: BoxFit.cover,
imageSemanticLabel: currentImage.description, imageSemanticLabel: currentImage.description,
imageErrorBuilder: (context, error, stackTrace) {
final imageFormat = currentImage.url!.split('.').last.toUpperCase();
return AspectRatio(
aspectRatio: 1,
child: Container(
color: theme.colorScheme.errorContainer,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 8,
children: [
Icon(Icons.broken_image),
Text(i18n.imageFormatNotSupported(imageFormat)),
]
),
),
);
},
), ),
); );
}, },
@@ -82,6 +101,8 @@ class ImageDetail extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final i18n = AppLocalizations.of(context);
final theme = Theme.of(context);
return Container( return Container(
key: Key('image-${image.id!}-detail'), key: Key('image-${image.id!}-detail'),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(10),
@@ -92,7 +113,25 @@ class ImageDetail extends StatelessWidget {
style: Theme.of(context).textTheme.headlineSmall, style: Theme.of(context).textTheme.headlineSmall,
), ),
Expanded( Expanded(
child: Image.network(image.url!, semanticLabel: image.description), child: Image.network(
image.url!,
semanticLabel: image.description,
errorBuilder: (context, error, stackTrace) {
final imageFormat = image.url!.split('.').last.toUpperCase();
return Container(
color: theme.colorScheme.errorContainer,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 8,
children: [
Icon(Icons.broken_image),
Text(i18n.imageFormatNotSupportedDetail(imageFormat))
]
),
);
},
),
), ),
Padding( Padding(
padding: const EdgeInsets.symmetric(vertical: 8), padding: const EdgeInsets.symmetric(vertical: 8),