extendable_dropdown 2.0.0 copy "extendable_dropdown: ^2.0.0" to clipboard
extendable_dropdown: ^2.0.0 copied to clipboard

ExtendableDropdown is a versatile Flutter package for dynamic, customizable dropdown menus

ExtendableDropdown #

A Versatile Flutter Package for Dynamic, Generic Dropdown Menus (v1.0.4) #

Introducing ExtendableDropdown, a production-ready Flutter package that empowers you to create dynamic and expandable multiple dropdown menus with full support for generic data types.

🚀 Key Features #

  • Generic Type Support: Handle any data type (T) with full type safety. No longer restricted to strings!
  • Dynamic Slot Management: Add or remove dropdown slots on the fly with a simple, intuitive UI.
  • Dismissible Interaction: Swipe-to-dismiss functionality for removing selections with item return logic.
  • labelBuilder API: Complete control over how your custom objects are rendered as text in the dropdown.
  • Configurable UI Fragments: Pass your own Widgets for the Add Button and custom callbacks for message handling.
  • Fully Mutable-Safe: Built with immutability in mind, following Flutter's best practices for widget design.

📦 Installation #

Add extendable_dropdown as a dependency in your pubspec.yaml file:

dependencies:
  extendable_dropdown: ^1.0.4

Import the package in your Flutter code:

import 'package:extendable_dropdown/extendable_dropdown.dart';

🛠 Usage #

Simple Usage (Strings) #

List<String> cities = ['Colombo', 'Kandy', 'Galle', 'Jaffna'];

ExtendableDropdown<String>(
  list: cities,
  onSendListChanged: (selectedItems) {
    print('Selected cities: $selectedItems');
  },
)

Advanced Usage (Custom Objects & UI) #

You can use any custom model and fully override the UI.

ExtendableDropdown<Location>(
  list: myLocationList,
  onSendListChanged: (selected) => print(selected),
  labelBuilder: (location) => location.name,
  // Completely custom add button
  addButton: ElevatedButton.icon(
    onPressed: null, // Logic is handled internally
    icon: Icon(Icons.add),
    label: Text("Add Location"),
  ),
  // Custom notification logic
  onMessage: (context, message) {
    MyCustomToast.show(message);
  },
)

🎨 Professional Customization #

ExtendableDropdown comes with a wide range of styling options:

Property Description Default
list The initial list of items to choose from. Required
onSendListChanged Callback triggered when the selection changes. Required
labelBuilder Function to map generic items to strings. item.toString()
addButton Widget: Custom widget for the add button. Styled default button
onMessage Callback: Handle custom alerts/notifications. Default SnackBar
dismissibleBackgroundColor Color shown when swiping to delete. Colors.red
selectedIcon Icon shown for a selected slot. Icons.radio_button_checked
nonSelectedIcon Icon shown for an empty slot. Icons.location_on_outlined
dropdownBorderRadius Border radius of the dropdown container. 10.0

Check out the example folder for a full implementation! #

🚧 Roadmap #

  • ✅ Generic data type support (Completed)
  • ✅ Improved state management and immutability (Completed)
  • ❌ Searchable dropdown options
  • ❌ Multi-select within a single dropdown slot
  • ❌ Custom animation support for slot addition

🤝 Contributing #

We welcome your feedback and contributions! Please feel free to open issues or submit pull requests.

📄 License #

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❤️ by Chanuka Ranathunga

2
likes
155
points
131
downloads

Documentation

API reference

Publisher

verified publisherappsblee.com

Weekly Downloads

ExtendableDropdown is a versatile Flutter package for dynamic, customizable dropdown menus

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter

More

Packages that depend on extendable_dropdown