Dart 使用AnimatedList的颤振解除撤销动画
代码: 为简单起见,我正在使用Dart 使用AnimatedList的颤振解除撤销动画,dart,flutter,Dart,Flutter,代码: 为简单起见,我正在使用定时器在1500毫秒后添加删除的数字。一切都很好,但当列表更新(1500毫秒后)时,我看不到动画,我如何使用动画参数为列表设置动画 截图: TL;DR:当项目放回AnimatedList中时,如何生成动画?要使用AnimatedList插入项目,需要调用方法AnimatedListState.insertItem(int index) 您还可以使用GlobalKey AnimatedList.of(context).insertItem(0); final f
定时器
在1500毫秒后添加删除的数字。一切都很好,但当列表更新(1500毫秒后)时,我看不到动画,我如何使用动画
参数为列表设置动画
截图:
TL;DR:当项目放回
AnimatedList
中时,如何生成动画?要使用AnimatedList
插入项目,需要调用方法AnimatedListState.insertItem(int index)
您还可以使用GlobalKey
AnimatedList.of(context).insertItem(0);
final foo=GlobalKey();
@凌驾
小部件构建(构建上下文){
返回动画列表(
钥匙:福,
// ...
);
}
//别处
foo.currentState.insertItem(0);
List\u List=List.generate(5,(i)=>i);
GlobalKey _key=GlobalKey();
int_指数;
小部件构建(构建上下文){
返回脚手架(
正文:_myWidget(),
appBar:appBar(
行动:[
图标按钮(
图标:图标(Icons.undo),
已按下:(){
_列表。插入(_索引,_索引);
_key.currentState.insertItem(_索引);
},
),
],
),
);
}
Widget_myWidget(){
返回动画列表(
键:_键,
initialItemCount:_list.length,
itemBuilder:(上下文、索引、动画){
可驳回的回报(
key:key(“${u list[index]}”),
child:SizeTransition(
sizeFactor:动画,
子项:ListTile(标题:Text(“Item=${{u list[index]}”),
),
背景:容器(颜色:Colors.green),
onDismissed:(方向){
设置状态(){
_指数=指数;
_列表。删除(索引);
_key.currentState.removietem(索引,(u,u)=>Container());
});
},
);
},
);
}
您基本上没有使用传递给itemBuilder
的最后一个参数,而且我无法理解您需要什么,Timer
for…@pskink Timer只是用来将值插入列表,它不做任何其他事情。当项目被添加回列表时,我想要动画,不知道在哪里使用动画
老实说,我不明白:你使用Dismissible
插入一个新项目?@pskink,实际上,当你看到像Gmail这样的应用程序允许你撤销对对话的删除时,它会将项目添加回列表。我一直在寻找类似的东西。AnimatedListState#insertItem
不起作用吗?我试过了,但我的代码坏了,AnimatedList
和Dismissible
中使用的键使代码坏了。你能写下完整的工作代码吗(使用我发布的代码)?
AnimatedList.of(context).insertItem(0);
final foo = GlobalKey<AnimatedListState>();
@override
Widget build(BuildContext context) {
return AnimatedList(
key: foo,
// ...
);
}
// elsewhere
foo.currentState.insertItem(0);
List<int> _list = List.generate(5, (i) => i);
GlobalKey<AnimatedListState> _key = GlobalKey();
int _index;
Widget build(BuildContext context) {
return Scaffold(
body: _myWidget(),
appBar: AppBar(
actions: <Widget>[
IconButton(
icon: Icon(Icons.undo),
onPressed: () {
_list.insert(_index, _index);
_key.currentState.insertItem(_index);
},
),
],
),
);
}
Widget _myWidget() {
return AnimatedList(
key: _key,
initialItemCount: _list.length,
itemBuilder: (context, index, animation) {
return Dismissible(
key: Key("${_list[index]}"),
child: SizeTransition(
sizeFactor: animation,
child: ListTile(title: Text("Item = ${_list[index]}")),
),
background: Container(color: Colors.green),
onDismissed: (direction) {
setState(() {
_index = index;
_list.removeAt(index);
_key.currentState.removeItem(index, (_, __) => Container());
});
},
);
},
);
}