美文网首页
Flutter学习记录-页面跳转

Flutter学习记录-页面跳转

作者: 薰舞空 | 来源:发表于2019-08-08 16:16 被阅读0次

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')

这样就可以直接跳转了

  1. pushReplacement

使用方法和push相同,区别就是这个方法不是简单的入栈,而是替换了栈顶页面
换句话说,假如有A、B、C三个页面,A->B 之后,调用该方法加入C,那么栈中只有A、C,B会被替换掉
pushReplacementNamed没有区别,只是用name调用了

  1. pushAndRemoveUntil

这个方法会先清空整个栈,再进行入栈,例如现在已经打开了ABCD四个页面,使用pushAndRemoveUntil加入E,那么ABCD均会被移除。
用在注销登录之类的功能上很合适。
pushNamedAndRemoveUntil同上。



5.pop

简单的出栈

Navigator.pop(context);
  1. maybePop

能出则出,不能出就没反应,可以防止把所有页面都给移除了

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

相关文章

网友评论

      本文标题:Flutter学习记录-页面跳转

      本文链接:https://www.haomeiwen.com/subject/tzixjctx.html