Я пытаюсь обновить выбранное значение программно.
Я использовал различные методы, включая Consumer et c., И убедился, что значение обновляется и виджет вызывается при однако значение меняется, однако DropdownButtonFormField никогда не перестраивался с последним значением.
В настоящее время я обертываю DropdownButtonFormField в StreamBuilder, который, предположительно, должен получить перестроение всякий раз, когда есть новое событие, отправленное через поток. Это мой код:
Декларация
final StreamController<String> _raceStreamController = new StreamController<String>();
DropdownButtonFormField
return
StreamBuilder<String>(
stream: _raceStreamController.stream,
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
return new DropdownButtonFormField<String>(
value: snapshot.data,
hint: new Text(hint,
textAlign: TextAlign.center),
isExpanded: true,
items: items.map((String value) {
return new DropdownMenuItem<String>(
child: new Text(value),
value: value
);
}).toList(),
validator: (value) => value == null ? 'field required' : null,
onChanged: (value) {} // no use for now,
);
});
Pu sh data
onFocusChange: (focus) async {
if (!focus) {
try{
await userBloc.searchUser(controller.text.toUpperCase());
_raceStreamController.sink.add(userBloc.user.race);
} catch(e) {
if (e.toString() == ERROR_UNAUTHORISED)
navigateToRoot(context);
}
}
}
Я пытался удалить как можно больше избыточного кода.
Спасибо.