getValuesSearchBox method

Widget getValuesSearchBox()

Implementation

Widget getValuesSearchBox() {
  AnythingSelectorOptions options = getOptions;

  bool isSearchable(text, i, e) {
    String itemName = itemDisplayName(i, e);
    return widget.searchableOnChanged?.call(this, text, i, e) ?? itemName.contains(text);
  }

  void onTextChanged(String text) {
    if (widget.values == null) {
      return;
    }
    widget.searchValues?.clear();
    List<dynamic> values = widget.values!;
    if (text.isEmpty) {
      widget.searchValues?.addAll(values);
    } else {
      for (int i = 0; i < values.length; i++) {
        dynamic e = values[i];
        if (isSearchable(text, i, e)) {
          widget.searchValues?.add(e);
        }
      }
    }
    searchValuesKey.update();
  }

  void onEventSearchTextChanged(String text) {
    if (widget.searchTextOnChanged != null) {
      widget.searchTextOnChanged?.call(this, text);
    } else {
      onTextChanged(text);
    }
  }

  Widget searchBoxBuilder() {
    TextEditingController controller = TextEditingController();
    return Container(
      padding: options.searchBoxPadding,
      child: CupertinoTextField(
        controller: controller,
        padding: options.searchPadding,
        decoration: options.searchDecoration,
        prefix: options.searchPrefixIcon,
        placeholder: options.searchPlaceHolder,
        suffixMode: OverlayVisibilityMode.editing,
        suffix: CcTapWidget(
          child: options.searchClearIcon,
          onTap: (state) {
            controller.clear();
            onEventSearchTextChanged(controller.text);
          },
        ),
        onChanged: (text) {
          onEventSearchTextChanged(text);
        },
      ),
    );
  }

  return widget.searchBoxBuilder?.call(this, onEventSearchTextChanged) ?? searchBoxBuilder();
}