{"id":13550957,"url":"https://github.com/esentis/multiple_search_selection","last_synced_at":"2025-08-27T10:27:18.686Z","repository":{"id":38303170,"uuid":"471380002","full_name":"esentis/multiple_search_selection","owner":"esentis","description":"A highly customizable multiple selection widget with fuzzy search functionality.","archived":false,"fork":false,"pushed_at":"2025-03-10T21:08:01.000Z","size":3213,"stargazers_count":16,"open_issues_count":0,"forks_count":16,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-08-20T05:05:35.820Z","etag":null,"topics":["flutter","flutter-multiple-search","flutter-multiple-search-selection","flutter-multiple-selection","flutter-widget","fuzzy-matching","fuzzy-search","multiple-select","multiple-select-dropdown"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/multiple_search_selection","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/esentis.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-18T13:32:15.000Z","updated_at":"2025-05-03T16:18:52.000Z","dependencies_parsed_at":"2024-03-16T23:56:57.971Z","dependency_job_id":"b666163b-b82e-458c-8b16-84f3d442f721","html_url":"https://github.com/esentis/multiple_search_selection","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/esentis/multiple_search_selection","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esentis%2Fmultiple_search_selection","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esentis%2Fmultiple_search_selection/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esentis%2Fmultiple_search_selection/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esentis%2Fmultiple_search_selection/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/esentis","download_url":"https://codeload.github.com/esentis/multiple_search_selection/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esentis%2Fmultiple_search_selection/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272319329,"owners_count":24913230,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-27T02:00:09.397Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flutter","flutter-multiple-search","flutter-multiple-search-selection","flutter-multiple-selection","flutter-widget","fuzzy-matching","fuzzy-search","multiple-select","multiple-select-dropdown"],"created_at":"2024-08-01T12:01:40.304Z","updated_at":"2025-08-27T10:27:18.613Z","avatar_url":"https://github.com/esentis.png","language":"Dart","funding_links":[],"categories":["Dart"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src='https://i.imgur.com/3dHOaoF.gif' width=500\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n \u003cimg src=\"https://img.shields.io/pub/v/multiple_search_selection?color=637d0d\u0026style=for-the-badge\u0026logo=flutter\" alt=\"Version\" /\u003e \u003cimg src=\"https://img.shields.io/github/languages/code-size/esentis/multiple_search_selection?color=637d0d\u0026style=for-the-badge\u0026label=size\" alt=\"Version\" /\u003e\n\u003c/br\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\nShow some love by dropping a ⭐ at GitHub \u003c/br\u003e\n\u003ca href=\"https://github.com/esentis/multiple_search_selection/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/esentis/multiple_search_selection?style=for-the-badge\u0026logo=github\u0026color=637d0d\" alt=\"HTML tutorial\"\u003e\u003c/a\u003e\n\n#### A highly customizable multiple selection widget with fuzzy search functionality\n\n```dart\n// Use this controller to adjust the behaviour of the widget\n// 1. getAllItems\n// 2. getPickedItems\n// 3. searchItems\n// 4. clearSearchField\n// 5. clearAllPickedItems\n// 6. selectAllItems\n// 7. minCharsToShowItems\n// 8. allowDuplicateSelection\n// 9. isSelectable\nMultipleSearchController controller = MultipleSearchController();\nMultipleSearchSelection\u003cCountry\u003e(\n  // The TextField that is used to search items.\n  //\n  // You can use this to customize the search field.\n  // The `onChanged` of the `searchField` is used internally to search items,\n  // so you can use the `onSearchChanged` callback to get the search query.\n  searchField: TextField(\n    decoration: InputDecoration(\n      hintText: 'Search countries',\n      border: OutlineInputBorder(\n        borderRadius: BorderRadius.circular(6),\n        ),\n      ),\n    ),\n  onSearchChanged: (text) {\n    print('Text is $text');\n  },\n  items: countries, // List\u003cCountry\u003e\n  fieldToCheck: (c) {\n    return c.name; // String\n  },\n  itemBuilder: (country,index,isPicked) {\n    return Padding(\n      padding: const EdgeInsets.all(6.0),\n      child: Container(\n        decoration: BoxDecoration(\n          borderRadius: BorderRadius.circular(6),\n          color: Colors.white,\n        ),\n        child: Padding(\n          padding: const EdgeInsets.symmetric(\n            vertical: 20.0,\n            horizontal: 12,\n          ),\n          child: Text(country.name),\n        ),\n      ),\n    );\n  },\n  pickedItemBuilder: (country) {\n    return Container(\n      decoration: BoxDecoration(\n        color: Colors.white,\n        border: Border.all(color: Colors.grey[400]!),\n      ),\n      child: Padding(\n        padding: const EdgeInsets.all(8),\n        child: Text(country.name),\n      ),\n    );\n  },\n  onTapShowedItem: () {},\n  onPickedChange: (items) {},\n  onItemAdded: (item) {},\n  onItemRemoved: (item) {},\n  sortShowedItems: true,\n  sortPickedItems: true,\n  fuzzySearch: FuzzySearch.jaro,\n  itemsVisibility: ShowedItemsVisibility.alwaysOn,\n  title: Text(\n    'Countries',\n    style: kStyleDefault.copyWith(\n      fontSize: 22,\n      fontWeight: FontWeight.bold,\n    ),\n  ),\n  showSelectAllButton: true,\n  maximumShowItemsHeight: 200,\n)\n```\n\n### MultipleSearchSelection\\\u003cT\u003e.creatable\n\n`MultipleSearchSelection\u003cT\u003e.creatable` constructor can now create new item when search result does not return any results. It takes a new required parameter, `createOptions` e.g :\n\n```dart\n// [T] here is [Country]\ncreateOptions: CreateOptions\u003cCountry\u003e(\n    // You need to create and return the item you want to add since [T] is not always [String].\n    create: (text) {\n        return Country(name: text, iso: text);\n    },\n    // A callback when the item is succesfully created.\n    onCreated: (c) =\u003e print('Country ${c.name} created'),\n    // Create item Widget that appears instead of no results.\n    createBuilder: (text) =\u003e Align(\n        alignment: Alignment.centerLeft,\n            child: Padding(\n                padding: const EdgeInsets.all(8.0),\n                child: Text('Create \"$text\"'),\n            ),\n        ),\n    // Whether you want to pick the newly created item or just add it to your list. Defaults to false.\n    pickCreated: true,\n),\n```\n\n\u003cimg src=\"https://i.imgur.com/XVwxgXA.gif\" title=\"Creatable\" /\u003e\n\n### Showed items visibility\n\n`itemsVisibility` behaviour for the `default` \u0026 `creatable` constructors\n\n| ShowedItemsVisibility.alwaysOn                            | ShowedItemsVisibility.onType                          | ShowedItemsVisibility.toggle                        |\n| --------------------------------------------------------- | ----------------------------------------------------- | --------------------------------------------------- |\n| ![Always On](https://i.imgur.com/UgJGDtq.gif \"Always On\") | ![On type](https://i.imgur.com/f15wDcz.gif \"On type\") | ![Toggle](https://i.imgur.com/tGKQVhl.gif \"Toggle\") |\n\n## Issues / Features\n\nFound a bug or want a new feature? Open an issue in the [Github repository](https://github.com/esentis/multiple_search_selection) of the project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesentis%2Fmultiple_search_selection","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fesentis%2Fmultiple_search_selection","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesentis%2Fmultiple_search_selection/lists"}