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

在这里插入图片描述

发布了175 篇原创文章 · 获赞 56 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_39424143/article/details/104761022