欢迎您光临深圳塔灯网络科技有限公司!
电话图标 余先生:13699882642

网站百科

为您解码网站建设的点点滴滴

flutter页面间跳转和销毁

发表日期:2018-11 文章编辑:小灯 浏览次数:10770

flutter页面间的跳转有两种方式,一种动态构建路由的方式,一种提前命名路由的方式。

构建路由方式

push方法:直接跳转到下个页面,可以传递参数

Navigator.of(context).push(

    new MaterialPageRoute(builder: (BuildContext context) {

//TextWdigetPage要跳转的页面

//title要传递的参数

      return TextWdigetPage(title: "传递的参数");

    }))

),

或者

Navigator.push(context,

    new MaterialPageRoute(builder: (BuildContext context) {

      return TextWdigetPage(title: "传递的参数");

    })

)

pushAndRemoveUntil方式:跳转到下个页面,并且销毁当前页面

//第一个小菜理解为上下文环境,

// 第二个参数为静态注册的对应的页面名称,

// 第三个参数为跳转后的操作,route == null 为销毁当前页面

Navigator.pushAndRemoveUntil(context,

    new MaterialPageRoute(builder: (BuildContext context) {

      return TextWdigetPage(title: "传递的参数");

    }), (route) => route == null

)

提前命名路由

不能传递参数,只能在mian.dart里面写死要跳转的路由协议

@override

Widget build(BuildContext context) {

  return MaterialApp(

    title: "flutter学习",

    home: Scaffold(

      appBar: AppBar(title: Text("flutter学习"),),

      body: ListView.builder(

          itemCount: list.length,

          itemBuilder: (context, position) {

            return HomeListItem(position, list[position], (index) =>

                Navigator.push(context,

                    new MaterialPageRoute(builder: (BuildContext context) {

                      return pageList[index];

                    }))

            );

          }),

    ),

    //不能传递参数,必须在main里面注册

    routes: {

      "listview_builder_page": (BuildContext context) =>

      new ListView_Builder_Page(),

      "listview_separated_page": (BuildContext context) =>

      new ListView_Separated_Page(),

    },

  );

}

调用时可以用以下方式:

Navigator.pushNamed(context, "listview_builder_page")

或者

Navigator.pushNamedAndRemoveUntil(

    context, "listview_builder_page", (router) => router == null)

),

页面的销毁:

//构建路由

//一个参数,为上下文环境,销毁当前页面

Navigator.pop(context);

//一个参数,第一个为上下文环境,第二个为要携带的参数,销毁当前页面

Navigator.pop(context, "携带参数");

//命名路由

Navigator.popAndPushNamed(context, 'listview_builder_page');

接收路由返回的参数:

//构建路由

Navigator.push(context,

    new MaterialPageRoute(builder: (BuildContext context) {

      return TextWdigetPage(title: "传递的参数");

    })

).then((Object result) {

      print("返回值:${result.toString()}");

})

Navigator.pushAndRemoveUntil(context,

    new MaterialPageRoute(builder: (BuildContext context) {

      return TextWdigetPage(title: "传递的参数");

    }), (route) => route == null

).then((Object result) {

     print("返回值:${result.toString()}");

})

命名路由

Navigator.pushNamed(context, "listview_builder_page").then((Object result) {

       print("返回值:${result.toString()}");

})



练习demo,链接https://gitee.com/xgljh/Flutter


本页内容由塔灯网络科技有限公司通过网络收集编辑所得,所有资料仅供用户学习参考,本站不拥有所有权,如您认为本网页中由涉嫌抄袭的内容,请及时与我们联系,并提供相关证据,工作人员会在5工作日内联系您,一经查实,本站立刻删除侵权内容。本文链接:http://dengtar.com/17571.html
相关APP开发
 八年  行业经验

多一份参考,总有益处

联系深圳网站公司塔灯网络,免费获得网站建设方案及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:余经理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.