NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #2626 most downloaded on pub.dev
Highly customizable animated dropdown for Flutter — search, network search with infinite scroll, multi-selection, overlay animations and a floating label.
Last release 3 months ago
30 Jun 2026
Ships unpredictably
gaps range from 9 days to 2.1 years
Nearly every release is documented
notes for 15 of 15 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
15 releases · first in 2021
The biggest release yet. A brand-new overlay animation system , infinite-scroll pagination , a stack of new customization options, and fixes that clea
The biggest release yet. A brand-new overlay animation system, infinite-scroll pagination, a stack of new customization options, and fixes that clear most of the open-issue backlog. Every change is backward-compatible — upgrade without touching your code.
yaml
dependencies:
animated_custom_dropdown: ^4.0.0
🌟 Highlights
Configurable open/close animations
Pick a transition, tune the timing, or bring your own — all through one animation object.
CustomDropdown(
items: items,
animation: CustomDropdownAnimation(
type: DropdownAnimationType.scaleFade, // size · fade · sizeFade · scale · scaleFade · slide
duration: Duration(milliseconds: 300),
curve: Curves.easeOutCubic,
staggerItems: true, // cascading list-item entrance
),
onChanged: (v) {},
)
Infinite scroll (pagination)
Lazy-load remote data page by page — no more fetching everything up front.
CustomDropdown.searchRequest(
paginatedRequest: (query, page) => api.users(query, page), // 1-based page
pageSize: 20,
loadMoreIndicator: const Center(child: CircularProgressIndicator()),
onChanged: (v) {},
)
Loads the first page on open, appends the next as you scroll, and stops when a page returns fewer than pageSize items. The classic one-shot futureRequest keeps working unchanged.
✨ New
🐛 Fixes
⬆️ Upgrading
🙌 Thanks
@hamhoney (#90), @antoniomtnez (#109), @Giovanny-DS (#108) and @mreslamgeek (#94) for PRs and reports — and everyone who filed issues that shaped this release.
Full changelog: see CHANGELOG.md (https://github.com/AbdullahChauhan/custom-dropdown/blob/master/CHANGELOG.md).
One column per quarter.
A big release: a new overlay animation system, infinite-scroll pagination, a stack of new customization options, and fixes that sweep most of the open-issue backlog. All additions are backward-compatible.
animation parameter (CustomDropdownAnimation):
size, fade, sizeFade (default), scale, scaleFade, slide — direction-aware (open up/down).duration, reverseDuration, curve, reverseCurve; smoother defaults (easeOutCubic open / easeInCubic close).CustomDropdownAnimation.none to disable, or a builder escape hatch for any custom transition.staggerItems (tune with itemStagger / itemDuration).paginatedRequest: (query, page) => …:
pageSize items (default 20).loadMoreIndicator footer. Provide exactly one of futureRequest / paginatedRequest.labelText (String) or a fully custom label (Widget), with CustomDropdownDecoration.labelStyle / floatingLabelStyle / floatingLabelBehavior / floatingLabelGap (spacing between the floated label and the field) (#111).textAlign for the header, hint, list items, search input, "no result found" text and the floating label (#71; thanks @hamhoney for PR #90).canClearSelection — a clear button to reset back to the empty/hint state (#106, #83).searchRequestMinChars — don't fire the request until at least N characters are typed (#107).selectOnItemTap — let a custom listItemBuilder own item selection (#80; inspired by PR #108 from @Giovanny-DS).overlayDirection (auto / below / above) to force the side the overlay opens towards (#92).initiallyOpen to open the overlay automatically on first build (#87).autofocusOnSearch to focus the search field (raising the keyboard) when the overlay opens (#70).SingleSelectController.select(), MultiSelectController.select() and MultiSelectController.toggle() (#100).CustomDropdownDecoration.closedHeaderHeight for a fixed, vertically-centered closed-field height (#105).errorStyle.color, so the border and error text match without setting closedErrorBorder explicitly (#105).toString(); use the CustomDropdownListFilter mixin for complex filtering (#103).didChangeMetrics), keeps the dropdown alive (AutomaticKeepAliveClientMixin) and scrolls its field back into view — so the overlay no longer disappears when the field sits in a scrollable that resizes for the keyboard.inputDecorationTheme is set (Flutter 3.35+), including the gray background shown on validation error (#115, #117, #110, #68, #86, #84, #97; also raised in PR #94 by @mreslamgeek):
InputDecorator no longer inherits the ambient inputDecorationTheme; it only surfaces the form validation error text.overlayController ignored when a different controller instance is supplied on rebuild (#114) — the overlay now re-binds to the latest controller.SchedulerPhase assertion on dismiss, and a stale-callback crash when a search request completes after the field is disposed (#96, #101; thanks @antoniomtnez for PR #109).multiSelectSearchRequest reliably shows "No result found" after an empty search result (#112).items/initialItems list (#62).Thanks to @hamhoney (#90), @antoniomtnez (#109), @Giovanny-DS (#108) and @mreslamgeek (#94) for PRs and reports.
Fix: onChanged not invoked after first invocation (Thanks @ravindrabarthwal for PR)
Add: Controllers support (Thanks @hbatalhaStch for PR)
SingleSelectControllerMultiSelectControllerCustomDropdownDisabledDecorationitemsScrollControlleroverlayControllervisibilityprefixIconAdd: Multi selection support (Thanks @KabaDH for PR)
CustomDropdown.multiSelectCustomDropdown.multiSelectSearchCustomDropdown.multiSelectSearchRequestCustomDropdownDecoration
SearchFieldDecorationListItemDecorationScrollbarThemeDataoverlayHeightsearchRequestLoadingIndicatorclosedHeaderPaddingexpandedHeaderPaddingitemsListPaddinglistItemPaddingclosedFillColorexpandedFillColorerrorStyleclosedBorderclosedBorderRadiusexpandedBorderexpandedBorderRadiusclosedErrorBorderclosedErrorBorderRadiusclosedSuffixIconexpandedSuffixIconAdd: Migration to support List of generatic type T (Thanks @JesusHdez960717 for PR)
T (Thanks @JesusHdez960717 for PR)CustomDropdownListFilter for complex filter on search fieldlistItemBuilderheaderBuilderhintBuildernoResultFoundBuildervalidator & validateOnChange to enhance form validation supportinitialItemsearchHintTextexpandedBorderexpandedBorderRadiuserrorBorderRadiushideSelectedFieldWhenExpandednoResultFoundTextexpandedFillColorexpandedSuffixIconmaxlinescontroller supportlistItemStyle supportselectedStyle supporterrorText supportfillColor change to closedFillColorfieldSuffixIcon change to closedSuffixIconerrorBorderSide change to errorBorderborderSide change to closedBorderborderRadius change to closedBorderRadiusAdd: Request delay support for Search request API (Thanks @JesusHdez960717 for PR)
Add: Search request API (Search on provided request)
Update: Flutter version 3.3.9 changes
Update: Flutter version 3.0.1 changes
- Fix: State dispose calls
Add: Search field (Search on list data)
Update: Suffix icon only allowed for dropdown field.
Add: Dropdown overlay alignments (top, bottom) according to available screen space.
Update readme, project description. Format files.
Customizable animated dropdown widget.
Your coding agent can read these notes before it upgrades. Set up the MCP server →