From 91b9e6dd5a00d7e1de105ec8bde7a37e4177602c Mon Sep 17 00:00:00 2001 From: rajumuliyashiya <24muliyashiya@gmail.com> Date: Wed, 27 Nov 2024 23:04:46 +0530 Subject: [PATCH 1/9] [vector_graphics] Allow transition between placeholder and loaded image to have an animation #158857 --- .../example/assets/placeholder_image.png | Bin 0 -> 6535 bytes .../lib/src/vector_graphics.dart | 25 +++++++++++++++--- .../test/vector_graphics_test.dart | 25 ++++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 packages/vector_graphics/example/assets/placeholder_image.png diff --git a/packages/vector_graphics/example/assets/placeholder_image.png b/packages/vector_graphics/example/assets/placeholder_image.png new file mode 100644 index 0000000000000000000000000000000000000000..33d2f66aec857765468e79ada483753e4af153e7 GIT binary patch literal 6535 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 literal 0 HcmV?d00001 diff --git a/packages/vector_graphics/lib/src/vector_graphics.dart b/packages/vector_graphics/lib/src/vector_graphics.dart index c849a81dd09..d4022436a71 100644 --- a/packages/vector_graphics/lib/src/vector_graphics.dart +++ b/packages/vector_graphics/lib/src/vector_graphics.dart @@ -61,6 +61,7 @@ VectorGraphic createCompatVectorGraphic({ String? semanticsLabel, bool excludeFromSemantics = false, Clip clipBehavior = Clip.hardEdge, + Duration transitionDuration = const Duration(milliseconds: 500), WidgetBuilder? placeholderBuilder, VectorGraphicsErrorWidget? errorBuilder, ColorFilter? colorFilter, @@ -79,6 +80,7 @@ VectorGraphic createCompatVectorGraphic({ semanticsLabel: semanticsLabel, excludeFromSemantics: excludeFromSemantics, clipBehavior: clipBehavior, + transitionDuration: transitionDuration, placeholderBuilder: placeholderBuilder, errorBuilder: errorBuilder, colorFilter: colorFilter, @@ -118,6 +120,7 @@ class VectorGraphic extends StatefulWidget { this.semanticsLabel, this.excludeFromSemantics = false, this.clipBehavior = Clip.hardEdge, + this.transitionDuration = const Duration(milliseconds: 500), this.placeholderBuilder, this.errorBuilder, this.colorFilter, @@ -137,6 +140,7 @@ class VectorGraphic extends StatefulWidget { this.semanticsLabel, this.excludeFromSemantics = false, this.clipBehavior = Clip.hardEdge, + this.transitionDuration = const Duration(milliseconds: 500), this.placeholderBuilder, this.errorBuilder, this.colorFilter, @@ -218,6 +222,9 @@ class VectorGraphic extends StatefulWidget { /// A callback that fires if some exception happens during data acquisition or decoding. final VectorGraphicsErrorWidget? errorBuilder; + /// Set transition duration while switching from placeholder to url image + final Duration transitionDuration; + /// If provided, a color filter to apply to the vector graphic when painting. /// /// For example, `ColorFilter.mode(Colors.red, BlendMode.srcIn)` to give the vector @@ -510,11 +517,21 @@ class _VectorGraphicWidgetState extends State { _stackTrace ?? StackTrace.empty, ); } else { - child = widget.placeholderBuilder?.call(context) ?? - SizedBox( - width: widget.width, - height: widget.height, + child = widget.placeholderBuilder!=null? + AnimatedSwitcher( + duration: widget.transitionDuration, // User-defined duration + child: widget.placeholderBuilder!.call(context), + transitionBuilder: (Widget child, Animation animation) { + return FadeTransition( + opacity: animation, + child: child, ); + }, + ): + SizedBox( + width: widget.width, + height: widget.height, + ); } if (!widget.excludeFromSemantics) { diff --git a/packages/vector_graphics/test/vector_graphics_test.dart b/packages/vector_graphics/test/vector_graphics_test.dart index 8d8bc7fcb12..a4c0ab784a5 100644 --- a/packages/vector_graphics/test/vector_graphics_test.dart +++ b/packages/vector_graphics/test/vector_graphics_test.dart @@ -314,6 +314,31 @@ void main() { expect(debugLastTextDirection, TextDirection.ltr); }); + testWidgets('Test animated switch between placeholder and image', (WidgetTester tester) async { + final TestAssetBundle testBundle = TestAssetBundle(); + const Text placeholderWidget = Text('Placeholder'); + + await tester.pumpWidget(DefaultAssetBundle( + bundle: testBundle, + child: Directionality( + textDirection: TextDirection.rtl, + child: VectorGraphic( + loader: const AssetBytesLoader('bar.svg'), + placeholderBuilder: (BuildContext context) => placeholderWidget, + transitionDuration: const Duration(microseconds: 500), + ), + ), + )); + + expect(find.text('Placeholder'), findsOneWidget); + expect(find.byType(Container), findsNothing); // No image yet + + await tester.pumpAndSettle(const Duration(microseconds: 500)); + + expect(find.text('Placeholder'), findsNothing); + expect(testBundle.loadKeys, ['bar.svg']); + }); + testWidgets('Can exclude from semantics', (WidgetTester tester) async { final TestAssetBundle testBundle = TestAssetBundle(); From d2c51f938ad5bacc532ca5851f9517bf1d0392c9 Mon Sep 17 00:00:00 2001 From: rajumuliyashiya <24muliyashiya@gmail.com> Date: Wed, 27 Nov 2024 23:15:18 +0530 Subject: [PATCH 2/9] [vector_graphics] version pump --- packages/vector_graphics/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vector_graphics/pubspec.yaml b/packages/vector_graphics/pubspec.yaml index 8dd286357ba..56ebd206b28 100644 --- a/packages/vector_graphics/pubspec.yaml +++ b/packages/vector_graphics/pubspec.yaml @@ -2,7 +2,7 @@ name: vector_graphics description: A vector graphics rendering package for Flutter using a binary encoding. repository: https://github.com/flutter/packages/tree/main/packages/vector_graphics issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+vector_graphics%22 -version: 1.1.15 +version: 1.1.16 environment: sdk: ^3.4.0 From 07a6931326a00674887be0970120ee7c4658bca8 Mon Sep 17 00:00:00 2001 From: rajumuliyashiya <24muliyashiya@gmail.com> Date: Wed, 27 Nov 2024 23:19:42 +0530 Subject: [PATCH 3/9] [vector_graphics] removed un-used asset --- .../example/assets/placeholder_image.png | Bin 6535 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/vector_graphics/example/assets/placeholder_image.png diff --git a/packages/vector_graphics/example/assets/placeholder_image.png b/packages/vector_graphics/example/assets/placeholder_image.png deleted file mode 100644 index 33d2f66aec857765468e79ada483753e4af153e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6535 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 From ad64be429b44b820c7820ae188056617ebe06aa1 Mon Sep 17 00:00:00 2001 From: rajumuliyashiya <24muliyashiya@gmail.com> Date: Wed, 27 Nov 2024 23:35:40 +0530 Subject: [PATCH 4/9] [vector_graphics] change log added --- packages/vector_graphics/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/vector_graphics/CHANGELOG.md b/packages/vector_graphics/CHANGELOG.md index dd9cf3fd563..286ee24cff5 100644 --- a/packages/vector_graphics/CHANGELOG.md +++ b/packages/vector_graphics/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.16 + +* Allow transition between placeholder and loaded image to have an animation. + ## 1.1.15 * Updates error handling in VectorGraphicWidget to handle errors when the bytes of the graphic cannot be loaded. From 018b4547a0540a59cb678b9f1fcd94799cd50ca6 Mon Sep 17 00:00:00 2001 From: rajumuliyashiya <24muliyashiya@gmail.com> Date: Thu, 28 Nov 2024 00:13:27 +0530 Subject: [PATCH 5/9] [vector_graphics] re-format code --- .../lib/src/vector_graphics.dart | 30 +++++++------- .../test/vector_graphics_test.dart | 41 ++++++++++--------- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/packages/vector_graphics/lib/src/vector_graphics.dart b/packages/vector_graphics/lib/src/vector_graphics.dart index d4022436a71..33c2c2df025 100644 --- a/packages/vector_graphics/lib/src/vector_graphics.dart +++ b/packages/vector_graphics/lib/src/vector_graphics.dart @@ -517,21 +517,21 @@ class _VectorGraphicWidgetState extends State { _stackTrace ?? StackTrace.empty, ); } else { - child = widget.placeholderBuilder!=null? - AnimatedSwitcher( - duration: widget.transitionDuration, // User-defined duration - child: widget.placeholderBuilder!.call(context), - transitionBuilder: (Widget child, Animation animation) { - return FadeTransition( - opacity: animation, - child: child, - ); - }, - ): - SizedBox( - width: widget.width, - height: widget.height, - ); + child = widget.placeholderBuilder != null + ? AnimatedSwitcher( + duration: widget.transitionDuration, // User-defined duration + child: widget.placeholderBuilder!.call(context), + transitionBuilder: (Widget child, Animation animation) { + return FadeTransition( + opacity: animation, + child: child, + ); + }, + ) + : SizedBox( + width: widget.width, + height: widget.height, + ); } if (!widget.excludeFromSemantics) { diff --git a/packages/vector_graphics/test/vector_graphics_test.dart b/packages/vector_graphics/test/vector_graphics_test.dart index a4c0ab784a5..6777355e44b 100644 --- a/packages/vector_graphics/test/vector_graphics_test.dart +++ b/packages/vector_graphics/test/vector_graphics_test.dart @@ -314,30 +314,31 @@ void main() { expect(debugLastTextDirection, TextDirection.ltr); }); - testWidgets('Test animated switch between placeholder and image', (WidgetTester tester) async { - final TestAssetBundle testBundle = TestAssetBundle(); - const Text placeholderWidget = Text('Placeholder'); + testWidgets('Test animated switch between placeholder and image', + (WidgetTester tester) async { + final TestAssetBundle testBundle = TestAssetBundle(); + const Text placeholderWidget = Text('Placeholder'); - await tester.pumpWidget(DefaultAssetBundle( - bundle: testBundle, - child: Directionality( - textDirection: TextDirection.rtl, - child: VectorGraphic( - loader: const AssetBytesLoader('bar.svg'), - placeholderBuilder: (BuildContext context) => placeholderWidget, - transitionDuration: const Duration(microseconds: 500), - ), - ), - )); + await tester.pumpWidget(DefaultAssetBundle( + bundle: testBundle, + child: Directionality( + textDirection: TextDirection.rtl, + child: VectorGraphic( + loader: const AssetBytesLoader('bar.svg'), + placeholderBuilder: (BuildContext context) => placeholderWidget, + transitionDuration: const Duration(microseconds: 500), + ), + ), + )); - expect(find.text('Placeholder'), findsOneWidget); - expect(find.byType(Container), findsNothing); // No image yet + expect(find.text('Placeholder'), findsOneWidget); + expect(find.byType(Container), findsNothing); // No image yet - await tester.pumpAndSettle(const Duration(microseconds: 500)); + await tester.pumpAndSettle(const Duration(microseconds: 500)); - expect(find.text('Placeholder'), findsNothing); - expect(testBundle.loadKeys, ['bar.svg']); - }); + expect(find.text('Placeholder'), findsNothing); + expect(testBundle.loadKeys, ['bar.svg']); + }); testWidgets('Can exclude from semantics', (WidgetTester tester) async { final TestAssetBundle testBundle = TestAssetBundle(); From 56beb500bcbe403a657afe784231595acbe5565c Mon Sep 17 00:00:00 2001 From: rajumuliyashiya <24muliyashiya@gmail.com> Date: Sun, 22 Dec 2024 17:26:36 +0530 Subject: [PATCH 6/9] [vector_graphics] removed default Duration for animation --- packages/vector_graphics/lib/src/vector_graphics.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/vector_graphics/lib/src/vector_graphics.dart b/packages/vector_graphics/lib/src/vector_graphics.dart index 33c2c2df025..448a701fdf6 100644 --- a/packages/vector_graphics/lib/src/vector_graphics.dart +++ b/packages/vector_graphics/lib/src/vector_graphics.dart @@ -120,7 +120,7 @@ class VectorGraphic extends StatefulWidget { this.semanticsLabel, this.excludeFromSemantics = false, this.clipBehavior = Clip.hardEdge, - this.transitionDuration = const Duration(milliseconds: 500), + this.transitionDuration, this.placeholderBuilder, this.errorBuilder, this.colorFilter, @@ -140,7 +140,7 @@ class VectorGraphic extends StatefulWidget { this.semanticsLabel, this.excludeFromSemantics = false, this.clipBehavior = Clip.hardEdge, - this.transitionDuration = const Duration(milliseconds: 500), + this.transitionDuration, this.placeholderBuilder, this.errorBuilder, this.colorFilter, @@ -223,7 +223,7 @@ class VectorGraphic extends StatefulWidget { final VectorGraphicsErrorWidget? errorBuilder; /// Set transition duration while switching from placeholder to url image - final Duration transitionDuration; + final Duration? transitionDuration; /// If provided, a color filter to apply to the vector graphic when painting. /// @@ -519,7 +519,8 @@ class _VectorGraphicWidgetState extends State { } else { child = widget.placeholderBuilder != null ? AnimatedSwitcher( - duration: widget.transitionDuration, // User-defined duration + duration: widget.transitionDuration ?? + const Duration(milliseconds: 500), // User-defined duration child: widget.placeholderBuilder!.call(context), transitionBuilder: (Widget child, Animation animation) { return FadeTransition( From 67cb04758c13e444941824f182375987b7478037 Mon Sep 17 00:00:00 2001 From: rajumuliyashiya <24muliyashiya@gmail.com> Date: Fri, 17 Jan 2025 22:14:07 +0530 Subject: [PATCH 7/9] [vector_graphics] removed default Duration for animation --- .../lib/src/vector_graphics.dart | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/vector_graphics/lib/src/vector_graphics.dart b/packages/vector_graphics/lib/src/vector_graphics.dart index 448a701fdf6..af813a67712 100644 --- a/packages/vector_graphics/lib/src/vector_graphics.dart +++ b/packages/vector_graphics/lib/src/vector_graphics.dart @@ -518,17 +518,19 @@ class _VectorGraphicWidgetState extends State { ); } else { child = widget.placeholderBuilder != null - ? AnimatedSwitcher( - duration: widget.transitionDuration ?? - const Duration(milliseconds: 500), // User-defined duration - child: widget.placeholderBuilder!.call(context), - transitionBuilder: (Widget child, Animation animation) { - return FadeTransition( - opacity: animation, - child: child, - ); - }, - ) + ? widget.transitionDuration != null + ? AnimatedSwitcher( + duration: widget.transitionDuration!, + child: widget.placeholderBuilder!.call(context), + transitionBuilder: + (Widget child, Animation animation) { + return FadeTransition( + opacity: animation, + child: child, + ); + }, + ) + : widget.placeholderBuilder!.call(context) : SizedBox( width: widget.width, height: widget.height, From 65c0768b1af41138f6b8cd942f402ce7b741adc5 Mon Sep 17 00:00:00 2001 From: rajumuliyashiya <24muliyashiya@gmail.com> Date: Wed, 22 Jan 2025 23:40:02 +0530 Subject: [PATCH 8/9] [vector_graphics] removed default Duration for animation --- packages/vector_graphics/lib/src/vector_graphics.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vector_graphics/lib/src/vector_graphics.dart b/packages/vector_graphics/lib/src/vector_graphics.dart index af813a67712..ee33f1c2434 100644 --- a/packages/vector_graphics/lib/src/vector_graphics.dart +++ b/packages/vector_graphics/lib/src/vector_graphics.dart @@ -61,7 +61,7 @@ VectorGraphic createCompatVectorGraphic({ String? semanticsLabel, bool excludeFromSemantics = false, Clip clipBehavior = Clip.hardEdge, - Duration transitionDuration = const Duration(milliseconds: 500), + Duration? transitionDuration, WidgetBuilder? placeholderBuilder, VectorGraphicsErrorWidget? errorBuilder, ColorFilter? colorFilter, From 7bfb80fa78279ecd739c61c2906057e9644f053a Mon Sep 17 00:00:00 2001 From: rajumuliyashiya <24muliyashiya@gmail.com> Date: Sun, 2 Feb 2025 18:50:11 +0530 Subject: [PATCH 9/9] [vector_graphics] removed default Duration for animation --- packages/vector_graphics/CHANGELOG.md | 4 +++ .../lib/src/vector_graphics.dart | 36 +++++++++---------- packages/vector_graphics/pubspec.yaml | 2 +- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/packages/vector_graphics/CHANGELOG.md b/packages/vector_graphics/CHANGELOG.md index 4367b145118..a839b37646d 100644 --- a/packages/vector_graphics/CHANGELOG.md +++ b/packages/vector_graphics/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.18 + +* Allow transition between placeholder and loaded image to have an animation. + ## 1.1.17 * Reverts leaker tracker changes that caused runtime exceptions. diff --git a/packages/vector_graphics/lib/src/vector_graphics.dart b/packages/vector_graphics/lib/src/vector_graphics.dart index ee33f1c2434..f43990fdab8 100644 --- a/packages/vector_graphics/lib/src/vector_graphics.dart +++ b/packages/vector_graphics/lib/src/vector_graphics.dart @@ -517,24 +517,24 @@ class _VectorGraphicWidgetState extends State { _stackTrace ?? StackTrace.empty, ); } else { - child = widget.placeholderBuilder != null - ? widget.transitionDuration != null - ? AnimatedSwitcher( - duration: widget.transitionDuration!, - child: widget.placeholderBuilder!.call(context), - transitionBuilder: - (Widget child, Animation animation) { - return FadeTransition( - opacity: animation, - child: child, - ); - }, - ) - : widget.placeholderBuilder!.call(context) - : SizedBox( - width: widget.width, - height: widget.height, - ); + child = widget.placeholderBuilder?.call(context) ?? + SizedBox( + width: widget.width, + height: widget.height, + ); + } + + if (widget.transitionDuration != null) { + child = AnimatedSwitcher( + duration: widget.transitionDuration!, + child: child, + transitionBuilder: (Widget child, Animation animation) { + return FadeTransition( + opacity: animation, + child: child, + ); + }, + ); } if (!widget.excludeFromSemantics) { diff --git a/packages/vector_graphics/pubspec.yaml b/packages/vector_graphics/pubspec.yaml index 688f3bf93c5..67d3f0ed3d3 100644 --- a/packages/vector_graphics/pubspec.yaml +++ b/packages/vector_graphics/pubspec.yaml @@ -2,7 +2,7 @@ name: vector_graphics description: A vector graphics rendering package for Flutter using a binary encoding. repository: https://github.com/flutter/packages/tree/main/packages/vector_graphics issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+vector_graphics%22 -version: 1.1.17 +version: 1.1.18 environment: sdk: ^3.4.0