typedef 可用于指定我们想要的函数签名
要匹配的特定功能。函数签名由
函数的参数(包括它们的类型)。返回类型不是
函数签名的一部分。它的语法如下。
在您的情况下, PageRouteBuilder 将作为参数:
- pageBuilder RoutePageBuilder typedef - 只是一个与 RoutePageBuilder typedef 签名匹配的函数。
- transitionsBuilder RouteTransitionsBuilder typedef - 与 pageBuilder 完全相同,但匹配 RouteTransitionsBuilder 签名。
这两个 typedef(RouteTransitionsBuilder 和 RoutePageBuilder)类似于单个方法的接口(OO 编程)。在这种情况下,typedef RoutePageBuilder 强制您将一个函数作为参数传递,该函数返回一个以上下文和两个动画作为参数的 Widget。
如果您想了解更多关于该函数中传递的参数的详细信息,您可以查看 Flutter 的文档,例如:
animation → Animation 驱动路线的动画
过渡和前一个路由的前向过渡。
只读,继承
或
secondaryAnimation → Animation 路线的动画
被推到这条路线的顶部。这个动画让这条路线
与推送的路线的入口和出口过渡相协调
这条路线的顶部。
只读,继承
PS:如果您浏览颤振代码并到达 routes.dart 文件,您可以找到记录这部分的 cmets:
/// Override this method to build the primary content of this route.
///
/// The arguments have the following meanings:
///
/// * `context`: The context in which the route is being built.
/// * [animation]: The animation for this route's transition. When entering,
/// the animation runs forward from 0.0 to 1.0. When exiting, this animation
/// runs backwards from 1.0 to 0.0.
/// * [secondaryAnimation]: The animation for the route being pushed on top of
/// this route. This animation lets this route coordinate with the entrance
/// and exit transition of routes pushed on top of this route.
///
/// This method is called when the route is first built, and rarely
/// thereafter. In particular, it is not called again when the route's state
/// changes. For a builder that is called every time the route's state
/// changes, consider [buildTransitions]. For widgets that change their
/// behavior when the route's state changes, consider [ModalRoute.of] to
/// obtain a reference to the route; this will cause the widget to be rebuilt
/// each time the route changes state.
///
/// In general, [buildPage] should be used to build the page contents, and
/// [buildTransitions] for the widgets that change as the page is brought in
/// and out of view. Avoid using [buildTransitions] for content that never
/// changes; building such content once from [buildPage] is more efficient.
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation);