
In this example, I’m going to show you how to create a select dropdown in Flutter using the Dart programming language.
To do this, we’ll create a component that we’ll call CustomSelect. This element or component will have its properties and events to handle option selection, allowing us to use it in any view or widget.
import 'package:flutter/material.dart';
class CustomSelect extends StatefulWidget {
final List<String> options;
final String? selectedOption;
final ValueChanged<String>? onChanged;
const CustomSelect({
Key? key,
required this.options,
this.selectedOption,
this.onChanged,
}) : super(key: key);
@override
_CustomSelectState createState() => _CustomSelectState();
}
class _CustomSelectState extends State<CustomSelect> {
late String _selectedOption;
@override
void initState() {
super.initState();
_selectedOption = widget.selectedOption ?? widget.options.first;
}
@override
Widget build(BuildContext context) {
return DropdownButton<String>(
value: _selectedOption,
onChanged: (String? newValue) {
if (newValue != null) {
setState(() {
_selectedOption = newValue;
});
widget.onChanged?.call(newValue);
}
},
items: widget.options.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
);
}
}
Now, in the MyApp view, we’ll use this CustomSelect component we just created as shown below.
import 'package:flutter/material.dart';
import 'package:your_package_name/custom_select.dart'; // Import the component
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SelectExample(), // Use the SelectExample view
);
}
}
class SelectExample extends StatefulWidget {
@override
_SelectExampleState createState() => _SelectExampleState();
}
class _SelectExampleState extends State<SelectExample> {
final List<String> _options = ['Option 1', 'Option 2', 'Option 3'];
late String _selectedOption;
@override
void initState() {
super.initState();
_selectedOption = _options.first;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Select Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CustomSelect(
options: _options,
selectedOption: _selectedOption,
onChanged: (String newValue) {
setState(() {
_selectedOption = newValue;
});
},
),
SizedBox(height: 20),
Text(
'Selected option: $_selectedOption',
style: TextStyle(fontSize: 18),
),
],
),
),
);
}
}
