赞
踩
在Flutter中,如何实现页面的跳转?
主要是两个步骤:
import 'package:flutter/material.dart'; void main() => runApp(new Main()); class Main extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: "页面一", ///注册路由表 routes: { /// '/'是特殊地址,第一个页面 "/": (context) => PageOne(), "/pageTwo": (context) => PageTwo(), }, ); } } class PageOne extends StatelessWidget { ///此处context为MaterialApp下的context @override Widget build(BuildContext context) { return new Scaffold( appBar: AppBar(title: Text("第一个页面"),), body: RaisedButton(onPressed: () async { ///获取第二个页面返回的数据 相当于Activity 的onActivityResult var pushNamed = await Navigator.pushNamed(context, "/pageTwo"); debugPrint(pushNamed); }, child: Text("点我跳转"),), ); } } class PageTwo extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( appBar: AppBar(title: Text("第二个页面"),), body: RaisedButton(onPressed: () { //路由pop弹出,结束页面 Navigator.pop(context, "结束返回"); }, child: Text("我是第二个页面"),) ); } }
import 'package:flutter/material.dart'; void main() => runApp(new MainPage()); class MainPage extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: "页面一", home: new PageOne(), ); } } class PageOne extends StatelessWidget { ///此处context为MaterialApp下的context @override Widget build(BuildContext context) { return new Scaffold( appBar: AppBar(title: Text("第一个页面"),), body: RaisedButton(onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (_) { return PageTwo(); })); }, child: Text("点我跳转"),), ); } } class PageTwo extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( appBar: AppBar(title: Text("第二个页面"),), body: Text("我是第二个页面"), ); } }
常用的方法及其作用,根据自己的需求选择性的使用
方法 | 作用 |
---|---|
pushNamed | 按路由名字路由入栈 |
pushReplacementNamed | 按路由名字替换当前路由栈 |
popAndPushNamed | 将当前路线从导航器中弹出,并在其中推入已命名的路由位置 |
pushNamedAndRemoveUntil | 按路由名称将具有给定名称的路由推入导航器,然后删除所有 |
push | 直接路由入栈 |
pushReplacement | 替换当前路由栈 |
pushAndRemoveUntil | 将具有给定名称的路由推入导航器,然后删除所有 |
replace | 用新路由替换导航器上的路由 |
replaceRouteBelow | 用新路由替换导航器上的路由。 路由是替换为给定anchorRoute下面的那个 |
canPop | 导航器是否可以弹出 |
maybePop | 导航器是否可以弹出,可以的话弹出 |
pop | 弹出路由 |
popUntil | 一直弹出直到指定路由 |
removeRoute | 删除指定路由 |
removeRouteBelow | 立即从导航器中删除一条路由,然后[Route.dispose]的要替换的路线是给定的“ anchorRoute”下方的路线。 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。