【问题标题】:Flutter checkbox class: When I tick a card, all the others are getting selected tooFlutter 复选框类:当我勾选一张卡片时,所有其他卡片也都被选中
【发布时间】:2018-06-11 14:33:34
【问题描述】:
  bool selected = false;

   new Card(
          shape: selected
              ? new RoundedRectangleBorder(
              side: new BorderSide(color: Colors.blue, width: 2.0),
              borderRadius: BorderRadius.circular(4.0))
              : new RoundedRectangleBorder(
              side: new BorderSide(color: Colors.white, width: 2.0),
              borderRadius: BorderRadius.circular(4.0)),

          child: new Row(


              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: <Widget>[



            new Padding(
              padding: new EdgeInsets.all(8.0),
              child: new Text("${ticketGroups[i]['ticket_name']}",
                  style: const TextStyle(
                      fontSize: 15.0, fontFamily: 'Poppins')),
            ),
            new Padding(
              padding: new EdgeInsets.all(8.0),
              child: new Text(ticketGroups[i]["used"].toString(),
                  style: const TextStyle(
                      fontSize: 15.0, fontFamily: 'Poppins')),
            ),

            new Checkbox(
                value: selected,
                onChanged: (value) {
                  setState(() {
                    selected = !selected;
                  });

                })

我希望只能勾选一张卡片,但是只要我勾选任何一张卡片,所有卡片都会被勾选。 卡片也是动态创建的,会不会是这个问题造成的?

【问题讨论】:

  • 每一行都需要一个不同的selected 值。从您的代码中不清楚您是如何处理的。
  • 我怎样才能为每一行做一个不同的选择值?,上面列出了实现选择的所有功能,就是字面意思。
  • 请添加显示如何创建行的代码。从您提供的代码来看,这有点困难。您还可以删除所有与布局相关的代码,以便更轻松地了解代码的意图。无论如何,布局与手头的问题无关。

标签: dart flutter


【解决方案1】:

正如 Günter 在他的评论中所说,您需要为每个卡片/列表项建立一个索引。到目前为止,我见过的最好的选择是使用带有 itemBuilder 的列表视图,如下所示:

return new ListView.builder(
  itemBuilder: (context, index) => new Card(
      shape: selected[index]
          ? new RoundedRectangleBorder(
          side: new BorderSide(color: Colors.blue, width: 2.0),
          borderRadius: BorderRadius.circular(4.0))
          : new RoundedRectangleBorder(
          side: new BorderSide(color: Colors.white, width: 2.0),
          borderRadius: BorderRadius.circular(4.0)),
          ...
  itemCount: selected.length, // Tell itemBuilder how many items the list has
  ... // Rest of your code...
);

【讨论】:

  • 感谢您的帮助!
  • 谢谢!很高兴能提供帮助。
【解决方案2】:

我认为您需要为每个复选框赋予它自己的身份。当您动态创建它们时,将它们称为 selected1、selected2 等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多