我正在使用下面的代码构建动态复选框列表,由于某种原因,单击复选框不会更改。当我点击它时复选框没有改变的任何想法,它闪烁但不会改变。
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(),
);
}
}
})
)
非常感谢任何帮助或想法。
答案 0 :(得分:0)
如果没有过多研究你的代码,你似乎正在使用未来的构建器,所以每次调用setState时,你的未来构建器都会启动getRefDocs并覆盖你的状态。我建议你覆盖initState()并在那里设置getRefDocs将结果设置为某个列表。然后将该文档列表与ListBuilder一起使用。