Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 使用AnimatedList的颤振解除撤销动画_Dart_Flutter - Fatal编程技术网

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());
          });
        },
      );
    },
  );
}