Flutter Redux DropdownButton в диалоге - PullRequest
0 голосов
/ 13 ноября 2018

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...