颤振复选框无法正常工作

时间:2018-03-10 01:11:27

标签: flutter

我正在使用下面的代码构建动态复选框列表,由于某种原因,单击复选框不会更改。当我点击它时复选框没有改变的任何想法,它闪烁但不会改变。

new Expanded(
        child: new FutureBuilder(
            future: _getRefDocs(),
            builder: (BuildContext context, AsyncSnapshot<List> snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.none:
                  return new Text('Waiting to start');
                case ConnectionState.waiting:
                  return new Text('');
                default:
                  if (snapshot.hasError) {
                    return new Text('Error: ${snapshot.error}');
                  } else {
                    //myInitialData = snapshot.data;
                    return new ListView(
                      //key: new GlobalKey(),
                      //mainAxisSize: MainAxisSize.max,
                      children: snapshot.data.map((dynamic key) {
                        bool myvalue = false;
                        if (selectdocs.contains(key['docid'])) {
                          myvalue = true;
                        }
                        return new Container(
                          //height: 150.0,
                          child: new CheckboxListTile(
                            //key: new Key(key['docid'].toString()),
                              title: new Text(key['docname']),
                              value: myvalue,
                              //selected: myvalue,
                              onChanged: (bool value) {
                                setState(() {
                                  myvalue = value;
                                });

                                if (value == true) {
                                  if (!selectdocs.contains(key['docid'])) {
                                    selectdocs.add(key['docid']);
                                    //selectdocs.add(value)
                                  }

                                } else {
                                  if (selectdocs.contains(key['docid'])) {
                                    selectdocs.remove(key['docid']);
                                  }

                                }
                                //print(selectdocs.toString());
                              }
                          ),
                        );
                      }).toList(),
                    );
                  }
              }
            })
      )

非常感谢任何帮助或想法。

1 个答案:

答案 0 :(得分:0)

如果没有过多研究你的代码,你似乎正在使用未来的构建器,所以每次调用setState时,你的未来构建器都会启动getRefDocs并覆盖你的状态。我建议你覆盖initState()并在那里设置getRefDocs将结果设置为某个列表。然后将该文档列表与ListBuilder一起使用。

相关问题