页面跳转并返回数据

2019-12-22  本文已影响0人  冰点雨

异步请求和等待

Dart中的异步请求和等待和ES6中的方法很像,直接使用async...await就可以实现。比如下面作了一个找小姐姐的方法,然后进行跳转,注意这时候是异步的。等待结果回来之后,我们再显示出来内容。具体代码如下:

 _navigateToXiaoJieJie(BuildContext context) async{ //async是启用异步方法

    final result = await Navigator.push(//等待
      context, 
      MaterialPageRoute(builder: (context)=> XiaoJieJie())
      );

      Scaffold.of(context).showSnackBar(SnackBar(content:Text('$result')));
  }
}

SnackBar的使用
SnackBar是用户操作后,显示提示信息的一个控件,类似Tost,会自动隐藏。SnackBar是以Scaffold的showSnackBar方法来进行显示的。

Scaffold.of(context).showSnackBar(SnackBar(content:Text('$result')));

返回数据的方式
返回数据其实是特别容易的,只要在返回时带第二个参数就可以了。

Navigator.pop(context,'xxxx');  //xxx就是返回的参数
14daa15e35f0599cb9d9f9ec300f8ec.png
08e5c3aa182b8411e00c18dd6499559.png
1a5e06731f97e397efe6e11a1875ebf.png

全部代码

import 'package:flutter/material.dart';



void main(){
  runApp(MaterialApp(
      title:'数据传递案例',
      home:FirstPage()
  ));
}

class FirstPage extends StatelessWidget{

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title:Text('找小姐姐要电话')),
        body:Center(
          child: GoButton(),
        )
    );
  }
}

//跳转的Button
class GoButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      child: Text('去找小姐姐'),
      onPressed: () {
        _navigateToXiaoJieJie(context);
      },
    );
  }

  
  _navigateToXiaoJieJie(BuildContext context) async {
    final result = await Navigator.push(//等待
        context,
        MaterialPageRoute(builder: (context) => XiaoJieJie())
    );
    
    Scaffold.of(context).showSnackBar(SnackBar(content: Text('$result')));
  }
}





class XiaoJieJie extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: AppBar(
          title:Text('我是小姐姐'),
        ),
        body:Center(
          child: Column(
            children: <Widget>[
              RaisedButton(
                child: Text('大长腿小姐姐'),
                onPressed: (){
                  Navigator.pop(context,'大长腿:1511008888');
                },
              ) ,
              RaisedButton(
                child: Text('小蛮腰小姐姐'),
                onPressed: (){
                  Navigator.pop(context,'大长腿:1511009999');
                },
              ) ,

            ],
          ),
        )
    );
  }
}
上一篇下一篇

猜你喜欢

热点阅读