码迷,mamicode.com
首页 > 其他好文 > 详细

Flutter路由跳转父级页面向子页面传参及子页面向父级页面传参

时间:2019-06-17 10:46:33      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:const   返回   return   http   class   信息   nts   接收   之间   

Flutter中页面通过路由跳转传参主要分两种,一种是通过push()跳转时根据设定的参数进行传参,另一种是通过pop()返回时进行传参。

父级页面向子页面push()传参

假设从A页面跳到B页面可能需要携带参数userNameuserAge这两个参数,那么需要在B页面先设置这两个参数名;假设userName必须填而userAge非必需,那么可以通过设置@required其为必填选项:

class PageB extends StatefulWidget {
  @override
  final userName;
  final userAge;
  const PageB({Key key,@required this.userName,this.userAge}) : super(key: key);
  _PageBState createState() => _PageBState();
}

  

在A页面进行传参:

Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
  return PageB(
    userName: ‘灭霸‘,
    userAge: ‘18岁‘,
  );
})); 

  

子页面向父级页面pop()传参

pop()传参是当页面B返回到页面A时,页面A通过.then()接收:

Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
  return PageB(
    userName: ‘灭霸‘,
    userAge: ‘18岁‘,
  );
})).then((userInfo){
  setState(() {
    backResult = userInfo;
  });
}); 

  

在B页面中直接把需要传的参数放入pop()中即可:

String userInfo = ‘对不起,用户灭霸已阵亡!‘;
Navigator.of(context).pop(userInfo);

  

此时,我们已经完成了两边页面之间的一个交互,看一下最终效果:

技术图片

 

最后附上A、B页面源码

pageA页面

import ‘package:flutter/material.dart‘;
import ‘package:test_app/page_b.dart‘;

class PageA extends StatefulWidget {
  @override
  _PageAState createState() => _PageAState();
}

class _PageAState extends State<PageA> {
  String backResult;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(‘pageA‘,style: TextStyle(color: Colors.white,fontSize: 20),),
      ),
      body: Container(
        alignment: Alignment.center,
        child: Column(
          children: <Widget>[
            RaisedButton(
            child: Text(‘点击跳转B页面并传输用户信息‘),
            onPressed: (){
              Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
                return PageB(
                  userName: ‘灭霸‘,
                  userAge: ‘18岁‘,
                );
              })).then((userInfo){
                setState(() {
                  backResult = userInfo;
                });
              });
            }),
            Text(‘${backResult}‘),
          ],
        ),
      ),
    );
  }

}

  

pageB页面

import ‘package:flutter/material.dart‘;

class PageB extends StatefulWidget {
  @override
  final userName;
  final userAge;
  const PageB({Key key,@required this.userName,this.userAge}) : super(key: key);
  _PageBState createState() => _PageBState();
}

class _PageBState extends State<PageB> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(‘pageB‘,style: TextStyle(color: Colors.white,fontSize: 20),),
      ),
      body: Container(
        alignment: Alignment.center,
        child: Column(
          children: <Widget>[
            Text(‘用户名字:${widget.userName}‘),
            Text(‘用户年龄:${widget.userAge}‘),
            RaisedButton(
            child: Text(‘返回页面A并通知灭霸阵亡消息‘),
            onPressed: (){
              String userInfo = ‘对不起,用户灭霸已阵亡!‘;
              Navigator.of(context).pop(userInfo);
            }),
          ],
        ),
      ),
    );
  }

}

  

 

Flutter路由跳转父级页面向子页面传参及子页面向父级页面传参

标签:const   返回   return   http   class   信息   nts   接收   之间   

原文地址:https://www.cnblogs.com/gxsyj/p/11024726.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!