首页 > 解决方案 > Flutter - 设置用户导航返回时返回的结果

问题描述

调用时Navigator.pop()可以将结果传递到上一个屏幕。有没有办法设置结果,如果用户自己导航回来,结果仍然返回到上一页?

我可以将一个对象传递给第二页,然后对其进行修改,以便在第二页返回时第一页可以检查它,但我宁愿使用从导航器返回的结果,因为它更具可读性。

正如我在其他地方看到的那样,覆盖后退按钮的点击检测器不是一个可接受的解决方案,因为用户可能会以其他方式导航回来,例如滑动或按下 Android 后退按钮。

标签: flutter

解决方案


是的,您可以通过两种方式在屏幕之间传递数据。弹回时,data从第二个屏幕发送您希望这样发送的内容

RaisedButton(
  onPressed: () {
    // The Nope button returns "data" as the result.
    Navigator.pop(context, 'data');
  },
  child: Text('Nope!'),
);

并像这样在您的第一个屏幕中捕获结果

final result = await Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SecondScreen()),
  );

资源

对于用户可以通过按下后退按钮返回到上一个屏幕的另一个问题,您可以使用WillPopScope小部件包装您的第二个屏幕并提供onWillPop回调。这将覆盖第二个屏幕的弹出并执行回调,您可以在其中定义您希望从第二个屏幕返回的值。

@override
  Widget build(BuildContext context) {
    return WillPopScope(
      child: Scaffold(), // or your widget
      onWillPop: () {
        return Future.delayed(Duration(microseconds: 0), () {
          return Navigator.pop(context, "return-data");
        });
      },
    );
  }

推荐阅读