flutter的页面跳转主要靠Navigator
首先要有一个页面栈的概念,而Navigator就是用来控制页面栈
跳转一个新页面就等于把一个页面入栈,返回上一页就是出栈
Navigator的可用方法有很多,这里主要记录常用的几个:
1.push方法
简简单单的入栈
Navigator.push(context, new MaterialPageRoute(
builder: (context) => new HomePage()
));
调用这个方法,就实现了跳转HomePage
2.pushNamed
跟push方法基本一致,区别就是事先声明了各种跳转,在后面只用声明的name就可以实现跳转
声明的方法如下:
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new SplashPage(),
routes: <String, WidgetBuilder>{"home_page": (_) => HomePage()});
}
}
routes: <String, WidgetBuilder>{"home_page": (_) => HomePage()});
这句就是声明
Navigator.pushNamed(context, 'home_page')
这样就可以直接跳转了
- pushReplacement
使用方法和push相同,区别就是这个方法不是简单的入栈,而是替换了栈顶页面
换句话说,假如有A、B、C三个页面,A->B 之后,调用该方法加入C,那么栈中只有A、C,B会被替换掉
pushReplacementNamed没有区别,只是用name调用了
- pushAndRemoveUntil
这个方法会先清空整个栈,再进行入栈,例如现在已经打开了ABCD四个页面,使用pushAndRemoveUntil加入E,那么ABCD均会被移除。
用在注销登录之类的功能上很合适。
pushNamedAndRemoveUntil同上。
5.pop
简单的出栈
Navigator.pop(context);
- maybePop
能出则出,不能出就没反应,可以防止把所有页面都给移除了
- popUntil
跟上面的区别就是,可以有选择的回到某个页面,同时清空其上的其它页面
例如ABCD,在D页面调用这个回B,那么C也会被移除,栈中只有AB
Navigator.popUntil(context, ModalRoute.withName('home_page'));
另附一个延时跳转源码,例如启动页之类:
import 'dart:async';
import 'package:flutter/material.dart';
class StartPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return StartPageState();
}
}
class StartPageState extends State<StartPage> {
@override
void initState() {
super.initState();
new Timer(const Duration(milliseconds: 1500), () {
try {
Navigator.pushNamed(context, 'home_page');
} catch (e) {
}
});
}
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(color: Colors.blue),
);
}
}
网友评论