对话框中的Flatter Redux下拉按钮

对话框中的Flatter Redux下拉按钮,redux,flutter,Redux,Flutter,在Flatter_redux中,如何使用StoreConnector在对话框中创建下拉按钮 我在一个有状态的小部件中有一个对话框,这样当DropdownButton更改时,它会再次得到更新和渲染 切换到Redux时,我创建了两个StoreConnector,一个用于选定的值,一个用于状态。dispatch回调 我必须将此代码添加到生成器中: if(_selectedId == null) { _selectedId = size; } 如果没有,则下拉列表不会更改,因为它始终具有redux

在Flatter_redux中,如何使用StoreConnector在对话框中创建下拉按钮

我在一个有状态的小部件中有一个对话框,这样当DropdownButton更改时,它会再次得到更新和渲染

切换到Redux时,我创建了两个StoreConnector,一个用于选定的值,一个用于
状态。dispatch
回调

我必须将此代码添加到生成器中:

if(_selectedId == null) {
  _selectedId = size;
}
如果没有,则下拉列表不会更改,因为它始终具有redux state值,或者redux state值即使在下拉列表中也不会显示

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
小部件构建(构建上下文){
返回SimpleDialog(
标题:新文本(“用户设置”),
儿童:[
//Redux存储连接器,用于侦听state.size,而不是整个state
StoreConnector(
转换器:(存储)=>store.state.size,
生成器:(上下文、大小){
如果(_selectedId==null){
_选择edid=大小;
}
打印(“容器之前:${u selectedId}”);
退回新货柜(
填充:常数边集全部(10.0),
孩子:新的下拉按钮(
提示:常量文本(“选择您的大小”),
值:_selectedId,
onChanged:(字符串changedValue){
//这将设置父窗口小部件、对话框的状态,以便
//下拉菜单运行它的渲染。它与
//redux,仅更新下拉列表值
设置状态(){
_选择edid=changedValue;
打印(更改值);
打印(_selectedId);
});
},
项目:_尺寸,
)
);
}//建筑商
),
//需要第二个存储连接器,用于dispatch ChangeSize操作
StoreConnector(
转换器:(存储){
return(size)=>store.dispatch(ChangeSize(_selectedId));
},
生成器:(上下文,回调){
返回新的SimpleDialogOption(
已按下:(){
//StoreConnector回调
回调(_selectedId);
//关闭对话框
Navigator.pop(上下文);
},
子项:const Text('Close'),
);
}//建筑商
)
],
);
}//小部件构建