【问题标题】:Flutter how to execute function on back pressed颤振如何在后按时执行功能
【发布时间】:2020-05-02 07:57:18
【问题描述】:

当用户在我的flutter应用程序中按下后退按钮时我需要调用一个函数,在带有java的android中我可以使用以下代码来实现它

@Override
public void onBackPressed() {
//some function
}

flutter中有类似的东西吗?

【问题讨论】:

标签: flutter


【解决方案1】:

您正在寻找WillPopScope 小部件。

用法:

@override
Widget build(BuildContext context) {
    return WillPopScope(
        onWillPop: () async {
            onBackPressed(); // Action to perform on back pressed 
            return false;
        }, 
        child: Scaffold(),
    );
}

【讨论】:

    【解决方案2】:

    编辑:正如@Augustin 所指出的,当第二个屏幕被弹出并且不仅仅在按下后退按钮时,以下方式适用于所有情况。

    简而言之 - 您可以在 Navigator.push()

    上使用 .then()

    为什么?以及如何?

    主屏幕 - 您正在导航的屏幕

    第二屏幕 - 您正在导航的屏幕

    主屏幕上的导航器返回一个未来,当页面被弹出时,即当 Navigator.pop() 在第二个屏幕上运行时,该未来会“完成

    因此,Navigator.push()(主屏幕)上的 .then() 方法将在您的页面(第二个屏幕)弹出时运行。

    这样的—— 主屏幕

    floatingActionButton: FloatingActionButton(
            onPressed: () {
              Navigator.of(context).push(MaterialPageRoute(
                builder: (ctx) => SecondPage()
              )).then(
                (context) {
                  isAppleRed();
                }
              );
            },
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ), 
    

    isAppleRed() - 只是为了保持清楚:p

    bool isAppleRed() {
      print('Yes!');
      return true;
    }
    

    一旦按下 SECOND SCREEN 上的返回按钮,.then 块内的代码就会运行。

    希望对你有任何帮助:)

    【讨论】:

    • 当您使用某些代码或使用AppBar 按钮进行导航时,它也会运行。这与 android 硬件后退按钮没有严格的关系。
    • 感谢您的意见。我从来不知道他严格指的是后退按钮,而不仅仅是导航回来。我想我错过了那个后退按钮术语。在我的回答开始时提到这一点。
    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 2021-06-02
    • 2021-12-27
    • 2020-09-25
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多