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.