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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wjxbless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值