Flutter 如何在按下后执行功能

Vic*_*tiz 6 flutter

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

@Override
public void onBackPressed() {
//some function
}
Run Code Online (Sandbox Code Playgroud)

颤振中有类似的东西吗?

Abb*_*bas 12

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

简而言之 - 您可以在Navigator.push()上使用.then()

为什么?如何?

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

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

当弹出页面时,即当 Navigator.pop() 在第二个屏幕上运行时,主屏幕上的 Navigator 返回一个“完成”的 future

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

像这样的东西 - 主屏幕

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

isAppleRed() - 只是为了让事情清楚:p

bool isAppleRed() {
  print('Yes!');
  return true;
}
Run Code Online (Sandbox Code Playgroud)

一旦按下第二个屏幕上的后退按钮,.then 块内的代码就会运行。

希望这对您有任何帮助:)


Aug*_*n R 10

您正在寻找WillPopScope小部件。

用法 :

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