Flutter - 从列表中选择一个联系人会选择所有联系人

时间:2021-07-07 17:07:07

标签: android flutter dart mobile

我有一个在获得许可后显示电话联系人的列表。我有一种标签功能来选择联系人。 发生的情况是,当我选择一个时,所有联系人都将值切换为 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()
        ],
      );
    });
  }

1 个答案:

答案 0 :(得分:0)

如果您可以发布与联系人加载和选择处理相关的代码会很有用。

无论如何,问题可能与您处理选择的方式有关。 从代码中我可以看到,当其中一个联系人被点击时,您将 isSelected 设置为 true。

我认为您只声明了一个适用于您所有联系人的 isSelected

我会创建一个名为 isSelected 的布尔数组而不是单个布尔值。该数组的长度应与联系人数量相同。

然后我会给每个联系人一个从 0 开始的索引。

然后我会将 onTap 函数更改为这样工作:

isSelected[index] = !isSelected[index];
 if (isSelected[index] == false) {
 //Your code
}