Skip to content

EhsnJmli/ej_selector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EJ Selector Button

A flutter widget that works like dropdown button, except that instead of opening the dropdown to select items, it opens a dialog. Also, You can customize its button and items. Or you can show dialog for selecting item using showEJDialog.

Usage

You can customize EJSelectorButton or use its string factory which is less customizable and easier to use.

EJSelectorButton.string(
  items: List.generate(10, (index) => 'item $index'),
  hint: 'Choose',
  useValue: false,
  divider: Divider(),
  textStyle: TextStyle(fontSize: 18),
  suffix: Icon(Icons.arrow_drop_down),
)

final items = <ItemModel>[
  ItemModel(1, 'First Item'),
  ItemModel(2, 'Second Item'),
  ItemModel(3, 'Third Item'),
  ItemModel(4, 'Forth Item'),
  ItemModel(5, 'Fifth Item'),
];

EJSelectorButton<ItemModel>(
 useValue: false,
 hint: Text(
    'Click to choose',
    style: TextStyle(fontSize: 16, color: Colors.black),
 ),
 buttonBuilder: (child, value) => Container(
  alignment: Alignment.center,
  height: 60,
  width: 150,
  decoration: BoxDecoration(
  borderRadius: BorderRadius.circular(4),
  color: Colors.white,
 ),
 child: value != null
      ? Text(
         value.name,
         style: TextStyle(fontSize: 16, color: Colors.black),
        )
      : child,
 ),
 selectedWidgetBuilder: (valueOfSelected) => Container(
  padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 32),
  child: Text(
     valueOfSelected.name,
     style: TextStyle(fontSize: 20, color: Colors.blue),
    ),
 ),
 items: items
     .map(
       (item) => EJSelectorItem(
        value: item,
        widget: Container(
        padding:
           const EdgeInsets.symmetric(vertical: 16, horizontal: 32),
        child: Text(
         item.name,
         style: TextStyle(fontSize: 16),
        ),
      ),
     ),
    ).toList(),
)

class ItemModel {
  ItemModel(this.id, this.name);

  final int id;
  final String name;
}

Using as Function

final s = await showEJDialog<int>(
     context: context,
     selected: selectedId,
     selectedWidgetBuilder: (selectedId) => Container(
     padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 32),
     child: Text(
     items.firstWhere((item) => item.id == selectedId).name,
     style: TextStyle(fontSize: 20, color: Colors.blue),
    ),
 ),
    items: items
        .map(
          (item) => EJSelectorItem(
             value: item.id,
             widget: Container(
             padding: const EdgeInsets.symmetric(
             vertical: 16, horizontal: 32),
             child: Text(
                item.name,
                style: TextStyle(fontSize: 16),
               ),
            ),
         ),
      ) .toList(),
);
if (s != null) {
     setState(() {
     selectedId = s.value;
    });
 }

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published