How to Create an Ethereal Selection Widget Using DirectSelect in Flutter

Nov 27, 2021 | Programming

Are you ready to transform your application’s user interface with an inspiring selection widget? The DirectSelect widget in Flutter provides an enchanting full-screen modal popup that showcases the available options when interacted with. Let’s embark on this journey together, inspired by an impressive Dribbble shot!

Steps to Implement DirectSelect Widget

Follow these straightforward steps to effectively create your own DirectSelect selection widget in Flutter:

1. Define Your Data

Begin by creating a list of items, such as city names, to populate your DirectSelect widget.


final List _cities = ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix"];

2. Create DirectSelectList

With your data ready, you can now initiate a DirectSelectList to manage these options:


final dsl = DirectSelectList(
    values: _cities,
    defaultItemIndex: 3,
    itemBuilder: (String value) => getDropDownMenuItem(value),
    focusedItemDecoration: _getDslDecoration(),
    onItemSelectedListener: (item, index, context) {
        Scaffold.of(context).showSnackBar(SnackBar(content: Text(item)));
    },
);

3. Create DropDown Menu Item

Handle how each item will be displayed by defining a method that returns a DirectSelectItem:


DirectSelectItem getDropDownMenuItem(String value) {
    return DirectSelectItem(
        itemHeight: 56,
        value: value,
        itemBuilder: (context, value) => Text(value),
    );
}

4. Setup Decoration for Focused Items

To ensure visual consistency when an item is focused, create a decoration method:


_getDslDecoration() {
    return BoxDecoration(
        border: BorderDirectional(
            bottom: BorderSide(width: 1, color: Colors.black12),
            top: BorderSide(width: 1, color: Colors.black12),
        ),
    );
}

5. Build Your DirectSelect Container

Lastly, encapsulate everything within a DirectSelectContainer and display it in your app’s body:


Scaffold(
    appBar: AppBar(title: Text("Select a City")),
    body: DirectSelectContainer(
        child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
                mainAxisSize: MainAxisSize.min,
                verticalDirection: VerticalDirection.down,
                children: [
                    SizedBox(height: 150.0),
                    Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Column(children: [
                            Container(
                                alignment: AlignmentDirectional.centerStart,
                                margin: EdgeInsets.only(left: 4),
                                child: Text("City"),
                            ),
                            Padding(
                                padding: const EdgeInsets.fromLTRB(0, 8, 0, 0),
                                child: Card(
                                    child: Row(
                                        mainAxisSize: MainAxisSize.max,
                                        children: [
                                            Expanded(
                                                child: Padding(
                                                    padding: EdgeInsets.only(left: 12),
                                                    child: dsl,
                                                ),
                                            ),
                                            Padding(
                                                padding: EdgeInsets.only(right: 8),
                                                child: Icon(
                                                    Icons.unfold_more,
                                                    color: Colors.black38,
                                                ),
                                            ),
                                        ],
                                    ),
                                ),
                            ),
                        ]),
                    ),
                ],
            ),
        ),
    ),
);

Understanding the Code with an Analogy

Think of the DirectSelectList as a magical menu at a fancy restaurant. When you dine there, you want to see a fantastic selection of dishes. The getDropDownMenuItem method serves as your waiter, bringing each dish to life by describing it on a beautiful plate. The _getDslDecoration method is the restaurant’s elegant decor that enhances the dining experience by making everything feel special when you focus on a dish. Just like a fantastic restaurant experience, the DirectSelect widget provides delightful visuals and interactions that charm your users!

Troubleshooting

While implementing the DirectSelect widget, you might encounter a few hurdles. Here are some troubleshooting ideas:

  • Issue: My DirectSelect widget is not displaying the values.
  • Solution: Ensure that the values list (_cities) is populated, and you’re calling getDropDownMenuItem properly in the itemBuilder.
  • Issue: The selection doesn’t update when an item is picked.
  • Solution: Verify that the onItemSelectedListener is correctly instantiated and the context is valid for showing the SnackBar.
  • Issue: The decoration style does not appear as expected.
  • Solution: Check the parameters in BoxDecoration; you may need to adjust color or width settings.

For more insights, updates, or to collaborate on AI development projects, stay connected with fxis.ai.

At fxis.ai, we believe that such advancements are crucial for the future of AI, as they enable more comprehensive and effective solutions. Our team is continually exploring new methodologies to push the envelope in artificial intelligence, ensuring that our clients benefit from the latest technological innovations.

Stay Informed with the Newest F(x) Insights and Blogs

Tech News and Blog Highlights, Straight to Your Inbox