Flutter页面跳转返回数据

Dart中的异步请求和等待和ES6中的方法很像,直接使用async...await就可以实现。

核心代码:

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

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

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

示例:

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: RouteButton(),
        )
    );
  }
}

//跳转的Button
class RouteButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      onPressed:(){
        _navigateToAddress(context);
      },
      child: Text('选择地址'),
    );
  }

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

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

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

class Address 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,'地址一:北京');
                },
              ) ,
              RaisedButton(
                child: Text('地址二'),
                onPressed: (){
                  Navigator.pop(context,'地址二:上海');
                },
              ) ,
            ],
          )
      ) ,
    );
  }
}
原文地址:https://www.cnblogs.com/loaderman/p/11250889.html