Flutter SearchDelegate“BACK”按钮不执行“close()”

Ani*_*nna 5 dart flutter

我有一个带有搜索按钮的 appBar,按下该按钮时会返回一个扩展 SearchDelegate 的自定义 DataSearch 类。

当我关闭搜索页面(从设备的返回按钮或小部件)时,我需要首先执行某个功能。但是,该功能仅从以下小部件执行,而不是在按下设备的“BACK”按钮时执行。

(下图)

这是我的代码:

class DataSearch extends SearchDelegate<String> {
  @override
  List<Widget> buildActions(BuildContext context) {
    // ...
  }

  @override
  Widget buildLeading(BuildContext context) {
    return IconButton(
      icon: Icon(Icons.arrow_back),
      onPressed: () {
        function_I_need_to_execute();
        close(context, null);
      },
    );
  }

  @override
  Widget buildResults(BuildContext context) {
    // ...
  }

  @override
  Widget buildSuggestions(BuildContext context) {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个,但没有改变:

@override
  void close(BuildContext context, String result) {
    super.close(context, result);
    function_I_need_to_execute();
  }
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用WillPopScope小部件,但我不确定它适合委托中的位置。

图像:

在此输入图像描述

Moh*_*mad 3

似乎使用 close 方法这是不可能的。

但是,您可以使用 showSearch 上的 .then 方法来执行此操作,因为 showSearch 是 Future。

then方法注册在future 完成时要调用的回调。

showSearch(context: context, delegate: SearchDelegate()).then((value) async {
  await doSomething();
});
Run Code Online (Sandbox Code Playgroud)