上一篇已經(jīng)學(xué)會(huì)了跳轉(zhuǎn)時(shí)傳值救崔,那么如果跳轉(zhuǎn)后返回參數(shù)如何實(shí)現(xiàn)呢旬蟋?類似Android中的startActivityForResult();
示例
直接上代碼:
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
title: '頁面跳轉(zhuǎn)返回?cái)?shù)據(jù)',
home: FirstPage(),
));
}
class FirstPage 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: () {
_navigator2Second(context);
},
child: Text('跳轉(zhuǎn)到第二頁'),
);
}
_navigator2Second(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(
children: <Widget>[
RaisedButton(
onPressed: () {
Navigator.pop(context, '我是來自第二頁的No.1');
},
child: Text('我是來自第二頁的No.1'),
),
RaisedButton(
onPressed: () {
Navigator.pop(context, '我是來自第二頁的No.2');
},
child: Text('我是來自第二頁的No.2'),
)
],
),
),
);
}
}
異步請求個(gè)等待
Dart中的異步請求和等待使用async...await就可以實(shí)現(xiàn)抡砂。
_navigator2Second(BuildContext context) async {
final result = await Navigator.push(
context, MaterialPageRoute(builder: (context) => SecondPage()));
Scaffold.of(context).showSnackBar(SnackBar(content: Text('$result')));
}
跳轉(zhuǎn)到第二個(gè)頁面的方法是異步方法,result
是等待第二個(gè)頁面的返回值;
SnackBar的使用
SnackBar
是用戶操作后检眯,顯示提示信息的一個(gè)控件凿叠,類似Tost
涩笤,會(huì)自動(dòng)隱藏。SnackBar
是以Scaffold
的showSnackBar
方法來進(jìn)行顯示的盒件。
Scaffold.of(context).showSnackBar(SnackBar(content: Text('$result')));
返回?cái)?shù)據(jù)的方式
第二個(gè)頁面返回?cái)?shù)據(jù)的方式就是使用Navigator.pop(context, '我是來自第二頁的No.2');
比之前的使用多了一個(gè)參數(shù)蹬碧。