0
点赞
收藏
分享

微信扫一扫

Flutter--替换路由、指定跳转路由


替换路由

注意路由配置和上篇文章配置相同

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
);
},
)
],
),
));
}
}

Flutter--替换路由、指定跳转路由_sed


举报

相关推荐

0 条评论