Dart 颤振复选框类:当我勾选一张卡片时,所有其他卡片也被选中 bool selected=false; 新卡( 形状:选定 ?新的圆形矩形边框( 侧面:新边框侧面(颜色:Colors.blue,宽度:2.0), 边界半径:边界半径。圆形(4.0)) :新的RoundedRectangleBorder( 侧面:新边框侧面(颜色:Colors.white,宽度:2.0), 边界半径:边界半径。圆形(4.0)), 孩子:新的一排( mainAxisAlignment:mainAxisAlignment.spaceBetween, 儿童:[ 新填料( 填充:新边缘设置。全部(8.0), 子项:新文本(${ticketGroups[i]['ticket\u name']}), 样式:consttextstyle( fontSize:15.0,fontFamily:“Poppins”), ), 新填料( 填充:新边缘设置。全部(8.0), 子项:新文本(ticketGroups[i][“used”].toString(), 样式:consttextstyle( fontSize:15.0,fontFamily:“Poppins”), ), 新复选框( 值:选中, 一旦更改:(值){ 设置状态(){ 选中=!选中; }); })
我只想勾选一张卡片,但是只要我勾选其中一张,所有的卡片都会被勾选。Dart 颤振复选框类:当我勾选一张卡片时,所有其他卡片也被选中 bool selected=false; 新卡( 形状:选定 ?新的圆形矩形边框( 侧面:新边框侧面(颜色:Colors.blue,宽度:2.0), 边界半径:边界半径。圆形(4.0)) :新的RoundedRectangleBorder( 侧面:新边框侧面(颜色:Colors.white,宽度:2.0), 边界半径:边界半径。圆形(4.0)), 孩子:新的一排( mainAxisAlignment:mainAxisAlignment.spaceBetween, 儿童:[ 新填料( 填充:新边缘设置。全部(8.0), 子项:新文本(${ticketGroups[i]['ticket\u name']}), 样式:consttextstyle( fontSize:15.0,fontFamily:“Poppins”), ), 新填料( 填充:新边缘设置。全部(8.0), 子项:新文本(ticketGroups[i][“used”].toString(), 样式:consttextstyle( fontSize:15.0,fontFamily:“Poppins”), ), 新复选框( 值:选中, 一旦更改:(值){ 设置状态(){ 选中=!选中; }); }),dart,flutter,Dart,Flutter,我只想勾选一张卡片,但是只要我勾选其中一张,所有的卡片都会被勾选。 此外,卡片是动态创建的,这会导致问题吗?我认为您需要为每个复选框指定自己的标识。当您动态创建它们时,请将它们称为selected1、selected2等。正如居特在评论中所说,您需要为每个卡片/列表项创建索引。目前为止,我看到的最佳选择是使用列表视图和项目建筑商,类似这样的: bool selected = false; new Card( shape: selected
此外,卡片是动态创建的,这会导致问题吗?我认为您需要为每个复选框指定自己的标识。当您动态创建它们时,请将它们称为selected1、selected2等。正如居特在评论中所说,您需要为每个卡片/列表项创建索引。目前为止,我看到的最佳选择是使用列表视图和项目建筑商,类似这样的:
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
值。您的代码不清楚如何处理该值。如何为每一行指定一个不同的selected值?上面列出了实现选择的所有函数,实际上就是它。请添加显示如何创建行的代码。从您使用的代码来看,这有点困难ovided。您还可以删除所有与布局相关的代码,以便更容易地了解代码的意图。布局与手头的问题无关。感谢您的帮助!谢谢!很高兴提供帮助。
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...
);