From 6273a9e68637b60fc8b7a1e87720739455e00637 Mon Sep 17 00:00:00 2001 From: Jacques Date: Tue, 18 Feb 2025 11:40:59 +0100 Subject: [PATCH] fix: add proper placeholder images to the local repository and a fallback image --- .../flutter_timeline/assets/error_image.png | Bin 0 -> 15820 bytes .../lib/src/models/timeline_options.dart | 2 ++ .../lib/src/widgets/timeline_post.dart | 29 +++++++++++++++--- .../lib/src/local/local_post_repository.dart | 8 ++--- .../local/local_timeline_user_repository.dart | 4 +-- 5 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 packages/flutter_timeline/assets/error_image.png diff --git a/packages/flutter_timeline/assets/error_image.png b/packages/flutter_timeline/assets/error_image.png new file mode 100644 index 0000000000000000000000000000000000000000..4e7e89f4505c51b5a8115fa0d8eca85b80e4c698 GIT binary patch literal 15820 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 qM-9yjsPStJ2>Gl%_{Xu>^Y { + bool imageError = false; + @override Widget build(BuildContext context) { var theme = Theme.of(context); @@ -110,10 +112,29 @@ class _TimelinePostWidgetState extends State { height: 250, decoration: BoxDecoration( borderRadius: BorderRadius.circular(8), - image: DecorationImage( - image: CachedNetworkImageProvider(widget.post.imageUrl!), - fit: BoxFit.cover, - ), + image: imageError + ? DecorationImage( + image: options.placeholderImageAssetUrl != null + ? AssetImage( + options.placeholderImageAssetUrl!, + ) + : const AssetImage( + "assets/error_image.png", + package: "flutter_timeline", + ), + fit: BoxFit.cover, + ) + : DecorationImage( + onError: (exception, stackTrace) { + setState(() { + imageError = true; + }); + }, + image: CachedNetworkImageProvider( + widget.post.imageUrl!, + ), + fit: BoxFit.cover, + ), ), ), if (post.image != null) diff --git a/packages/timeline_repository_interface/lib/src/local/local_post_repository.dart b/packages/timeline_repository_interface/lib/src/local/local_post_repository.dart index e61f8be..628d591 100644 --- a/packages/timeline_repository_interface/lib/src/local/local_post_repository.dart +++ b/packages/timeline_repository_interface/lib/src/local/local_post_repository.dart @@ -19,7 +19,7 @@ class LocalPostRepository implements PostRepositoryInterface { userId: "1", firstName: "Jane", lastName: "Doe", - imageUrl: "https://via.placeholder.com/150", + imageUrl: "https://placehold.co/150.png?text=Jane", ); final List _posts = List.generate( @@ -47,7 +47,7 @@ class LocalPostRepository implements PostRepositoryInterface { userId: "2", firstName: "John", lastName: "Doe", - imageUrl: "https://via.placeholder.com/150", + imageUrl: "https://placehold.co/150.png?text=John", ), ), ], @@ -56,9 +56,9 @@ class LocalPostRepository implements PostRepositoryInterface { userId: "1", firstName: "Jane", lastName: "Doe", - imageUrl: "https://via.placeholder.com/150", + imageUrl: "https://placehold.co/150.png?text=Jane", ), - imageUrl: "https://via.placeholder.com/1000", + imageUrl: "https://placehold.co/1000.png?text=$index", ), ); diff --git a/packages/timeline_repository_interface/lib/src/local/local_timeline_user_repository.dart b/packages/timeline_repository_interface/lib/src/local/local_timeline_user_repository.dart index 3b2853c..a1d2400 100644 --- a/packages/timeline_repository_interface/lib/src/local/local_timeline_user_repository.dart +++ b/packages/timeline_repository_interface/lib/src/local/local_timeline_user_repository.dart @@ -8,13 +8,13 @@ class LocalTimelineUserRepository implements TimelineUserRepositoryInterface { userId: "1", firstName: "john", lastName: "doe", - imageUrl: "https://via.placeholder.com/150", + imageUrl: "https://placehold.co/150.png?text=John", ), const TimelineUser( userId: "2", firstName: "jane", lastName: "doe", - imageUrl: "https://via.placeholder.com/150", + imageUrl: "https://placehold.co/150.png?text=Jane", ), ];