- Fixes short circuiting issue
- Resolved issue of displayed items failing to wrap when there were fewer items to display in the container.
- Refactored the displayed items to use lazy loading, resulting in a significant improvement in performance for large lists. Additionally, the index is now accessible for further customization.
itemBuilder: (country, index) {
if (index==0) return Text('Hello World');
return Padding(
padding: const EdgeInsets.all(6.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6),
color: Colors.white,
),
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 20.0,
horizontal: 12,
),
child: Text(country.name),
),
),
);
},
- Exposes some more
InputDecoration
parameters :- Adds
showClearSearchFieldButton
which adds a suffix icon to clear searchfield - Adds
hintText
- Adds
textFieldFocus
- Adds
textEdittingController
- Adds
- If
pickedItemsContainerBuilder
is provided it will build even if no items are picked
- Adds
pickedItemsContainerBuilder
. You can now provide your own customWidget
for the picked items.pickedItems
(List<Widget>
) are created from thepickedItemBuilder
. So having those items you can customise the layout at your needs.
pickedItemsContainerBuilder: (pickedItems) => Center(
child: Container(
height: 150,
width: 150,
decoration: BoxDecoration(
border: Border.all(color: Colors.grey[400]!),
),
child: ListView(
children: pickedItems,
),
),
),
pickedItemBuilder: (country) {
return Padding(
padding: const EdgeInsets.all(8),
child: Center(
child: Text(
country.name,
style: const TextStyle(
color: Colors.blue,
decoration: TextDecoration.underline,
),
),
),
);
},
- Removes redundant code & refactors methods.
- Fixes
onItemRemoved
being called twice. Thanks to anqit
- Fixes issue were fuzzy search was not always working
- Adds missed [onItemCreated] parameter to [createOptions]
- Adds
caseSensitiveSearch
so you can search with case sensitive. Thanks to anqit
New constructor added MultipleSearchSelection<T>.creatable
which can now create new item when search result does not return any results. It takes a new required parameter, createOptions
e.g :
// [T] here is [Country]
createOptions: CreateOptions<Country>(
// You need to create and return the item you want to add since [T] is not always [String].
createItem: (text) {
return Country(name: text, iso: text);
},
// Create item Widget that appears instead of no results.
createItemBuilder: (text) => Align(
alignment: Alignment.centerLeft,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text('Create "$text"'),
),
),
// Whether you want to pick the newly created item or just add it to your list. Defaults to false.
pickCreatedItem: true,
),
- [clearSearchFieldOnSelect]. Whether to clear the searchfield and reset the showed items when you pick an item. Defaults to [false].
🔥 Breaking changes:
- Minimum Dart SDK updated to 2.17.0
🐛 Bug fixes:
- Dropdown was not correctly rebuilding after changing the initial
items
list.
♻️ Fields made optional:
- Key parameter has been added. It defaults to
ValueKey(items.hasCode)
. - [maximumShowItemsHeight]. It defaults to 150.
- [onPickedChange]. Your call if you need it.
- [itemsVisibility]. It defaults to always on.
- [fuzzySearch]. It defaults to none.
- Fixes
itemsVisibility: ShowedItemsVisibility.onType
not showing anything.
Fields removed:
- [padding] : Refactor -> You can wrap the whole widget in a [Padding] widget.
- [titlePadding] : Refactor -> You can wrap the title with a [Padding] widget.
- [showedItemMouseCursor] : Refactor -> You can build your own showed item [Widget] with [itemBuilder] and use your own style.
- [searchItemTextContentPadding] : Refactor -> You can use [searchFieldInputDecoration] to style your search textfield.
Fields renamed:
- [searchItemTextStyle] -> [searchFieldTextStyle]
- Adds [showItemsButton] widget and removes all parameters associated with it previously.
- Adds [selectAllButton] widget and removes all parameters associated with it previously.
- Adds [clearAllButton] widget and removes all parameters associated with it previously.
- Removes opinionated default widgets to plain [Text] reducing code size
- Fixes sort picked items bug
- Fixes bug with [showItemsText] button text showing [selectAllText] instead
- Removes junk files reducing library size
[items] & [initialItems] are now of type [T] for more flexibility when working with different types of [Object] in [List].
New required parameters added :
- [itemBuilder(T)] build and return the showed item widget
- [pickedItemBuilder(T)] build and return the picked item widget
- [fieldToCheck(T)] return the [String] field from the [T] of which you will search & sort against
Removed all parameters connected to showed & picked items since we now have builder methods. Please check the example for the implementation.
- Adds [itemsVisibility] enum which activates different display options on showed items.
ShowedItemsVisibility.alwaysOn // The items are always displayed
ShowedItemsVisibility.onType // Items are displayed when user types on search field
ShowedItemsVisibility.toggle // Items are displayed when tapped on show items toggle button
- Replaces deprecated
isAlwaysShown
withthumbVisibility
forRawScrollBar
- Adds initialy picked items parameter,
List<String>
.initialPickedItems
- Edits library description
- Edits example code
- Adds [MouseCursor] for showed & picked items.
showedItemMouseCursor
&pickedItemMouseCursor
- Adds [BoxDecoration] for showed & picked items container.
pickedItemsBoxDecoration
&showedItemsBoxDecoration
- Adds fuzzy search functionality. New
enum
FuzzySearch
added to choose from available fuzzy algorithms (Jaro & Levenshtein). Defaults to [FuzzySearch.none].
- Adds [ScrollController] for showed & picked items.
- Adds [ScrollPhysics] for showed & picked items.
- Adds a choice whether to sort showed & picked items.
- Adds picked item remove icon parameter.
- Exposes picked item's [BoxDecoration].
- Exposes clear all & select all buttons' animation curves.
- Initial release.