美文网首页
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