颤动:按下系统返回按钮时,将结果添加到导航器中



在下面的示例应用中,我有两个路由: HomeRouteOtherRoute。我希望OtherRoute从导航器弹出时始终返回结果。在此示例中,当按下OtherRoute中的RaisedButton时,可以执行此操作。但是,我还希望当按下后退按钮时返回结果。我知道我可以覆盖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!");
      })
    );
  }
}

OtherRoute中的WillPopScope和覆盖onWillPop方法包裹您的脚手架,如下所示:

@override
Widget build(BuildContext context) {
  return WillPopScope(
      //....
    ),
    onWillPop: () async {
      Navigator.pop(context, "Result!");
      return false;
    },
  );
}

最新更新