Mobile Animation
Priority: P1 (OPERATIONAL)
Timing Standards
| Duration | Range | Use Case | |----------|-------|----------| | Short | 100-150ms | Toggles, cell press | | Medium | 250-350ms | Navigation, modals | | Long | 400-600ms | Shared element, complex state |
Hard limit: Never exceed 600ms for any animation.
Workflow
- Choose duration from timing table based on interaction type.
- Select easing curve per platform —
Curves.fastOutSlowIn(Material) oreaseInOut(iOS). Never uselinear. - Animate GPU-friendly properties (
transform,opacity). Avoidwidth/heightwhich trigger layout. - Wire gestures using
onPan/interactivePopGesturefor fluid, interruptible UX. - Verify frame rate in profiler — target 60fps with no jank frames.
See implementation examples for Flutter and iOS animation patterns.
References
Anti-Patterns
- No linear easing: Feels robotic; always use platform-standard curves.
- No layout thrashing: Avoid animating properties that trigger layout (width, padding).
- No memory leaks: Always
dispose()AnimationControllers in Flutter; invalidate timers in iOS. - No blocking UI: Run heavy calculations outside animation frames.