Flutter——路由管理

Posted wzj_what_why_how

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter——路由管理相关的知识,希望对你有一定的参考价值。

路由管理

  • 路由(Route)在移动开发中通常指页面(Page),这跟 Web 开发中单页应用的 Route 概念意义是相同的,Route 在 android中 通常指一个 Activity,在 ios 中指一个 ViewController。
  • 所谓路由管理,就是管理页面之间如何跳转,通常也可被称为导航管理。
  • Flutter 中的路由管理和原生开发类似,无论是 Android 还是 iOS,导航管理都会维护一个路由栈,路由入栈(push)操作对应打开一个新页面,路由出栈(pop)操作对应页面关闭操作,而路由管理主要是指如何来管理路由栈。

MaterialPageRoute

  • MaterialPageRoute继承自PageRoute类,PageRoute类是一个抽象类,表示占有整个屏幕空间的一个模态路由页面,它还定义了路由构建及切换时过渡动画的相关接口及属性。

  • MaterialPageRoute 是 Material组件库提供的组件,它可以针对不同平台,实现与平台页面切换动画风格一致的路由切换动画:

  • 对于 Android,当打开新页面时,新的页面会从屏幕底部滑动到屏幕顶部;当关闭页面时,当前页面会从屏幕顶部滑动到屏幕底部后消失,同时上一个页面会显示到屏幕上。

  • 对于 iOS,当打开页面时,新的页面会从屏幕右侧边缘一直滑动到屏幕左边,直到新页面全部显示到屏幕上,而上一个页面则会从当前屏幕滑动到屏幕左侧而消失;当关闭页面时,正好相反,当前页面会从屏幕右侧滑出,同时上一个页面会从屏幕左侧滑入。

    MaterialPageRoute(
      WidgetBuilder builder, // 是一个WidgetBuilder类型的回调函数,它的作用是构建路由页面的具体内容,返回值是一个widget。我们通常要实现此回调,返回新路由的实例。
      RouteSettings settings,  //包含路由的配置信息,如路由名称、是否初始路由(首页)。
      bool maintainState = true, //默认情况下,当入栈一个新路由时,原来的路由仍然会被保存在内存中,如果想在路由没用的时候释放其所占用的所有资源,可以设置maintainState为 false。
      bool fullscreenDialog = false, //表示新的路由页面是否是一个全屏的模态对话框,在 iOS 中,如果fullscreenDialog为true,新页面将会从屏幕底部滑入(而不是水平方向)。
    )
    

Navigator

  • Navigator是一个路由管理的组件,它提供了打开和退出路由页方法。Navigator通过一个栈来管理活动路由集合。通常当前屏幕显示的页面就是栈顶的路由。
  • Navigator提供了一系列方法来管理路由栈,在此我们只介绍其最常用的两个方法:
    • Navigator.push:是跳转到下一个页面,它要接受两个参数一个是上下文context,另一个是要跳转的函数。
    • Navigator.pop:是返回到上一个页面,使用时传递一个context(上下文)参数,使用时要注意的是,你必须是有上级页面的,也就是说上级页面使用了Navigator.push。
    • Navigator 还有很多其它方法,如Navigator.replace、Navigator.popUntil等。

eg:

Navigator.push(context, MaterialPageRoute(
   builder: (context)=> SecondScreen())

);

Navigator.pop(context);

Navigator.pop(context, "wzj_what_why_how");

以上是关于Flutter——路由管理的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 2.x 混合栈路由管理

Flutter——路由管理

Flutter——路由管理

Flutter——路由管理

Flutter onGenerateRoute 路由管理

Flutter 中的路由