From 7bdb9f7eeb9eaac4e63ece88a65c6e4d609a3e3a Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Mon, 26 Oct 2026 16:20:31 -0500 Subject: [PATCH 1/2] [vector_math] Fix out of band analysis failure --- packages/vector_math/CHANGELOG.md | 4 ++++ .../filters/transform_filter.dart | 4 +--- packages/vector_math/pubspec.yaml | 2 +- packages/vector_math/test/geometry_test.dart | 14 ++++++++++++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/vector_math/CHANGELOG.md b/packages/vector_math/CHANGELOG.md index 4ba08dc6..d1de30a6 100644 --- a/packages/vector_math/CHANGELOG.md +++ b/packages/vector_math/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.4.4 + +* Replaces dynamic multiplication in `TransformFilter.filterInplace` with `Matrix4.transformed3` to fix an analyzer error on newer Dart SDKs. + ## 2.4.3 * Documents the public `CircleGenerator` API. diff --git a/packages/vector_math/lib/src/vector_math_geometry/filters/transform_filter.dart b/packages/vector_math/lib/src/vector_math_geometry/filters/transform_filter.dart index d0d5d431..0b644fe1 100644 --- a/packages/vector_math/lib/src/vector_math_geometry/filters/transform_filter.dart +++ b/packages/vector_math/lib/src/vector_math_geometry/filters/transform_filter.dart @@ -20,9 +20,7 @@ class TransformFilter extends InplaceGeometryFilter { final VectorList? position = mesh.getViewForAttrib('POSITION'); if (position is Vector3List) { for (var i = 0; i < position.length; ++i) { - // multiplication always returns Vector3 here - // ignore: invalid_assignment - position[i] = transform * position[i]; + position[i] = transform.transformed3(position[i]); } } } diff --git a/packages/vector_math/pubspec.yaml b/packages/vector_math/pubspec.yaml index fa38b2ed..21624bc1 100644 --- a/packages/vector_math/pubspec.yaml +++ b/packages/vector_math/pubspec.yaml @@ -5,7 +5,7 @@ name: vector_math description: A vector math library for 2D and 3D applications, supporting 2D, 3D, and 4D matrices. repository: https://github.com/flutter/core-packages/tree/main/packages/vector_math issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+vector_math%22 -version: 2.4.3 +version: 2.4.4 environment: sdk: ^3.10.0 diff --git a/packages/vector_math/test/geometry_test.dart b/packages/vector_math/test/geometry_test.dart index 32fabb55..acf99cd1 100644 --- a/packages/vector_math/test/geometry_test.dart +++ b/packages/vector_math/test/geometry_test.dart @@ -84,6 +84,20 @@ void testTransformFilter() { expect(position.storage[1].abs(), equals(2.0)); expect(position.storage[2].abs(), equals(2.0)); } + + // Verify full affine transform (translation + per-axis scale). + final mesh = MeshGeometry(2, [VertexAttrib('POSITION', 3, 'float')]); + final meshPositions = mesh.getViewForAttrib('POSITION')! as Vector3List; + meshPositions[0] = Vector3(1.0, 2.0, 3.0); + meshPositions[1] = Vector3(-4.0, 0.5, 2.0); + + final affine = Matrix4.identity() + ..translateByDouble(10.0, -5.0, 2.0, 1.0) + ..scaleByDouble(2.0, 3.0, 0.5, 1.0); + TransformFilter(affine).filterInplace(mesh); + + relativeTest(meshPositions[0], Vector3(12.0, 1.0, 3.5)); + relativeTest(meshPositions[1], Vector3(2.0, -3.5, 3.0)); } void testFlatShadeFilter() { From c7a042fbeb8bce690cb11ef159b8ebecafdc0837 Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Mon, 26 Oct 2026 17:03:30 -0500 Subject: [PATCH 2/2] Use Matrix4.transform3 to avoid extra Vector3 copy --- packages/vector_math/CHANGELOG.md | 2 +- .../lib/src/vector_math_geometry/filters/transform_filter.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vector_math/CHANGELOG.md b/packages/vector_math/CHANGELOG.md index d1de30a6..bff8ac07 100644 --- a/packages/vector_math/CHANGELOG.md +++ b/packages/vector_math/CHANGELOG.md @@ -1,6 +1,6 @@ ## 2.4.4 -* Replaces dynamic multiplication in `TransformFilter.filterInplace` with `Matrix4.transformed3` to fix an analyzer error on newer Dart SDKs. +* Replaces dynamic multiplication in `TransformFilter.filterInplace` with `Matrix4.transform3` to fix an analyzer error on newer Dart SDKs. ## 2.4.3 diff --git a/packages/vector_math/lib/src/vector_math_geometry/filters/transform_filter.dart b/packages/vector_math/lib/src/vector_math_geometry/filters/transform_filter.dart index 0b644fe1..bcf90736 100644 --- a/packages/vector_math/lib/src/vector_math_geometry/filters/transform_filter.dart +++ b/packages/vector_math/lib/src/vector_math_geometry/filters/transform_filter.dart @@ -20,7 +20,7 @@ class TransformFilter extends InplaceGeometryFilter { final VectorList? position = mesh.getViewForAttrib('POSITION'); if (position is Vector3List) { for (var i = 0; i < position.length; ++i) { - position[i] = transform.transformed3(position[i]); + position[i] = transform.transform3(position[i]); } } }