Transform2D class
This class describes a generic 2D transform, which is a combination of translations, rotations, reflections and scaling. These transforms are combined into a single matrix, that can be either applied to a canvas, composed with another transform, or used directly to convert coordinates.
The transform can be visualized as 2 reference frames: a "global" and a "local". At first, these two reference frames coincide. Then, the following sequence of transforms is applied:
 translation to point position;
 rotation by angle radians clockwise;
 scaling in X and Y directions by scale factors;
 final translation by offset, in local coordinates.
The class is optimized for repeated use: the transform matrix is cached and then recalculated only when the underlying properties change. Moreover, recalculation of the transform is postponed until the matrix is actually requested by the user. Thus, modifying multiple properties at once does not incur the penalty of unnecessary recalculations.
This class implements the ChangeNotifier API, allowing you to subscribe for notifications whenever the transform matrix changes. In addition, you can subscribe to get notified when individual components of the transform change: position, scale, and offset (but not angle).
 Inheritance

 Object
 ChangeNotifier
 Transform2D
Constructors
 Transform2D()
 Transform2D.copy(Transform2D other)

factory
Properties
 angle ↔ double

The rotation part of the transform. This represents rotation around
the position point in clockwise direction by angle radians. If
the angle is negative then the rotation is counterclockwise.
getter/setter pair
 angleDegrees ↔ double

Similar to angle, but uses degrees instead of radians.
getter/setter pair
 hashCode → int

The hash code for this object.
no setterinherited
 hasListeners → bool

Whether any listeners are currently registered.
no setterinherited
 hasReflection → bool

Whether the transform includes a reflection, i.e. it flips the orientation
of the coordinate system.
no setter
 isAxisAligned → bool

Whether the transform keeps horizontal (vertical) lines as horizontal
(vertical).
no setter
 isConformal → bool

Whether the transform preserves angles. A conformal transformation may
consist of a translation, rotation, and uniform scaling. A reflection is
not considered conformal.
no setter
 isTranslation → bool

Whether the transform represents a pure translation, i.e. a transform of
the form
(x, y) > (x + Δx, y + Δy)
.no setter  offset ↔ NotifyingVector2

Additional offset applied after all other transforms. Unlike other
transforms, this offset is applied in the local coordinate system.
For example, an offset of (1, 0) describes a shift by 1 unit along
the X axis, however, this shift is applied after that axis was
repositioned, rotated and scaled.
getter/setter pair
 position ↔ NotifyingVector2

The translation part of the transform. This translation is applied
relative to the global coordinate space.
getter/setter pair
 runtimeType → Type

A representation of the runtime type of the object.
no setterinherited
 scale ↔ NotifyingVector2

The scale part of the transform. The default scale factor is (1, 1),
a scale greater than 1 corresponds to expansion, and less than 1 is
contraction. A negative scale is also allowed, and it corresponds
to a mirror reflection around the corresponding axis.
Scale factors can be different for X and Y directions.
getter/setter pair
 transformMatrix → Matrix4

The total transformation matrix for the component. This matrix combines
translation, rotation, reflection and scale transforms into a single
entity. The matrix is cached and gets recalculated only as necessary.
no setter
 x ↔ double

X coordinate of the translation transform.
getter/setter pair
 y ↔ double

Y coordinate of the translation transform.
getter/setter pair
Methods

addListener(
VoidCallback listener) → void 
Register a closure to be called when the object changes.
inherited

clone(
) → Transform2D  Clone of this.

closeTo(
Transform2D other, {double tolerance = 1e10}) → bool 
Check whether this transform is equal to
other
, up to the giventolerance
. Setting tolerance to zero will check for exact equality. Transforms are considered equal if their rotation angles are the same or differ by a multiple of 2π, and if all other transform parameters: translation, scale, and offset are the same. 
dispose(
) → void 
Discards any resources used by the object. After this is called, the
object is not in a usable state and should be discarded (calls to
addListener will throw after the object is disposed).
inherited

flipHorizontally(
) → void  Flip the coordinate system horizontally.

flipVertically(
) → void  Flip the coordinate system vertically.

globalToLocal(
Vector2 point, {Vector2? output}) → Vector2 
Transform
point
from the global coordinate space into the local coordinates. Thus, this method performs the inverse of the current transform. 
localToGlobal(
Vector2 point, {Vector2? output}) → Vector2 
Transform
point
from local coordinates into the parent coordinate space. Effectively, this function applies the current transform topoint
. 
noSuchMethod(
Invocation invocation) → dynamic 
Invoked when a nonexistent method or property is accessed.
inherited

notifyListeners(
) → void 
Call all the registered listeners.
inherited

removeListener(
VoidCallback listener) → void 
Remove a previously registered closure from the list of closures that are
notified when the object changes.
inherited

setFrom(
Transform2D other) → void 
Set this to the values of the
other
Transform2D. 
toString(
) → String 
A string representation of this object.
inherited
Operators

operator ==(
Object other) → bool 
The equality operator.
inherited