Flutter基础学习 18-19 页面跳转并返回数据

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

        前面学了页面跳转后,当我们返回页面时返回结果到上一个页面(也就是父页面)。这样的场景经常用于,这里我们去子页面选择了一项选项,然后把选择的结果返回给父级页面。

Demo功能:这里要作的例子是这样的,要去找小姐姐,当进入房间后,找到自己喜欢的小姐姐,然后小姐姐给了我们微信,我们这时候就在主页面显示出选择的小姐姐微信。

知识点:

一、异步请求和等待

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

//定义一个跳转到目标界面的“内部”方法,使用异步请求的方式(等数据传递回来之后,再显示传递的数据)
  _navigateToXiaoJieJie(BuildContext context) async{
    final result=await Navigator.push(context, MaterialPageRoute(//等待数据传回来
      builder: (context)=>XiaoJieJie()
    ));
    Scaffold.of(context).showSnackBar(SnackBar(content:Text('$result')));//显示数据
  }

二、SnackBar的使用

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

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

三、返回数据的方式

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

Navigator.pop(context,'我是一号小姐姐,微信是:jlcdlkcjklc');//第二个参数用于返回数据

 四、Demo代码如下

import 'package:flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      title: '页面跳转返回数据',
      home: FristPage(),
    )
  );
}
//首界面
class FristPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar:AppBar(title: Text('找小姐姐要微信'),),
      body: Center(
        child: RouteButton(),
      ),
    );
  }
}
//定义一个跳转目标界面的按钮类
class RouteButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return RaisedButton(
        onPressed: (){
          _navigateToXiaoJieJie(context);
        },
        child: Text('去找小姐姐'),
    );
  }
  //定义一个跳转到目标界面的“内部”方法,使用异步请求的方式(等数据传递回来之后,再显示传递的数据)
  _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 Scaffold(
      appBar: AppBar(title: Text('小姐姐界面'),),
      body: Center(
        child: Column(
          children: <Widget>[
            RaisedButton(
              child: Text('一号小姐姐'),
              onPressed: (){
                Navigator.pop(context,'我是一号小姐姐,微信是:jlcdlkcjklc');//第二个参数用于返回数据
              },
            ),
             RaisedButton(
              child: Text('二号小姐姐'),
              onPressed: (){
                Navigator.pop(context,'我是二号小姐姐,微信是:jjdkshfjds');
              },
            ),
          ],
        ),
      ),
    );
  }
}

五、运行效果

猜你喜欢

转载自blog.csdn.net/dpl12/article/details/93775956