В flutter_redux как мне использовать StoreConnector для создания DropdownButton в диалоговом окне?
У меня есть диалоговое окно в виджете с состоянием, так что при изменении DropdownButton он обновляется и снова отображается.
Переключившись на Redux, я создал два StoreConnectors, один для выбранного значения, один для обратного вызова state.dispatch
.
Мне пришлось добавить этот код в компоновщик:
if(_selectedId == null) {
_selectedId = size;
}
Если этого нет, либо раскрывающийся список не меняется, так как он всегда имеет значение состояния избыточности, либо значение состояния избыточности не отображается в раскрывающемся списке, даже если он там есть.
Widget build(BuildContext context) {
return SimpleDialog(
title: new Text("User Settings"),
children: <Widget>[
// Redux store connector, to listen on state.size only, not entire state
StoreConnector<AppState, dynamic>(
converter: (store) => store.state.size,
builder: (context, size) {
if(_selectedId == null) {
_selectedId = size;
}
print("prior to container: ${_selectedId}");
return new Container(
padding: const EdgeInsets.all(10.0),
child: new DropdownButton<String>(
hint: const Text("Select your size"),
value: _selectedId,
onChanged: (String changedValue) {
// this sets State for the parent widget, the dialog, so the
// dropdown runs it's render. It has nothing to do with
// redux, only updating the dropdown value
setState(() {
_selectedId = changedValue;
print(changedValue);
print(_selectedId);
});
},
items: _sizes,
)
);
} // builder
),
// need a second store connector, for dispatch ChangeSize action
StoreConnector<AppState, dynamic>(
converter: (store) {
return (size) => store.dispatch(ChangeSize(_selectedId));
},
builder: (context, callback) {
return new SimpleDialogOption(
onPressed: () {
// StoreConnector callback
callback(_selectedId);
// close dialog
Navigator.pop(context);
},
child: const Text('Close'),
);
} // builder
)
],
);
} //widget build