替换路由
注意路由配置和上篇文章配置相同
import 'package:flutter/material.dart';
class MinePage extends StatefulWidget {
MinePage({Key key}) : super(key: key);
_MinePageState createState() => _MinePageState();
}
class _MinePageState extends State<MinePage> {
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Column(
children: <Widget>[
RaisedButton(
child: Text("跳转到登录页面"),
onPressed: (){
Navigator.pushNamed(context, '/login');
},
),
RaisedButton(
child: Text("跳转到注册页面"),
onPressed: (){
Navigator.pushNamed(context, '/registerFirst');
},
),
],
)
)
],
);
}
}
login页面(栈中弹出当前页面)
import 'package:flutter/material.dart';
class LoginPage extends StatelessWidget {
const LoginPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("登录")),
body: Center(
child: Column(
children: <Widget>[
SizedBox(
height: 40,
),
Text("登录页"),
RaisedButton(
child: Text("登录"),
onPressed: () {
// 登陆成功返回
Navigator.of(context).pop();
},
)
],
),
));
}
}
注册页面(替换路由实现)
import 'package:flutter/material.dart';
class RegisterFirstPage extends StatelessWidget {
const RegisterFirstPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("登录")),
body: Center(
child: Column(
children: <Widget>[
SizedBox(
height: 40,
),
Text("注册1"),
RaisedButton(
child: Text("下一步"),
onPressed: () {
// 此时跳转到第二个注册页,但是栈中还是存在第一个注册页,当点击返回时会返回到第一个注册页
Navigator.pushNamed(context, '/registerSecond');
// 替换路由,把当前路由(页面)替换成传入的页面(registerSecond)这样意味着栈中当前页面已经不存在了,可以从当前页面直接返回至根页面
// Navigator.of(context).pushReplacementNamed('/registerSecond');
},
)
],
),
));
}
}
置顶帖跳转路由
import 'package:flutter/material.dart';
import 'package:flutter_app/pages/tabs.dart';
class RegisterSecondPage extends StatelessWidget {
const RegisterSecondPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("登录")),
body: Center(
child: Column(
children: <Widget>[
SizedBox(
height: 40,
),
Text("完成"),
RaisedButton(
child: Text("确定"),
onPressed: () {
// 将栈中的所有路由置为空,并将指定路由放入栈中
Navigator.of(context).pushAndRemoveUntil(
// 直接跳转回根路由, 根路由为index=3
new MaterialPageRoute(builder: (context) => new Tabs(index:3)),
(route) => route == null
);
},
)
],
),
));
}
}