У меня есть фрагмент кода, который отображает DropdownButton
во Flutter. Мне понадобилось несколько раскрывающихся списков, поэтому я извлек их в метод, вызываемый для каждого нужного мне экземпляра. В нем я передаю переменные состояния для выбранного значения, а также все параметры. Внутри DropdownButton у меня есть методы для обновления selected
в методе DropdownButton
onChanged
.
Таким образом, проблема возникает, когда я вызываю метод вместо того, чтобы использовать его на месте, как функции для onChanged и onClear не перестраивают виджет, потому что они не обновляют переменные состояния вне вызова метода раскрывающегося списка. Как лучше всего это сделать? Это сработает, если я передам функции извне, но тогда мне придется продублировать некоторый код. Следует ли мне переписать его как StatefulWidget
?
DropdownButton myDropdown(
String selected,
List<dynamic> options, {
Function onChanged,
Function onClear,
}) {
return DropdownButton<String>(
value: selected,
// onChanged: (String newValue) { // Not working
// setState(() {
// selected = newValue;
// });
// },
onChanged: onChanged,
selectedItemBuilder: (BuildContext context) {
return options?.map<Widget>((dynamic item) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(item),
IconButton(
icon: Icon(Icons.clear),
// onPressed: () { // Not working
// setState(() {
// selected = null;
// });
// },
onPressed: onClear,
),
],
);
})?.toList() ?? [];
},
items: options?.map<DropdownMenuItem<String>>((dynamic value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
})?.toList() ?? [],
);
}
(В проекте я использую провайдера для управления состоянием, но я не уверен, действительно ли это актуально для этого вопроса.)