为每个 ListView 元素分别设置状态。扑
Set state separately for each ListView element. Flutter
我的 ListView 的每个元素都是 AnimatedContainer
AnimatedContainer(
height: _height,
...)
在通过 setState 更改 _height 时,它当然适用于每个 ListView 元素。
Future<void> _changeHeight() async {
setState(() {
_height = 2;
});}
如何为每个元素AnimatedContainer分别设置_height?
不使用双精度类型的 _height
变量,而是使用 key/value 映射,键作为列表项的索引,值作为其高度
Map<int, double> heights = {};
要使用的高度:
AnimatedContainer(
height: heights[index]!,
//...
)
并设置高度:
Future<void> _changeHeight() async {
setState(() {
heights[index] = 2;
});
}
您正在将单个变量分配给所有列表元素,因为它是高度!所以,如果你改变它,所有这些都会改变,因为它们实际上是一个单一的变量。
解决方案是以下之一:
- 定义一个双精度列表或一个单独包含每个元素高度的映射。
- 为项目的其余部分使用一个不可见的容器,以及一个布尔值列表,当项目被点击时,将状态对应的布尔值设置为 true,并更改该不可见容器的可见性。
我的 ListView 的每个元素都是 AnimatedContainer
AnimatedContainer(
height: _height,
...)
在通过 setState 更改 _height 时,它当然适用于每个 ListView 元素。
Future<void> _changeHeight() async {
setState(() {
_height = 2;
});}
如何为每个元素AnimatedContainer分别设置_height?
不使用双精度类型的 _height
变量,而是使用 key/value 映射,键作为列表项的索引,值作为其高度
Map<int, double> heights = {};
要使用的高度:
AnimatedContainer(
height: heights[index]!,
//...
)
并设置高度:
Future<void> _changeHeight() async {
setState(() {
heights[index] = 2;
});
}
您正在将单个变量分配给所有列表元素,因为它是高度!所以,如果你改变它,所有这些都会改变,因为它们实际上是一个单一的变量。 解决方案是以下之一:
- 定义一个双精度列表或一个单独包含每个元素高度的映射。
- 为项目的其余部分使用一个不可见的容器,以及一个布尔值列表,当项目被点击时,将状态对应的布尔值设置为 true,并更改该不可见容器的可见性。