Skip to content

Route

Defines a single route in the route tree.

路由可以通过 children 嵌套,从而构建布局层级。带有 component 和 children 的路由会作为布局路由——其组件应调用 use_route_outlet 来渲染匹配到的子路由。

参数: path:相对路径片段。支持动态片段(:name)、可选片段(:name?)、通配片段(:name*)以及自定义正则约束(:name(\\d+))。无路径的布局路由为 None。 index:当为 True 时,此路由在父路径被精确匹配(没有后续片段)时命中。索引路由不能包含 path 或 children。 component:路由命中时要渲染的 @component 函数。 children:嵌套的子路由。 loader:可选的数据加载函数。路由命中时以匹配到的参数字典调用。结果可通过 use_route_loader_data 获取。 outlet:当为 True 且 manage_views=True 时,此路由会作为布局,在单个 View 内通过 use_route_outlet 包裹匹配到的子路由,而不是让每个子路由各自成为独立的 View。 modal:当为 True 且 manage_views=True 时,该路由的 View 会作为模态浮层渲染在现有路由栈之上,而不是替换它。路由的组件应在其返回的 View 上设置 fullscreen_dialog=True,以便 Flutter 渲染上滑弹出的界面和关闭(X)图标。放置位置决定了基础栈:

  • 在顶层声明:全局模态。基础栈会从 Router 看到的最后一个非模态位置重建(首次渲染时默认为 "/")。
  • 作为非模态路由的子路由声明:局部模态。基础栈是路由树中位于该模态之上的链路,因此仅凭 URL 即可实现深链接。

在弹出时,Router 会导航到非模态父路由的解析 URL——绝不是 views[-2].route——因此关闭模态始终是一次真实的、回到基础位置的导航。 recursive:当为 True 时,该路由可以把自身作为自己的后代来匹配——每消耗一个片段就产生一个 _RouteMatch。适用于深度无界的树形 URL(例如 /folder/a/b/c),其中每个片段都应成为独立的栈条目。在每个深度上,非递归的子路由都会在自身递归之前先尝试,因此更具体的同级路由(例如 example/:gp*)会优先于递归的 :slug。

属性 ​

名称类型默认值说明
path`strNone`None
indexboolFalse—
component`CallableNone`None
children`list[Route]None`None
loader`Callable[..., Any]None`None
outletboolFalse—
modalboolFalse—
recursiveboolFalse—

关注我,学习大模型、大数据、Python等热门技术。