flutter - Flutter中的动画ListView项目位置变化
问题描述
我有一个ListView
它的排序取决于它的项目状态:Item
模型对象有一个bool
属性,isActive
,并且所有Item
具有 值的 strue
都在所有具有 值的 s 之前排序false
。点击一个项目会切换它的isActive
状态。设置状态的逻辑不在列表本身中完成;相反,它是由一个 BLoC 执行的,它也知道如何对项目进行排序。结果,所有列表获得的List<Item>
是正确排序的流。
目前,结果非常不和谐 - 被点击的项目从其位置消失并出现在列表中的其他位置,我想让它更平滑,比如可能为位置变化设置动画 - 类似于做什么ReorderableListView
,但以编程方式。我不知道该怎么做,我开始搞砸了,AnimatedList
但我不确定这是我用例的正确组件 - 它可以动画删除和添加,这不是我正在做的事情(我可以添加一个删除后立即添加,但这似乎很复杂)。
这是我到目前为止的代码(简化),它支持动画删除:
class ItemListWidget extends StatelessWidget {
final items = [
'Item A',
'Item B',
'Item C',
'Item D',
'Item E',
];
@override
Widget build(BuildContext context) {
return AnimatedList(
initialItemCount: items.length,
itemBuilder: (context, index, animation) {
final item = items[index];
return ListTile(
title: Text(item),
onTap: () {
final state = AnimatedList.of(context);
state.removeItem(
index,
(context, animation) => SizeTransition(
sizeFactor: animation,
child: ListTile(title: Text(item)),
),
// duration: const Duration(seconds: 5),
);
items.removeAt(index);
},
);
},
);
}
}
它确实删除了该项目,当删除动画准备好时,我现在需要以某种方式在不同的索引处再次添加该项目。但这似乎不对,我认为我无法为该位置设置动画
另一件事是我对 API 很困惑,我不确定我是否正确使用它。我从不使用animation
参数 initemBuilder
因为我不明白我可以用它做什么。
如何在 Flutter 中实现这一点?
解决方案
推荐阅读
- web-crawler - Apache Nutch 1.17,将带有一些元数据的解析内容转储为 JSON
- laravel - Laravel 护照:分配范围以访问令牌覆盖 oauth/令牌路由
- python - Python 如何支持这个与运行时多态性相关的常见问题?
- java - WSL Bash 在 PATH 中找不到 java
- php - 对自定义 symfony 约束进行单元测试
- javascript - 使用带有负值的accounting.FormatMoney,Accounting.js
- javascript - 防止 .map 为不符合特定条件的值返回 undefined
- python - 我有一个python代码,在打印二维列表的最后一行打印了很多次,输出错误,我是初学者
- javascript - 如何在javascript中返回对象数组?
- laravel - 导入excel文件laravel时字段'id'没有默认值