美文网首页
路由Router

路由Router

作者: elviswong_china | 来源:发表于2018-12-26 09:38 被阅读0次

    Router

    路由(页面跳转)

    Navigator.push(context,
                        new MaterialPageRoute(builder: (context) {
                          // MaterialPageRoute:实现PageRoute的一个路由
                          // 实现WidgetBuilder回调来实现跳转
                          return new NewRoute();
                        }));
    

    MaterialPageRoute构造函数

    MaterialPageRoute({
        @required this.builder,
        RouteSettings settings,
        this.maintainState = true,
        bool fullscreenDialog = false,
      })
    

    MaterialPageRoute

    MaterialPageRoute继承自PageRoute类,PageRoute类是一个抽象类,表示占有整个屏幕空间的一个模态路由页面,它还定义了路由构建及切换时过渡动画的相关接口及属性。MaterialPageRoute 是Material组件库的一个Widget,它可以针对不同平
    台,实现与平台页面切换动画风格一致的路由切换动画:
    对于Android,当打开新页面时,新的页面会从屏幕底部滑动到屏幕顶部;当关闭页面时,当前页面会从屏幕顶部滑动到屏幕底
    部后消失,同时上一个页面会显示到屏幕上。
    对于iOS,当打开页面时,新的页面会从屏幕右侧边缘一致滑动到屏幕左边,直到新页面全部显示到屏幕上,而上一个页面则会 *从当前屏幕滑动到屏幕左侧而消失;当关闭页面时,正好相反,当前页面会从屏幕右侧滑出,同时上一个页面会从屏幕左侧滑 *
    入。
    builder(WidgetBuilder) 是一个WidgetBuilder类型的回调函数,它的作用是构建路由页面的具体内容,返回值是一个widget。我们通常要实现此回调,返回新路由的实例。
    settings(RouteSettings) 包含路由的配置信息,如路由名称、是否初始路由(首页)。
    maintainState:默认情况下,当入栈一个新路由时,原来的路由仍然会被保存在内存中,如果想在路由没用的时候释放其所占用的所有资源,可以设置maintainState为false。
    fullscreenDialog表示新的路由页面是否是一个全屏的模态对话框,在iOS中,如果fullscreenDialog为true,新页面将会从屏幕底部滑入(而不是水平方向)。

    Navigator

    Navigator是一个路由管理的widget,它通过一个栈来管理一个路由widget集合。通常当前屏幕显示的页面就是栈顶的路由。Navigator提供了一系列方法来管理路由栈,在此我们只介绍其最常用的两个方法:

    Future push(BuildContext context, Route route)

    将给定的路由入栈(即打开新的页面),返回值是一个Future对象,用以接收新路由出栈(及关闭)时的返回数据。

    bool pop(BuildContext context, [ result ])

    将栈顶路由出栈,result为页面关闭时返回给上一个页面的数据。

    路由表

      Map<String,  WidgetBuidler> routes;
    

    注册路由表

    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      //注册路由表:Map<String,WidgetBuilder> 通过命名路由进行注册
      routes:{
       "new_page":(context)=>NewRoute(),
      } ,
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
    

    使用方式:

      Navigator.pushNamed(context, "new_page");
    

    命名路由的优缺点

    命名路由的最大优点是直观,我们可以通过语义化的字符串来管理路由。
    但其有一个明显的缺点:不能直接传递路由参数
    命名路由在注册路由表时传入参数,数据不能做变更
    普通路由可在每次跳转时根据当前value传入实时内容

    相关文章

      网友评论

          本文标题:路由Router

          本文链接:https://www.haomeiwen.com/subject/zqvclqtx.html