为每个 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;
  });
}

您正在将单个变量分配给所有列表元素,因为它是高度!所以,如果你改变它,所有这些都会改变,因为它们实际上是一个单一的变量。 解决方案是以下之一:

  1. 定义一个双精度列表或一个单独包含每个元素高度的映射。
  2. 为项目的其余部分使用一个不可见的容器,以及一个布尔值列表,当项目被点击时,将状态对应的布尔值设置为 true,并更改该不可见容器的可见性。