Search packages, repositories and app categories

searchable_listview cover
Package detailsv2.19.5

searchable_listview

A new easy way to filter listview with simple implementation with possibilty to customize search field and empty widget

AndroidiOSWebmacOSWindowsLinux
30-day downloads
7.8K
Likes
267
Pub points
160

Install package

flutter pub add searchable_listview

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

A Flutter package that simplifies filtering a ListView with a built-in search bar. It enables developers to quickly implement searchable lists with minimal code, offering customization options for the search field and empty state widget. The package supports all major platforms and is designed for ease of use, making it ideal for apps requiring dynamic content filtering. It integrates seamlessly into existing projects with a straightforward API.

Use cases

  • Filtering contact lists
  • Searching product catalogs
  • Dynamic data lookup in dashboards
  • User-driven content filtering
  • Real-time search in app interfaces

Key features

  • Simple implementation
  • Customizable search field
  • Configurable empty state
  • Cross-platform support
  • Built-in filtering logic
  • Minimal boilerplate

Suitable for

  • Developers seeking quick search integration
  • Apps with large datasets
  • UI-heavy applications
  • Prototyping search features
  • Beginner-friendly Flutter projects

Considerations

  • Limited advanced filtering options
  • No built-in pagination
  • Requires manual handling of complex data structures
  • Not optimized for very large datasets without additional optimization
  • Depends on external state management for dynamic updates

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

Searchable ListView

Searchable ListView

An easy-to-use Flutter widget for adding a searchable, sortable, and paginated list UI. Supports synchronous lists, asynchronous data sources, expansion groups, slivers, pull-to-refresh, and many customization options.

Package: searchable_listview

Features

  • Filter lists on edit or submit
  • Support for async data sources and async filtering
  • Expansion-group lists with searchable group contents
  • Optional sort widget and custom sort predicate
  • Pagination and onPaginate callback
  • Pull-to-refresh support
  • Sliver-based scrolling effect
  • Customizable loading / error / empty widgets
  • Customizable search field (decoration, input type, icons, width/height)
  • Auto-complete hints and secondary widgets next to the search field

Installation

Add the package to your pubspec.yaml:

dependencies:
  searchable_listview: ^2.19.5

Then run:

flutter pub get

Quick Start

Basic synchronous list example:

SearchableList<Actor>(
  initialList: actors,
  itemBuilder: (actor) => ActorItem(actor: actor),
  filter: (query) => actors
      .where((a) => a.name.toLowerCase().contains(query.toLowerCase()))
      .toList(),
  emptyWidget: const Center(child: Text('No results')),
  inputDecoration: InputDecoration(labelText: 'Search actor'),
)
Async list example

Use the .async constructor when data comes from a Future and you need to filter the returned list:

SearchableList<Actor>.async(
  asyncListCallback: () async => await fetchActors(),
  asyncListFilter: (query, list) =>
      list.where((a) => a.name.contains(query)).toList(),
  itemBuilder: (actor) => ActorItem(actor: actor),
  loadingWidget: const Center(child: CircularProgressIndicator()),
  errorWidget: const Center(child: Icon(Icons.error)),
)
Expansion groups

For grouped/expansion lists use the .expansion constructor:

SearchableList<Actor>.expansion(
  expansionListData: mapOfActors,
  expansionTitleBuilder: (key) => Text(key.toString()),
  filterExpansionData: (query) => {
    for (final entry in mapOfActors.entries)
      entry.key: (mapOfActors[entry.key] ?? [])
          .where((a) => a.name.contains(query))
          .toList()
  },
  expansionListBuilder: (index, actor) => ActorItem(actor: actor),
)
Sliver list

Use .sliver to embed a searchable list inside sliver scroll views:

SearchableList<Actor>.sliver(
  initialList: actors,
  itemBuilder: (actor) => ActorItem(actor: actor),
  filter: (q) => actors.where((a) => a.name.contains(q)).toList(),
)

Common Parameters

  • initialList — initial synchronous list of items
  • filter — synchronous filter callback (String -> List)
  • asyncListCallback — Future that returns a List
  • asyncListFilter — filter that applies to results from asyncListCallback
  • itemBuilder — builder for list item widgets
  • emptyWidget, loadingWidget, errorWidget — custom widgets for states
  • onPaginate — callback when list reaches the end (for pagination)
  • inputDecoration, textStyle, textInputType — search field customization
  • sortWidget, sortPredicate — optional sorting UI and comparator
  • closeKeyboardWhenScrolling — whether scrolling hides the keyboard

For a complete list of available parameters and detailed API, see the library documentation or the source code in lib/searchable_listview.dart.

Example App

See the example/ folder for a runnable demo with multiple configurations and screenshots.

Example

Contributing

Contributions, issues and feature requests are welcome. Feel free to check the example/ folder for usage examples and open a pull request.

  • Report bugs by opening an issue
  • Suggest features by opening an issue
  • Submit pull requests for fixes and improvements

Repository: https://github.com/koukibadr/Searchable-Listview

License

This project is licensed under the terms in the LICENSE file.

Contributors

Categories

Dependencies

Dependency list 1 items

Source repository

Projects using this package

No data available yet.