1

我正在使用 dropdown_search 版本 0.4.3 包,我可以在单击搜索栏时使用项目填充下拉列表,但是当我开始输入时它不会返回任何项目。我正在从 Firebase 云存储中获取初始数据。请在下面查看我的代码。

@override
  Widget _buildBody() {
    return OurContainer(
      child: Column(
        children: <Widget>[
          DropdownSearch(
            showSearchBox: true,
            isFilteredOnline: true,
            onFind: (String filter) => getData(filter),
            popupItemBuilder: _customPopupItemBuilderExample,
            dropdownBuilder: _customDropDownExample,
          ),
        ],
      ),
    );
  }

  Widget _customDropDownExample(
      BuildContext context, MainCategoryModel item, String itemDesignation) {
    return Container(
      child: (item?.name == null)
          ? ListTile(
              contentPadding: EdgeInsets.all(0),
              title: Text("No item selected"),
            )
          : ListTile(
              contentPadding: EdgeInsets.all(0),
              title: Text(item.name),
            ),
    );
  }

  Widget _customPopupItemBuilderExample(
      BuildContext context, MainCategoryModel item, bool isSelected) {
    return Container(
      margin: EdgeInsets.symmetric(horizontal: 8),
      decoration: !isSelected
          ? null
          : BoxDecoration(
              border: Border.all(color: Theme.of(context).primaryColor),
              borderRadius: BorderRadius.circular(5),
              color: Colors.white,
            ),
      child: ListTile(
        selected: isSelected,
        title: Text(item.name),
        subtitle: Text(item.name.toString()),
      ),
    );
  }

 



    Future<List<MainCategoryModel>> getData(filter) async {
    final tempList = <MainCategoryModel>[];
    if (filter.length > 0) {
      tempList.addAll(_mainCategoryList
          .where((element) => element.name.toLowerCase().contains(filter)));
      _mainCategoryList.addAll(tempList);
    } else {
      _mainCategoryList.clear();
      _mainCategoryList.addAll(await OurDatabase().getMainCategory());
    }

    return _mainCategoryList;
  }
4

1 回答 1

0

你的getData方法看起来不正确。假设您_mainCategoryList是 Firebase 的列表,则以下同步方法应该有效:

List<MainCategoryModel> getData(filter) {
  if (filter.length < 1) {
    return _mainCategoryList;
  }
  return _mainCategoryList.where((element) => element.name.toLowerCase().contains(filter)).toList();
}

此方法不会改变您的_mainCategoryList,而是将其保留为缓存,以便搜索更快并减少您从 Firebase 读取的次数。如果这不能满足您的需要,请在此问题下方的评论中告诉我,我很乐意提供帮助。

于 2020-07-05T15:02:16.387 回答