Flutter 界面传值

2019-04-19  本文已影响0人  我不是小白是真白

从前往后传值

假设从 A 页面跳到 B 页面, 将信息从A 传到B,

通过Navigation.push

B中有个name字段,

 const TwoWidget({Key key, this.name}) : super(key: key);

声明的时候将信息 添加进去,
通过

 Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
              TwoWidget widget = TwoWidget(name: "祝化林",);
              return widget;
            }));

将信息传到B界面

从后往前传值

静态路由从后往前传值

静态路由不能从前向后传值,只能从前往后,需要两步,首先注册,在routes中注册路由,
假设,从A 跳转到B,从B 返回A的时候进行传值,

 MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter实例'),
      routes: <String, WidgetBuilder> {
        // 这里可以定义静态路由,不能传递参数
        '/router/second': (_) => new SecondPage(),
        '/router/home': (_) => new RouterHomePage(),
      },
    );

action 事件中调用路由, 传的值在 then 后面,是个 Future,这边通过一个弹框,将结果显示出来,

Navigator.pushNamed(context, 'twoWidget').then((name) {
              show(context, name);
            });

在B中pop回去的时候, pop 后面即为传的值.

Navigator.of(context).pop('***');

动态路由从后往前传值

场景同静态路由一样,
在从A跳转到B的时候,使用 then,接收B中传来的值,B中传值方法不变

Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
              TwoWidget widget = TwoWidget();
              return widget;
            })).then((name){
              show(context, name);
            });

show 为显示一个弹框

show(BuildContext context,String name){
    showDialog(
      context: context,
      builder: (BuildContext context){
        return new SimpleDialog(
          title: Text(name),
          children: <Widget>[
            new SimpleDialogOption(
              child: new Text('确定'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }

上一篇下一篇

猜你喜欢

热点阅读