美文网首页
Flutter路由导航

Flutter路由导航

作者: 土逗牛肉 | 来源:发表于2020-04-02 11:09 被阅读0次

    路由导航用来管理所有页面的跳转,需要在入口函数中定义跳转名称对应的目标页面,方法如下:

    class MyApp extends StatelessWidget {
     @override
     Widget build(BuildContext context) {
       return MaterialApp(
         home: _MyHomePage(),
         routes: {
         '/login': (BuildContext context) => LoginPage(),
         '/user': (BuildContext context) => UserPage(),
         },
       );
     }
    }
    

    一、push打开新页面

    pushNamed

    Navigator.of(context).pushNamed('/login');
    
    • 说明:每次打开新的页面都会在栈顶重新创建,并且旧页面不会关闭

    pushReplacementNamed

    Navigator.of(context).pushReplacementNamed('/login');
    
    • 说明:把当前页栈中的位置替换成目标页面

    pushReplacement

    Navigator.of(context).pushReplacement(context,new LoginPage());
    
    • 说明:和pushReplacementNamed方法类似,不同点在于此方法可以直接new要跳转的页面,而pushReplacementNamed方法需要在routes中定义要跳转的目标页面名称

    popAndPushNamed

    Navigator.popAndPushNamed(context, '/login');
    

    -说明:关闭当前页,打开目标页面

    pushNamedAndRemoveUntil

    1、Navigator.of(context).pushNamedAndRemoveUntil('/login', (Route<dynamic> route) => false);
    2、Navigator.of(context).pushNamedAndRemoveUntil('/login', ModalRoute.withName('/'));
    
    • 说明:
    • 方法1:关闭所有页面,打开新页面。 (Route<dynamic> route) => false是否要关闭完所有页面再打开目标页面
    • 方法2:/默认是主页,关闭除主页之外的其他页面,再打开目标页面

    pushAndRemoveUntil

    Navigator.pushAndRemoveUntil(context,MaterialPageRoute(builder: (BuildContext context) => LoginPage()),(Route<dynamic> route) => false,);
    
    • 说明:和pushNamedAndRemoveUntil方法类似,该方法不需要在入口routes中定义路由映射,直接通过new打开

    popUntil

    Navigator.popUntil(context, ModalRoute.withName('/login'));
    
    • 说明:有些应用场景下,用户可能不得不填写一个由三部分组成的长表单,该表单可能在移动应用程序的三个连续屏幕中显示。现在在表单的第三个页面,用户决定取消填写表单。用户单击Cancel,就会弹出所有之前的与表单相关的屏幕,并将用户带回主屏幕,从而丢失所有与表单相关的数据(在这种情况下,这是我们想要的)。我们不会在这里推出任何新东西,只是回到以前的路线。。

    二、pop

    maybePop

    Navigator.of(context).maybePop();
    

    -说明:会自动进行判断,如果当前页面pop后,会显示其他页面,不会出现问题,则将执行当前页面的pop操作 否则将不执行

    canPop

    bool canPop=Navigator.of(context).canPop();
    

    -说明:判断当前页面能否进行pop操作,并返回bool值

    pop

    Navigator.of(context).pop();
    

    -说明:直接pop当前页面

    传递参数

    MaterialPageRoute传参

    String params;
     Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context) => new mainPage(params)));
    //接收参数
    class mainPage extends StatelessWidget {
      final String userName;
      mainPage(this.userName);
      @override
      Widget build(BuildContext context) {
        print(userName);
    }
    

    带返回值的页面跳转

    String userName = "hhh";
    Navigator.push(
        context,
        new MaterialPageRoute(
            builder: (BuildContext context) =>
            new LoginPage(userName))).then((data){
              result =data;
              print(result);
    });
    //在LoginPage页面使用 Navigator.of(context).pop('params');
    

    相关文章

      网友评论

          本文标题:Flutter路由导航

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