我有一个listView显示元素的水平列表。
我在每个框上都放置了一个图标。当用户选择或按下该特定图标(添加按钮)时,它应使该图标不可见,以便用户无法再次按下它。
我的问题是,对于该listView的所有元素,所有图标随后都变得不可见。
我怎样才能解决这个问题?
我发现解决方案将与某个键值或多个键有关。因此我向Visible父窗口小部件添加了一个键,但没有任何区别。
这是代码
Container(
margin: EdgeInsets.symmetric(vertical: 20, horizontal: 10),
height: MediaQuery.of(context).size.height*0.4,
width: MediaQuery.of(context).size.width,
child:
ListView.builder(
primary: false,
shrinkWrap: true,
scrollDirection: Axis.horizontal,
itemCount: mylist.length,
itemBuilder: (context, listItemIndicator)
{
// Card details here
Positioned(bottom: 0, right: 0,
child: Visibility(key: UniqueKey(),
visible: isVisible == true ? true : false,
maintainSize: true,
maintainAnimation: true,
maintainState: true,
child: IconButton(
icon: Icon(Icons.add_box), iconSize: 40,
onPressed: ()
{
isVisible = false; //now all elements disappear, not just the one I pressed.
}
}
),
),
),
卡显示为带有+图标。但是正如我提到的,当我按下+图标时,所有元素的图标都变为不可见-不仅仅是我按下的图标。
最佳答案
所有图标都消失了,因为每个项目的isVisible
都相同。
您可以创建“可见性” map
Map<int, bool> visibilities = Map.fromIterable(
mylist,
key: (k) => mylist.indexOf(k),
value: (_) => true,
);
然后
Visibility(
visible: visibilities[listItemIndicator],
maintainSize: true,
maintainAnimation: true,
maintainState: true,
child: IconButton(
icon: Icon(Icons.add_box),
iconSize: 40,
onPressed: () {
visibilities[listItemIndicator] = false;
},
),
)
或者您可以为该按钮创建有状态的小部件
class CustomButton extends StatefulWidget {
@override
_CustomButtonState createState() => _CustomButtonState();
}
class _CustomButtonState extends State<CustomButton> {
bool visible = true;
@override
Widget build(BuildContext context) {
return Visibility(
visible: visible,
maintainSize: true,
maintainAnimation: true,
maintainState: true,
child: IconButton(
icon: Icon(Icons.add_box),
iconSize: 40,
onPressed: () {
setState(() {
visible = false;
});
},
),
);
}
}
关于flutter - 如何在Flutter中的onPressed中使图标在ListView中不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58243039/