我有一个 ListViewBuilder,其中包含来自 Firestore 的数据。在我的列表中,我想返回一个 ListTile 并将 CheckBox 添加到 ListTile 或返回一个 CheckBoxListTile,以效果更好者为准。 但由于某些原因(据我所知),我在这两种情况下都无法选中该复选框。
当我返回带有单个复选框值的复选框的 ListTile 时,当我仅选择一个复选框时,它会检查所有复选框。当我尝试使用
checkList = []
将其设置为多重检查时,根本没有选择任何内容
当我返回 CheckBoxListTile 时,我也无法选择任何内容。有人可以帮我解决这个问题吗?我已经被困了很多年了。
这是我返回CheckBoxListTile的代码
List<int> selectedList = [];
List<bool> isCheckedList = [];
StreamBuilder(
stream: FirebaseFirestore....
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) {
final info = snapshot.data!.docs[index];
isCheckedList =
List.filled(snapshot.data!.docs.length, false);
var timestamp = info.get("Time") as Timestamp;
final isRead = info.get("Read");
return CheckboxListTile(
controlAffinity: ListTileControlAffinity.leading,
activeColor: Colors.green,
checkColor: Colors.green,
tileColor: isRead == "No" ? Colors.teal.shade100 : null,
title: TextScroll(
"${info.get("title")}. ",
velocity: const Velocity(pixelsPerSecond: Offset(30, 0)),
style: const TextStyle(fontWeight: FontWeight.bold),
),
value: isCheckedList[index],
onChanged: (value) {
setState(() {
isCheckedList[index] = value!;
if (value) {
selectedList.add(index);
} else {
selectedList.remove(index);
}
});
},
);
},
);
}
return Center(
child: Text("Whatever"),
);
},
),
将
isChecked
列表声明移至 ListView 构建器之外。现在,由于其在 ListView 中的位置,当选中一个复选框时,它会导致所有复选框重置。