import 'dart:async';
import 'package:flutter/material.dart';
class ListViewAni extends StatefulWidget {
const ListViewAni({super.key});
@override
State<ListViewAni> createState() => _ListViewAniState();
}
class _ListViewAniState extends State<ListViewAni> {
List<String> list = ['12', '23243'];
final globalKey = GlobalKey<AnimatedListState>();
bool flag = true;
Widget _buildItem(index) {
return ListTile(
title: Text(list[index]),
trailing: IconButton(
onPressed: () {
_deleteAct(index);
},
icon: Icon(Icons.delete),
),
);
}
void _deleteAct(index) {
print("删除的索引$index");
if (flag == true) {
flag = false;
setState(() {
globalKey.currentState!.removeItem(index, (context, animation) {
var removeItem = _buildItem(index);
list.removeAt(index); //删除数据源
return FadeTransition(//FadeTransition是动画效果,可以换
opacity: animation,
child: removeItem //执行动画的元素
);
});
});
//解决快速删除的bug
Timer.periodic(Duration(milliseconds: 500), (timer){
flag = true;
timer.cancel();
});
}
}
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("列表")),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
list.add("我是新增的数据");
globalKey.currentState!.insertItem(list.length - 1);
});
},
child: Text("+"),
),
body: AnimatedList(
key: globalKey,
initialItemCount: list.length,
itemBuilder: (content, index, animation) {
return FadeTransition(opacity: animation, child: _buildItem(index));
},
),
);
}
}