android - Flutter - 从列表中选择一个联系人会选择所有联系人
问题描述
我有一个列表,在获得许可后显示电话联系人。我有一种标签功能来选择联系人。发生的情况是,当我选择一个时,所有联系人都将值切换为 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()
],
);
});
}
解决方案
如果您可以发布与联系人加载和选择处理相关的代码,那将会很有用。
无论如何,问题可能与您处理选择的方式有关。从代码中我可以看到isSelected
,当其中一个联系人被点击时,您将设置为 true。
我认为您只声明了一个isSelected
适用于您所有联系人的选项。
我会创建一个名为的布尔数组isSelected
而不是单个布尔值。该数组的长度应与联系人的数量相同。
然后我会给每个联系人一个从 0 开始的索引。
然后我会改变onTap
函数像这样工作:
isSelected[index] = !isSelected[index];
if (isSelected[index] == false) {
//Your code
}
推荐阅读
- google-cloud-storage - 如何在脚本中正确使用`gsutil -q stat`?
- java - Java用法,没用过,不知道怎么找相关资料
- php - 无法使用 MS Graph API 向各种用户发送电子邮件
- android - Android 设计:Intentservice 导致应用程序无响应
- angular - 将子组件添加到父组件并将父组件添加到文档
- c++ - 包含唯一指针成员变量的类的 C++ 赋值运算符
- amazon-web-services - aws上的Playframework ram大小生产模式
- javascript - 状态未传递给子组件 reactjs
- c# - C# AES 加密内存使用情况
- ubuntu - 无法在干净的 ubuntu 18 上安装 catkin