Animate route that is going out / being replaced

后端 未结 1 1306
天涯浪人
天涯浪人 2021-01-28 11:30

I made simple fade page transition via following implementation:

return new PageRouteBuilder(
  opaque: true,
  pageBuilder: (BuildContext context, Animation<         


        
相关标签:
1条回答
  • 2021-01-28 12:35

    From Flutter source code annotations:

    /// Signature for the [PageRouteBuilder] function that builds the route's
    /// transitions.
    ///
    /// See [ModalRoute.buildTransitions] for complete definition of the parameters.
    typedef Widget RouteTransitionsBuilder(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child);
    

    and further:

      /// We've used [PageRouteBuilder] to demonstrate the [buildTransitions] method
      /// here. The body of an override of the [buildTransitions] method would be
      /// defined in the same way.
      ///
      /// When the [Navigator] pushes a route on the top of its stack, the
      /// [secondaryAnimation] can be used to define how the route that was on
      /// the top of the stack leaves the screen. Similarly when the topmost route
      /// is popped, the secondaryAnimation can be used to define how the route
      /// below it reappears on the screen. When the Navigator pushes a new route
      /// on the top of its stack, the old topmost route's secondaryAnimation
      /// runs from 0.0 to 1.0.  When the Navigator pops the topmost route, the
      /// secondaryAnimation for the route below it runs from 1.0 to 0.0.
      ///
      /// The example below adds a transition that's driven by the
      /// [secondaryAnimation]. When this route disappears because a new route has
      /// been pushed on top of it, it translates in the opposite direction of
      /// the new route. Likewise when the route is exposed because the topmost
      /// route has been popped off.
      ///
      /// ```dart
      ///   transitionsBuilder: (
      ///       BuildContext context,
      ///       Animation<double> animation,
      ///       Animation<double> secondaryAnimation,
      ///       Widget child,
      ///   ) {
      ///     return new SlideTransition(
      ///       position: new AlignmentTween(
      ///         begin: const Offset(0.0, 1.0),
      ///         end: Offset.zero,
      ///       ).animate(animation),
      ///       child: new SlideTransition(
      ///         position: new TweenOffset(
      ///           begin: Offset.zero,
      ///           end: const Offset(0.0, 1.0),
      ///         ).animate(secondaryAnimation),
      ///         child: child,
      ///       ),
      ///     );
      ///   }
      /// ```
      ///
      /// In practice the `secondaryAnimation` is used pretty rarely.
      ///
      /// The arguments to this method are as follows:
      ///
      ///  * `context`: The context in which the route is being built.
      ///  * [animation]: When the [Navigator] pushes a route on the top of its stack,
      ///    the new route's primary [animation] runs from 0.0 to 1.0. When the [Navigator]
      ///    pops the topmost route this animation runs from 1.0 to 0.0.
      ///  * [secondaryAnimation]: When the Navigator pushes a new route
      ///    on the top of its stack, the old topmost route's [secondaryAnimation]
      ///    runs from 0.0 to 1.0.  When the [Navigator] pops the topmost route, the
      ///    [secondaryAnimation] for the route below it runs from 1.0 to 0.0.
      ///  * `child`, the page contents.
      ///
      /// See also:
      ///
      ///  * [buildPage], which is used to describe the actual contents of the page,
      ///    and whose result is passed to the `child` argument of this method.
    

    My personal suggestion is when doc is vague or missing to search in the code ;)

    Best

    0 讨论(0)
提交回复
热议问题