Loops 如何在flatter中循环图标?
我有一个数据列表,我想声明每个列表都有一个图标。。。每当用户单击图标时。。图标将更改为另一个图标。。这是密码Loops 如何在flatter中循环图标?,loops,flutter,widget,icons,Loops,Flutter,Widget,Icons,我有一个数据列表,我想声明每个列表都有一个图标。。。每当用户单击图标时。。图标将更改为另一个图标。。这是密码 ListView.builder( itemCount: data.length, itemBuilder: (context, index) { return Column( children: <Widget>[
ListView.builder(
itemCount: data.length,
itemBuilder: (context, index) {
return Column(
children: <Widget>[
ListTile(
leading: InkWell(
onTap: () {
setState((){
match=true;
});
},
child:
match
? Icons.check
: Icons.error
),
title: Text(data[index],),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Text("subs here.."),
],
),
],
),
),
],
);
}),
ListView.builder(
itemCount:data.length,
itemBuilder:(上下文,索引){
返回列(
儿童:[
列表砖(
引导:InkWell(
onTap:(){
设置状态(){
匹配=真;
});
},
儿童:
比赛
?图标。检查
:Icons.error
),
标题:文本(数据[索引],),
副标题:专栏(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
划船(
儿童:[
文本(“此处的子项…),
],
),
],
),
),
],
);
}),
从那个密码。。用户单击第一个图标后。。。列表视图生成器中的所有图标都已更改。。是否有办法仅更改我单击的图标的图标(不是所有图标)?您可以维护所选列表小部件的索引,就像您为匹配变量所做的那样
setState((){
match=true;
_index = index;
});
然后添加一个条件,如
match && _index == index
? Icons.check
: Icons.error
),
您可以维护所选列表小部件的索引,就像您为匹配变量所做的那样
setState((){
match=true;
_index = index;
});
然后添加一个条件,如
match && _index == index
? Icons.check
: Icons.error
),
在自己的有状态小部件中分离列表项,以便每个列表项都可以保持自己的状态
class ListItem extends StatefulWidget {
@override
_ListItemState createState() => _ListItemState();
}
class _ListItemState extends State<ListItem> {
bool match = false;
@override
Widget build(BuildContext context) {
return ListTile(
leading: InkWell(
onTap: () {
setState(() {
match = true;
});
},
child: Icon(match ? Icons.check : Icons.error)),
title: Text(
"asd",
),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Text("subs here.."),
],
),
],
),
);
}
}
在自己的有状态小部件中分离列表项,以便每个列表项都可以保持自己的状态
class ListItem extends StatefulWidget {
@override
_ListItemState createState() => _ListItemState();
}
class _ListItemState extends State<ListItem> {
bool match = false;
@override
Widget build(BuildContext context) {
return ListTile(
leading: InkWell(
onTap: () {
setState(() {
match = true;
});
},
child: Icon(match ? Icons.check : Icons.error)),
title: Text(
"asd",
),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Text("subs here.."),
],
),
],
),
);
}
}
我喜欢这个答案。它是相当优化的。这应该标记为正确答案。嗨。。等一下,我会试试看,然后让你知道结果。它很好地工作,就像我想要的一样。。非常感谢你的帮助:我喜欢这个答案。它是相当优化的。这应该标记为正确答案。嗨。。等一下,我会试试看,然后让你知道结果。它很好地工作,就像我想要的一样。。非常感谢您的帮助:DHi。。我会试试看,然后告诉你结果。。我会试试看,然后告诉你结果