首页 > 建站教程 > APP开发,混合APP >  Flutter笔记64:flutter路由返回接受数据正文

Flutter笔记64:flutter路由返回接受数据

简单的页面关闭并返回数据给上一页的效果,在打开一个页面时,用异步的方法等待接收这个路由打开的方法的结果,这个结果将在下一个页面关闭时得到:
_navigatorToSecondPage(BuildContext context) async {
  //异步的方法接受第二个页面关闭时返回的数据
  final result = await Navigator.push(
    context,
    MaterialPageRoute(
      builder: (context) => SecondPage(),
    )
  );
  //将数据在底部弹出
  Scaffold.of(context).showSnackBar(SnackBar(content: Text('$result'),));
}
在第二个页面关闭时,将数据同时返回,这样第一个页面就能接收到:
Navigator.pop(context,'hi google');
下面时完整的代码:
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: '页面返回传递数据示例',
    home: FirstScreen(),
  ));
}

class FirstScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('第一个页面'),
      ),
      body: RouteButton(),
    );
  }
}

class RouteButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      onPressed: () {
        _navigatorToSecondPage(context);
      },
      child: Text('跳转到第二个页面'),
    );
  }

  _navigatorToSecondPage(BuildContext context) async {
    //异步的方法接受第二个页面关闭时返回的数据
    final result = await Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => SecondPage(),
      )
    );
    //将数据在底部弹出
    Scaffold.of(context).showSnackBar(SnackBar(content: Text('$result'),));
  }
}

class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('第二个页面'),
      ),
      body:Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Padding(
              padding: EdgeInsets.all(8.0),
              child: RaisedButton(
                onPressed: (){
                  //返回,并发送数据给上一页
                  Navigator.pop(context,'hi google');
                },
                child: Text('hi google'),
              ),
            ),
            Padding(
              padding: EdgeInsets.all(8.0),
              child: RaisedButton(
                onPressed: (){
                  //返回,并发送数据给上一页
                  Navigator.pop(context,'hi flutter');
                },
                child: Text('hi flutter'),
              ),
            )
          ],
        ),
      )
    );
  }
}