我有一个在获得许可后显示电话联系人的列表。我有一种标签功能来选择联系人。 发生的情况是,当我选择一个时,所有联系人都将值切换为 true。 我只需要选择的一个更改为 true。 这是代码,所以它可能更清楚。
StatefulBuilder buildContactItem(Contact contact, double screenwidth, double screenheight) {
return StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return Column(
children: [
ListTile(
dense: false,
onTap: () {
setState(() {
isSelected = !isSelected;
if (isSelected == false) {
listContactosSeleccionados.removeWhere((element) =>
element.displayName == contact.displayName);
} else {
listContactosSeleccionados.add(contact);
}
});
},
contentPadding: const EdgeInsets.symmetric(horizontal: 18),
trailing: buildIconListTile(isSelected),
leading: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Container(
height: screenheight*0.065,
width: screenwidth*0.13,
color: Color(0xffafb3af),
child: Center(
child: Text(contact.initials(),
style: TextStyle(
fontFamily: "Raleway-SemiBold",
fontSize: 26,
color: Color(0xffe5e6e5),
))),
),
),
title: Text(contact.displayName ?? '',
style: TextStyle(
fontFamily: "Raleway-Light",
fontSize: 18,
fontWeight: FontWeight.w300,
color: Color(0xffb3b3b3),
)),
),
Divider()
],
);
});
}
答案 0 :(得分:0)
如果您可以发布与联系人加载和选择处理相关的代码会很有用。
无论如何,问题可能与您处理选择的方式有关。
从代码中我可以看到,当其中一个联系人被点击时,您将 isSelected
设置为 true。
我认为您只声明了一个适用于您所有联系人的 isSelected
。
我会创建一个名为 isSelected
的布尔数组而不是单个布尔值。该数组的长度应与联系人数量相同。
然后我会给每个联系人一个从 0 开始的索引。
然后我会将 onTap
函数更改为这样工作:
isSelected[index] = !isSelected[index];
if (isSelected[index] == false) {
//Your code
}