DropdownButtonFormField — это мощный виджет во Flutter, который позволяет легко создавать раскрывающиеся меню. Одним из важных аспектов работы с раскрывающимися списками является установка начального значения. В этой статье мы рассмотрим различные методы установки начального значения для DropdownButtonFormField во Flutter, сопровождаемые примерами кода, иллюстрирующими каждый подход. Давайте погрузимся!
Метод 1: использование виджета с отслеживанием состояния
Один простой метод — обернуть виджет DropdownButtonFormField внутри виджета с отслеживанием состояния. Затем вы можете установить начальное значение, используя состояние виджета. Вот пример:
class MyDropdown extends StatefulWidget {
@override
_MyDropdownState createState() => _MyDropdownState();
}
class _MyDropdownState extends State<MyDropdown> {
String _selectedValue = 'Initial Value';
@override
Widget build(BuildContext context) {
return DropdownButtonFormField<String>(
value: _selectedValue,
onChanged: (newValue) {
setState(() {
_selectedValue = newValue;
});
},
items: ['Option 1', 'Option 2', 'Option 3']
.map((value) => DropdownMenuItem<String>(
value: value,
child: Text(value),
))
.toList(),
);
}
}
Метод 2: использование GlobalKey
Другой подход предполагает использование GlobalKey для доступа к DropdownButtonFormField и программной установки начального значения. Вот пример:
final dropdownKey = GlobalKey<FormFieldState<String>>();
DropdownButtonFormField<String>(
key: dropdownKey,
value: 'Initial Value',
onChanged: (newValue) {
// Handle value changes
},
items: ['Option 1', 'Option 2', 'Option 3']
.map((value) => DropdownMenuItem<String>(
value: value,
child: Text(value),
))
.toList(),
);
// Set initial value programmatically
dropdownKey.currentState?.didChange('Option 2');
Метод 3: использование свойства InitialValue
DropdownButtonFormField также предоставляет свойство InitialValue, которое позволяет напрямую устанавливать начальное значение. Вот пример:
DropdownButtonFormField<String>(
initialValue: 'Initial Value',
onChanged: (newValue) {
// Handle value changes
},
items: ['Option 1', 'Option 2', 'Option 3']
.map((value) => DropdownMenuItem<String>(
value: value,
child: Text(value),
))
.toList(),
);
Метод 4: использование класса модели
Для более сложных сценариев вы можете создать класс модели для хранения текущего значения и его соответствующего обновления. Вот пример:
class DropdownModel {
String selectedValue = 'Initial Value';
}
final model = DropdownModel();
DropdownButtonFormField<String>(
value: model.selectedValue,
onChanged: (newValue) {
model.selectedValue = newValue;
},
items: ['Option 1', 'Option 2', 'Option 3']
.map((value) => DropdownMenuItem<String>(
value: value,
child: Text(value),
))
.toList(),
);
Установку начального значения для DropdownButtonFormField во Flutter можно выполнить различными методами, в зависимости от ваших конкретных требований. Независимо от того, используете ли вы виджет Stateful, GlobalKey, свойство InitialValue или класс модели, теперь у вас есть ряд вариантов на выбор. Поэкспериментируйте с этими методами и найдите тот, который лучше всего соответствует вашим потребностям. Приятного кодирования!