The multi-level dropdown is used in various applications and there are very good chances that you have came across this case.
Let me give you a simple and very common example which you have seen around you.
Understand multilevel dropdown with example
Suppose you are looking for a service center for your electronic product. You visit the website of that product and look for the service center page. You find two dropdowns in the find service page
.
- Country
- Province (also known as the state)
The province/state is dependent on the country. If you select a country like India then you will find the province of India in the province dropdown. If you select a country like Germany you will find Province related to Germany in the province of dropdown.
Get Started
Before going to a multi-level dropdown, it’s important that you understand the dropdown properly. I have one article where I have discussed everything you need to know about dropdown.
Now you have a good understanding of dropdown and you should learn multi-level. It’s something which is very important for building e-commerce or any school or bank kind of app.
How dropdown works?
I am not sure how much you understand the dropdown. To make multi-level dropdown easier, I will remind you some of the important terms of the dropdown.
Arguments | Description |
---|---|
hint | This value will be shown when no value is selected. |
value | This value will be shown as selected |
items | It looks for a list of DropdownMenuItem widget. |
onChanged | It is a callback and it is called with the value of DropdownButton |
What this article will cover?
I am going to make the above example in the flutter where the province dropdown will depend on the country dropdown. I think this is very generic for you all and this will make much more sense than any other example.
Type | Explanation |
---|---|
Static Data | In this example we will have static data stored in variable |
Data from Cloud | In this example we will get the data from a remote server |
Multi Level dropdown in flutter - Part 2
Static Data Example
We will have 3 different variables holding different data. We will use this as have dynamic dropdown. Based on the country selection we will change the province dropdown options.
final List<String> country = ['USA', 'India'];
final List<String> indiaProvince = ['New Delhi', 'Bihar', 'Rajasthan'];
final List<String> usaProvince = ['Texas', 'Florida', 'California'];
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List<String> countries = ['USA', 'India'];
List<String> indiaProvince = ['New Delhi', 'Bihar', 'Rajasthan'];
List<String> usaProvince = ['Texas', 'Florida', 'California'];
List<String> provinces = [];
String selectedCountry;
String selectedProvince; // will ues this variable later
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Multi Level Dropdown'),
),
body: Center(
child: DropdownButton<String>(
hint: Text('Country'),
value: selectedCountry,
items: countries.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: onChangedCallback,
),
),
);
}
void onChangedCallback(country) {
if (country == 'USA') {
provinces = usaProvince;
} else if (country == 'India') {
provinces = indiaProvince;
} else {
provinces = [];
}
setState(() {
selectedProvince = null;
selectedCountry = country;
});
}
}
Let’s focus on onChanged of country dropdown. As we have two country
in countries
variable, when we will select any dropdown then we will get a callback with the value of the dropdown item value.
So, based on the country we will change the provinces list’s(array) data. After this we will call setState then it will update the province dropdown.
void onChangedCallback(country) {
if (country == 'USA') {
provinces = usaProvince;
} else if (country == 'India') {
provinces = indiaProvince;
} else {
provinces = [];
}
setState(() {
selectedProvince = null;
selectedCountry = country;
});
}
Source Code
Now let’s see the final code, I mean how province dropdown is being built. As we have province details in the provinces
List. So we will just make dropdown using it and we got a multi-level dropdown.
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List<String> countries = ['USA', 'India'];
List<String> indiaProvince = ['New Delhi', 'Bihar', 'Rajasthan'];
List<String> usaProvince = ['Texas', 'Florida', 'California'];
List<String> provinces = [];
String selectedCountry;
String selectedProvince;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Multi Level Dropdown'),
),
body: ListView(
padding: EdgeInsets.all(20.0),
children: [
// Country Dropdown
DropdownButton<String>(
hint: Text('Country'),
value: selectedCountry,
isExpanded: true,
items: countries.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (country) {
if (country == 'USA') {
provinces = usaProvince;
} else if (country == 'India') {
provinces = indiaProvince;
} else {
provinces = [];
}
setState(() {
selectedProvince = null;
selectedCountry = country;
});
},
),
// Country Dropdown Ends here
// Province Dropdown
DropdownButton<String>(
hint: Text('Province'),
value: selectedProvince,
isExpanded: true,
items: provinces.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (province) {
setState(() {
selectedProvince = province;
});
},
),
// Province Dropdown Ends here
],
),
);
}
}
I hope you understood how to make a multi-level dropdown and it’s a concept and I hope now you can make any kind of multi-level dropdown. To help you more, I will make one more multi-level dropdown with a different sources of data.
This repo has two example of multi-level dropdown, first uses static data and other uses data from internet.
Dart 3
If you looking for making a multi-level dropdown using backend API(Data from Cloud) then part 2 is for you.
Multi Level dropdown in flutter - Part 2
Conclusion
I hope this gave you a basic understating of the multilevel dropdown. Now you got the idea that how the next dropdown works based on the previous dropdown.
This is the magic of onChanged callback, onChnage on the dropdown value we update the next dropdown.
If you like it then do share it with your friends or flutter developers. If you have any questions then let me know in the comment.