FluentSpinnerMotion class abstract final

The spinner's two concurrent animations, transcribed rather than invented.

A spinner is the only Fluent component whose motion is a looping keyframe animation instead of a state transition, so it cannot go through FluentAnimatedStyle. It gets a raw AnimationController instead — and therefore has to honour MediaQuery.disableAnimationsOf itself, which FluentSpinner does by never starting the controller and painting FluentSpinnerPose.resting.

Both animations run for the same 1.5s, which is why one controller drives both.

Where the numbers come from

rotation and tail are upstream's spinner and spinner-tail @keyframes. Figma's .SpinnerBase set appears to encode the tail keyframes as its <size> 01/02/03 variants, but all four variants in each size group carry identical arc geometry — so the Figma file records the keyframes' existence and nothing else. The values below are upstream's; doc/token-divergences.md has the note.

Properties

hashCode int
The hash code for this object.
no setterinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() String
A string representation of this object.
inherited

Operators

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

Constants

restingTailSweep → const double
The tail as Figma draws it standing still: a quarter arc starting at 3 o'clock.
rotation → const FluentMotionSpec
The whole ring turning once. Linear, so the rotation reads as constant.
tail → const FluentMotionSpec
The tail growing and travelling along the track.
tailKeyframes → const List<FluentSpinnerTailKeyframe>
The three keyframes of tail, at 0%, 50% and 100% of the cycle.