在下面的示例应用程序中,我有两条路线:HomeRoute
和OtherRoute
。我希望OtherRoute
在从导航器中弹出时始终返回结果。在此示例中,当按下RaisedButton
中的OtherRoute
时会执行此操作。但是,我也希望它在按下后退按钮时返回结果。我知道我可以覆盖AppBar
上的后退按钮,但是我也想覆盖Android上“系统”后退按钮的行为。
我知道我可以使用WillPopScope
来防止系统后退按钮弹出当前路线,但是我不希望这样做。如果可能的话,我希望系统后退按钮仍然能够弹出当前路线,只是包含结果。这可能吗?
这是我的示例应用程序:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Test',
home: Scaffold(
appBar: AppBar(title: Text("Home"),),
body: HomeRoute(),
),
);
}
}
class HomeRoute extends StatelessWidget{
@override
Widget build(BuildContext context) {
return RaisedButton(onPressed: (){
Navigator.push(context, MaterialPageRoute(builder: (context){
return OtherRoute();
})).then((result){
// I want result here to never be null
Scaffold.of(context).showSnackBar(SnackBar(content: Text("$result")));
});
});
}
}
class OtherRoute extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Other route"),),
body: RaisedButton(onPressed: (){
Navigator.pop(context, "Result!");
})
);
}
}
答案 0 :(得分:2)
在WillPopScope
中用OtherRoute
包裹脚手架,并覆盖onWillPop
方法,如下所示:
@override
Widget build(BuildContext context) {
return WillPopScope(
//....
),
onWillPop: () async {
Navigator.pop(context, "Result!");
return false;
},
);
}