gpt4 book ai didi

Flutter 动画列表在动画移除项目时显示列表元素两次

转载 作者:IT王子 更新时间:2023-10-29 06:56:35 25 4
gpt4 key购买 nike

我创建了一个列表来尝试显示我遇到的 flutter 问题。

每次单击列表项按钮时,其下方的按钮都会被移除。正如您从下面的 gif 中看到的那样,当您单击按钮时,它会创建底部元素的第二个副本。

enter image description here

暂停的中间动画看起来像这样:

enter image description here

为了创建 AnimtedList,我首先给它一个全局键:

final GlobalKey<AnimatedListState> _ListKey = GlobalKey();

然后我创建一个这样的颜色列表:

List<Color> listColors = [Colors.orange, Colors.green, Colors.red, Colors.blue, Colors.yellowAccent, Colors.brown,];

然后我有一个像这样的 AnimatedList,它具有 listColors 长度的初始大小和 _buildListItem 的子级:

AnimatedList(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
key: _ListKey,
initialItemCount: listColors.length,
itemBuilder: (context, index, animation) {
return _buildListItem(index, animation);
},
),

这是构建列表项的方法,一个具有 List_Element 子元素的 SizeTransition:

    SizeTransition _buildListItem(int index, Animation<double> animation,) {
return SizeTransition(
sizeFactor: animation,
child: List_Element(index),
);
}

这是 List_Element,列表的行带有一个简单的按钮,颜色由颜色列表的索引设置。在 onPressed 方法中,我调用 removeFromListFunction 来删除下面的行。

class List_Element extends StatefulWidget {
int listIndex;
List_Element(int listIndex) {
this.listIndex = listIndex;
}

@override
_List_ElementState createState() => _List_ElementState();
}

class _List_ElementState extends State<List_Element> {

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(4),
child: Container(
width: double.infinity,
height: 50,
child: RaisedButton(
color: listColors[widget.listIndex],
elevation: 2,
child: Center(child: Text("List item " + widget.listIndex.toString(), style: TextStyle(fontWeight: FontWeight.bold),),),
onPressed: (){
_removeFromList(widget.listIndex);

},
),
),
);
}
}

这是 removeFromList 函数:

void _removeFromList(int index) {
listColors.remove(int);
_ListKey.currentState.removeItem(index+1,
(BuildContext context, Animation<double> animation) {
return _buildListItem(index, animation);
});
}

我不确定这是动画列表的问题,还是我的实现有问题。

谢谢你的帮助

最佳答案

void _removeFromList(int index) {
listColors.remove(int);
_ListKey.currentState.removeItem(index+1,
(BuildContext context, Animation<double> animation) {
//return _buildListItem(index, animation);
return _buildListItem(index + 1, animation);
});
}

如果我没记错的话,发生这种情况的原因是您在重建“已删除”按钮时传递了“当前单击”按钮的索引。因此它再次显示单击的按钮。

关于Flutter 动画列表在动画移除项目时显示列表元素两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56619041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com