import 'dart:async';
import 'package:flutter/material.dart';
final GlobalKey _globalKey = GlobalKey();
class MyAnimatedList extends StatelessWidget {
const MyAnimatedList({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('AnimatedList'),
),
body: AnimatedListBody(
_globalKey,
),
floatingActionButton: FloatingActionButton(onPressed: () {
var state = _globalKey.currentState as _AnimatedListBodyState;
state.insterItem();
}),
);
}
}
class AnimatedListBody extends StatefulWidget {
const AnimatedListBody(Key? key) : super(key: key);
@override
State<AnimatedListBody> createState() => _AnimatedListBodyState();
}
class AnimateItem {
String title;
GlobalKey key;
AnimateItem(this.title) : key = GlobalKey();
}
class _AnimatedListBodyState extends State<AnimatedListBody> {
final _animateGlobalKey = GlobalKey<AnimatedListState>();
List<AnimateItem> list = [];
int count = 0;
void insterItem() {
list.add(AnimateItem('第$count条数据'));
count++;
_animateGlobalKey.currentState!.insertItem(list.length - 1);
}
Map<GlobalKey, bool> delStateMap = {};
void removeItem(int index, GlobalKey key) {
if (delStateMap[key] != true) {
delStateMap[key] = true;
var item = key.currentWidget;
list.removeAt(index);
_animateGlobalKey.currentState!.removeItem(
index,
(context, animation) {
return FadeTransition(
opacity: animation,
child: item,
);
},
);
Timer.periodic(const Duration(milliseconds: 1000), (timer) {
delStateMap.remove(key);
timer.cancel();
});
}
}
Widget _itemBuild(
BuildContext context, int index, Animation<double> animate) {
final item = list[index];
return FadeTransition(
opacity: animate,
child: ListTile(
key: item.key,
title: Text(item.title),
trailing: IconButton(
icon: const Icon(Icons.close),
onPressed: () {
removeItem(index, item.key);
},
),
),
);
}
@override
Widget build(BuildContext context) {
return AnimatedList(
key: _animateGlobalKey,
initialItemCount: list.length,
itemBuilder: _itemBuild,
);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】