flutter_search_bar插件onClose监听器

时间:2018-08-21 02:43:56

标签: dart flutter

我当前正在使用带有选项卡式页面的flutter_search_bar插件。由于我的价值观是动态变化的。我想知道是否有任何方法可以在程序包中添加侦听器以进行必要的更改。

插件在这里: https://pub.dartlang.org/flutter/packages?q=flutter_search_bar&api=0

更新:这就是我的代码现在的样子

  _NavigationState() {
    searchBar = new SearchBar(
      controller: controller,
      inBar: false,
      setState: setState,
      onSubmitted: onSubmit,
      onChanged: onChange,
      buildDefaultAppBar: buildAppBar,
      hintText: 'Search Book',
      closeOnSubmit: false,
      clearOnSubmit: true,
      onClosed: onClosed,
    );
  }

  void onClosed() {
    isSeaching = false;
    loadTabpages();
    setState(() {});
  }

1 个答案:

答案 0 :(得分:2)

您可以派生回购并进行更改:

https://github.com/ArcticZeroo/flutter-search-bar/blob/master/lib/src/flutter_search_bar_base.dart

在SearchBar类中添加此变量:

     /// Event triggered when the user close the search bar
      final VoidCallback onClosed;

将字段添加到构造函数中

      SearchBar(
          {@required this.setState,
          @required this.buildDefaultAppBar,
          this.onSubmitted,
          this.controller,
          this.hintText = 'Search',
          this.inBar = true,
          this.colorBackButton = true,
          this.closeOnSubmit = true,
          this.clearOnSubmit = true,
          this.showClearButton = true,
          this.onChanged,
          this.onClosed})        

第144行

将小部件设置为主导属性

         new IconButton(
                  icon: const BackButtonIcon(),
                  color: buttonColor,
                  tooltip: MaterialLocalizations.of(context).backButtonTooltip,
                  onPressed: () {
                    if (onClosed != null) {
                      onClosed();
                    }
                    Navigator.maybePop(context);
                  }),

使用侦听器:

    new SearchBar(
            inBar: true,
            setState: setState,
            showClearButton: false,
            clearOnSubmit: false,
            closeOnSubmit: false,
            onClosed: () {

            }), ...

更新为处理后退按钮

    return new AppBar(
          leading: WillPopScope(
            onWillPop: () {
              if (onClosed != null) {
                onClosed();
              }
              return Future.value(true);
            },
            child: new IconButton(
                icon: const BackButtonIcon(),
                color: buttonColor,
                tooltip: MaterialLocalizations.of(context).backButtonTooltip,
                onPressed: () {
                  if (onClosed != null) {
                    onClosed();
                  }
                  controller.clear();
                  Navigator.maybePop(context);
                }),
          ),

          ....