简单的页面关闭并返回数据给上一页的效果,在打开一个页面时,用异步的方法等待接收这个路由打开的方法的结果,这个结果将在下一个页面关闭时得到:
_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'),
),
)
],
),
)
);
}
}