From 7f3a858105c01256726987d235255425508f4279 Mon Sep 17 00:00:00 2001 From: Niko Heller Date: Sun, 9 Feb 2025 20:12:36 +0100 Subject: [PATCH] 211: select image variant from srcset --- lib/features/news/models/news_model.dart | 4 ++-- lib/features/news/screens/news_detail_screen.dart | 2 +- lib/features/news/utils/utils.dart | 9 +++++++++ lib/features/news/widgets/news_card.dart | 4 +++- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/features/news/models/news_model.dart b/lib/features/news/models/news_model.dart index 4b9debb4..a27d991a 100644 --- a/lib/features/news/models/news_model.dart +++ b/lib/features/news/models/news_model.dart @@ -8,7 +8,7 @@ class NewsModel { String summary; String content; String? author; - String? image; + ImageSrcSet? image; String type; Division? division; List categories; @@ -37,7 +37,7 @@ class NewsModel { summary: news.summary ?? 'Leere Zusammenfassung.', content: news.body.content, author: null, - image: news.featuredImage?.original.url, + image: news.featuredImage, type: news.categories.firstOrNull?.label ?? '', division: division, categories: news.categories, diff --git a/lib/features/news/screens/news_detail_screen.dart b/lib/features/news/screens/news_detail_screen.dart index a6a22037..e3c126ae 100644 --- a/lib/features/news/screens/news_detail_screen.dart +++ b/lib/features/news/screens/news_detail_screen.dart @@ -97,7 +97,7 @@ class NewsDetailScreen extends StatelessWidget { Widget featuredImage(NewsModel news) { if (news.image != null) { return CachedNetworkImage( - imageUrl: news.image!, + imageUrl: selectImageVariant(news.image!, 'wide'), ); } return Image.asset(getPlaceholderImage(news.id)); diff --git a/lib/features/news/utils/utils.dart b/lib/features/news/utils/utils.dart index 08ae5b88..e8ed53a3 100644 --- a/lib/features/news/utils/utils.dart +++ b/lib/features/news/utils/utils.dart @@ -24,3 +24,12 @@ bool isCustomFilterSelected( String getPlaceholderImage(String id) { return 'assets/graphics/placeholders/placeholder_${int.parse(id) % 3 + 1}.jpg'; } + +String selectImageVariant(ImageSrcSet image, String type) { + for (var variant in image.srcset) { + if (variant.type == type) { + return variant.url; + } + } + return image.original.url; +} diff --git a/lib/features/news/widgets/news_card.dart b/lib/features/news/widgets/news_card.dart index 06a8a5ed..67a700de 100644 --- a/lib/features/news/widgets/news_card.dart +++ b/lib/features/news/widgets/news_card.dart @@ -137,7 +137,9 @@ class NewsCard extends StatelessWidget { DecorationImage featuredImage(NewsModel news) { return DecorationImage( - image: news.image != null ? CachedNetworkImageProvider(news.image!) : AssetImage(getPlaceholderImage(news.id)), + image: news.image != null + ? CachedNetworkImageProvider(selectImageVariant(news.image!, 'large')) + : AssetImage(getPlaceholderImage(news.id)), fit: BoxFit.fitWidth, ); }