首页 > 解决方案 > 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()
        ],
      );
    });
  }

标签: androidflutterdartmobile

解决方案


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

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

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

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

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

然后我会改变onTap函数像这样工作:

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

推荐阅读