From fe2abd911bfd2af2887bc0248d82104e2560d696 Mon Sep 17 00:00:00 2001 From: Francois Date: Mon, 4 Aug 2025 12:54:32 +0200 Subject: [PATCH 1/3] fix: reset NFT image on url change --- lib/views/nfts/common/widgets/nft_image.dart | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/views/nfts/common/widgets/nft_image.dart b/lib/views/nfts/common/widgets/nft_image.dart index 89de24bf9f..0edba84974 100644 --- a/lib/views/nfts/common/widgets/nft_image.dart +++ b/lib/views/nfts/common/widgets/nft_image.dart @@ -27,6 +27,7 @@ class NftImage extends StatelessWidget { switch (type) { case NftImageType.image: return _NftImageWithFallback( + key: Key(imageUrl!), imageUrl: imageUrl!, ); case NftImageType.video: @@ -36,6 +37,7 @@ class NftImage extends StatelessWidget { return PlatformTuner.isNativeDesktop ? const _NftPlaceholder() : _NftVideoWithFallback( + key: Key(imageUrl!), videoUrl: imageUrl!, ); case NftImageType.placeholder: @@ -84,6 +86,16 @@ class _NftImageWithFallbackState extends State<_NftImageWithFallback> { }); } + @override + void didUpdateWidget(covariant _NftImageWithFallback oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.imageUrl != widget.imageUrl) { + final bloc = context.read(); + bloc.add(const NftImageResetRequested()); + bloc.add(NftImageLoadRequested(imageUrl: widget.imageUrl)); + } + } + @override Widget build(BuildContext context) { return BlocBuilder( @@ -201,6 +213,19 @@ class _NftVideoWithFallbackState extends State<_NftVideoWithFallback> { }); } + @override + void didUpdateWidget(covariant _NftVideoWithFallback oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.videoUrl != widget.videoUrl) { + _controller?.dispose(); + _controller = null; + currentVideoUrl = null; + final bloc = context.read(); + bloc.add(const NftImageResetRequested()); + bloc.add(NftImageLoadRequested(imageUrl: widget.videoUrl)); + } + } + @override Widget build(BuildContext context) { return BlocConsumer( From 68b352da83866e42c120c25991f50bff5329c339 Mon Sep 17 00:00:00 2001 From: Francois Date: Mon, 4 Aug 2025 12:57:14 +0200 Subject: [PATCH 2/3] refactor(nft-image): use ValueKey instead of Key Using Key(imageUrl!) creates a new Key object on every build. Consider using ValueKey(imageUrl!) instead, which is more semantically appropriate for value-based keys and may have better performance characteristics. Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- lib/views/nfts/common/widgets/nft_image.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/views/nfts/common/widgets/nft_image.dart b/lib/views/nfts/common/widgets/nft_image.dart index 0edba84974..227f94dc84 100644 --- a/lib/views/nfts/common/widgets/nft_image.dart +++ b/lib/views/nfts/common/widgets/nft_image.dart @@ -27,7 +27,7 @@ class NftImage extends StatelessWidget { switch (type) { case NftImageType.image: return _NftImageWithFallback( - key: Key(imageUrl!), + key: ValueKey(imageUrl!), imageUrl: imageUrl!, ); case NftImageType.video: From 8575e6c2c23bdd07b6a7f8cf62009fb0f37af7e3 Mon Sep 17 00:00:00 2001 From: Francois Date: Mon, 4 Aug 2025 12:58:03 +0200 Subject: [PATCH 3/3] refactor(nft-image): use ValueKey instead of Key Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- lib/views/nfts/common/widgets/nft_image.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/views/nfts/common/widgets/nft_image.dart b/lib/views/nfts/common/widgets/nft_image.dart index 227f94dc84..0d6f469267 100644 --- a/lib/views/nfts/common/widgets/nft_image.dart +++ b/lib/views/nfts/common/widgets/nft_image.dart @@ -37,7 +37,7 @@ class NftImage extends StatelessWidget { return PlatformTuner.isNativeDesktop ? const _NftPlaceholder() : _NftVideoWithFallback( - key: Key(imageUrl!), + key: ValueKey(imageUrl!), videoUrl: imageUrl!, ); case NftImageType.placeholder: