Skip to content

feat(transitions): modern transitions & motion (Material 3, Cupertino, WCAG & Pure Widgets example) - #11

Merged
3d24rd0 merged 2 commits into
mainfrom
feat/modern-transitions-and-motion
Sep 24, 2026
Merged

3d24rd0 merged 2 commits into
mainfrom
feat/modern-transitions-and-motion

Conversation

@3d24rd0

@3d24rd0 3d24rd0 commented Sep 23, 2026

Copy link
Copy Markdown
Member

📝 Overview

This PR implements version 0.3.0 of browser_router, adding comprehensive support for modern Material 3 Transitions, authentic iOS 16–18 Cupertino Motion, custom transition builders, platform adaptivity, zero-configuration WCAG reduced-motion accessibility, overlay hit-testing fixes, and a pure package:flutter/widgets.dart example app.


🚀 Key Features & Improvements

1. Modern Transitions Catalog (RouteTransition)

  • Material 3 Motion:
    • fade_through: Material 3 top-level tab/bar transition (scale 0.92 -> 1.0 with staggered fades).
    • shared_axis_x: Directional horizontal slide & fade for wizards/linear steps.
    • shared_axis_y: Directional vertical slide & fade for expansions.
    • shared_axis_z: Depth zoom (0.8 -> 1.0 / 1.0 -> 1.1) for drill-down flows.
    • scale: Smooth scale & fade transition for popup/modal dialogs.
  • Apple Cupertino iOS 16–18 Native Motion:
    • slide_cupertino: Authentic iOS push with left-edge gradient drop shadow and 1/3 horizontal parallax on the exiting route.
  • Web Micro-Transitions:
    • fade_scale: Snappy SPA zoom-fade (0.95 -> 1.0) with fast easing.

2. Custom Transition Builders (CustomBuildTransition)

  • Added CustomBuildTransition accepting any ({required Animation<double> animation, required Animation<double> secondaryAnimation, required Widget child}).
  • Added customTransition parameter to BrowserRoute, TraceRoute, PageTraceRoute, PopupTraceRoute, SwipeTraceRoute, and OverlayTraceRoute.

3. Platform Adaptivity & WCAG Accessibility

  • Browser.defaultAdaptiveTransition: Detects target platform automatically (Cupertino on iOS/macOS, Shared Axis X on Android/Fuchsia, Fade Scale on Web/Desktop).
  • Reduced Motion Support: Detects MediaQuery.disableAnimationsOf(context) and MediaQuery.accessibleNavigationOf(context) to bypass animations with zero configuration.
  • RepaintBoundary: Wrapped route transitions in RepaintBoundary to isolate repaint boundaries and prevent ancestor re-renders during motion.

4. Overlay & Banner Improvements

  • Banner Hit-Testing: Removed full-screen opaque gesture detector in Banner, allowing seamless pass-through scrolling and clicking on underlying screens.
  • Secondary Animation Alignment: Fixed OverlayModal secondary animation to return kAlwaysDismissedAnimation, avoiding visual translation / collision box misalignment.

5. Pure widgets.dart Example App

  • Refactored example/ to 100% pure package:flutter/widgets.dart, completely decoupled from Material/Cupertino libraries.
  • Added interactive persistent banner demonstration (duration: Duration.zero) with close button.

🧪 Quality & Verification

  • flutter analyze: 0 issues found across package and example.
  • flutter test: 99/99 tests passing with >95% overall test coverage.
  • Documentation: Updated README.md, CHANGELOG.md, and version bump to 0.3.0 in pubspec.yaml.

…gets example

- Add Material 3 motion transitions (fade_through, fade_scale, shared_axis_x/y/z, scale)
- Add authentic iOS 16-18 Cupertino transition (slide_cupertino with 1/3 parallax & edge shadow)
- Add CustomBuildTransition support across BrowserRoute and TraceRoute
- Add platform-adaptive transition default (Browser.defaultAdaptiveTransition)
- Add zero-config reduced motion / WCAG accessibility bypass
- Add RepaintBoundary rendering isolation to route transitions
- Fix Banner hit-testing pass-through and OverlayModal secondary animation
- Refactor example to 100% pure widgets.dart with interactive duration: Duration.zero banner
- Add comprehensive unit & widget tests (99 passing tests, >95% coverage)
@3d24rd0
3d24rd0 merged commit 2027b69 into main Sep 24, 2026
1 check passed
@3d24rd0
3d24rd0 deleted the feat/modern-transitions-and-motion branch September 24, 2026 07:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant