Search packages, repositories and app categories

dropdown_plus_plus cover
Package detailsv0.1.1+1

dropdown_plus_plus

Simple and easy to use Dropdown in forms with search, keyboard navigation, offiline data source, remote data source and easy customization.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
14
Likes
11
Pub points
140

Install package

flutter pub add dropdown_plus_plus

Package Overview

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

DropdownPlusPlus is a versatile and user-friendly dropdown widget for Flutter applications, designed for seamless integration in forms. It supports search functionality, keyboard navigation, and both offline and remote data sources. The package offers extensive customization options, making it ideal for dynamic and responsive form inputs across multiple platforms. With a clean API and minimal setup, it enhances user experience while maintaining flexibility for developers.

Use cases

  • Form inputs with searchable dropdowns
  • Dynamic data loading from APIs
  • Offline data selection in forms
  • Keyboard-navigable dropdown menus
  • Customizable UI for dropdown items
  • Cross-platform form components

Key features

  • Searchable dropdown with real-time filtering
  • Support for remote and local data sources
  • Keyboard navigation (arrow keys, enter)
  • Highly customizable appearance and behavior
  • Built-in loading and error states
  • Responsive design across all platforms

Suitable for

  • Developers building complex forms
  • Apps requiring searchable dropdowns
  • Projects with remote or offline data needs
  • Teams prioritizing cross-platform consistency
  • UI-heavy applications needing flexible dropdowns
  • Rapid prototyping with reusable form components

Considerations

  • Requires careful handling of async data loading
  • May need additional styling for complex themes
  • Performance impact with very large datasets
  • Limited documentation beyond basic usage
  • Potential need for custom scroll behavior
  • Dependent on external state management for dynamic updates

Original README

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

dropdown_plus_plus

Simple and easy to use Dropdown in forms with search, keyboard navigation, offiline data source, remote data source and easy customization.

A maintained fork of dropdown_plus with a lot more customisations.

Getting Started

Simple Text Dropdown.

TextDropdownFormField(
  options: ["Male", "Female"],
  decoration: InputDecoration(
      border: OutlineInputBorder(),
      suffixIcon: Icon(Icons.arrow_drop_down),
      labelText: "Gender"),
  cursorColor: Colors.green,
  dropdownItemColor: Colors.red,
),

Install

packages.yaml
dropdown_plus_plus: <lastest version>

Customizable Example


 final List<Map<String, dynamic>> _roles = [
    {"name": "Super Admin", "desc": "Having full access rights", "role": 1},
    {
      "name": "Admin",
      "desc": "Having full access rights of a Organization",
      "role": 2
    },
    {
      "name": "Manager",
      "desc": "Having Magenent access rights of a Organization",
      "role": 3
    },
    {
      "name": "Technician",
      "desc": "Having Technician Support access rights",
      "role": 4
    },
    {
      "name": "Customer Support",
      "desc": "Having Customer Support access rights",
      "role": 5
    },
    {"name": "User", "desc": "Having End User access rights", "role": 6},
  ];


// ...
// ...

DropdownFormField<Map<String, dynamic>>(
    onEmptyActionPressed: () async {},
    dropdownItemSeparator: Divider(
      color: Colors.black,
      height: 1,
      ),
    decoration: InputDecoration(
        border: OutlineInputBorder(),
        suffixIcon: Icon(Icons.arrow_drop_down),
        labelText: "Access"),
    onSaved: (dynamic str) {},
    onChanged: (dynamic str) {},
    validator: (dynamic str) {},
    displayItemFn: (dynamic item) => Text(
    item['name'] ?? '',
    style: TextStyle(fontSize: 16),
    ),
    findFn: (dynamic str) async => _roles,
    filterFn: (dynamic item, str) =>
        item['name'].toLowerCase().indexOf(str.toLowerCase()) >= 0,
    dropdownItemFn: (dynamic item, position, focused,
            dynamic lastSelectedItem, onTap) =>
        ListTile(
    title: Text(item['name']),
    subtitle: Text(
        item['desc'] ?? '',
    ),
    tileColor:
        focused ? Color.fromARGB(20, 0, 0, 0) : Colors.transparent,
    onTap: onTap,
    ),
),

Options

final bool autoFocus;
final bool Function(dynamic item, String str)? filterFn;
final bool Function(dynamic item1, dynamic item2)? selectedFn;
final Future<List<dynamic>> Function(String str) findFn;

final ListTile Function(
  dynamic item,
  int position,
  bool focused,
  bool selected,
  Function() onTap,
) dropdownItemFn;

final Widget Function(dynamic item) displayItemFn;
final InputDecoration? decoration;
final Color? dropdownColor;
final Color? cursorColor;
final DropdownEditingController<T>? controller;
final void Function(dynamic item)? onChanged;
final void Function(dynamic)? onSaved;
final String? Function(T?)? validator;
final double? dropdownHeight;
final TextStyle? searchTextStyle;
final String emptyText;
final String emptyActionText;
final Future<void> Function(String)? onEmptyActionPressed;
final Widget? dropdownItemSeparator;

Categories

Source repository

Projects using this package

No data available yet.