import 'dart:async'; import 'package:flutter/material.dart'; import 'package:gmalpha_flutter/WebModel/service/remote/entity/ActivityReportEntity.dart'; class AnimatedListSample extends StatefulWidget { final List pictorialList; AnimatedListSample({Key key, this.pictorialList}) : super(key: key); @override _AnimatedListSampleState createState() => new _AnimatedListSampleState(); } class _AnimatedListSampleState extends State { final GlobalKey _listKey = new GlobalKey(); final List _list = []; var _timer; @override void initState() { super.initState(); } Widget _buildItem(BuildContext context, int index, Animation animation) { return new CardItem( animation: animation, item: _list[index] ); } @override Widget build(BuildContext context) { widget.pictorialList.forEach((item) { var index = widget.pictorialList.indexOf(item); var seconds = 500 * index; _timer = Timer(Duration(milliseconds: seconds), (){ final int length=_list.length; _list.insert(length, item); _listKey.currentState.insertItem(length, duration: Duration(milliseconds: seconds)); }); }); return Padding( padding: const EdgeInsets.all(16.0), child: new AnimatedList( key: _listKey, initialItemCount: _list.length, itemBuilder: _buildItem, ), ); } @override void dispose() { super.dispose(); _timer.dispose(); } } class CardItem extends StatelessWidget { final Animation animation; final item; CardItem({ Key key, this.animation, this.item }) : super(key: key); @override Widget build(BuildContext context) { TextStyle textStyle = Theme.of(context).textTheme.display1; return Padding( padding: const EdgeInsets.all(2.0), child: SizeTransition( axis: Axis.vertical, sizeFactor: animation, child: SizedBox( height: 100, child: Text('Item $item', style: textStyle), ) ) ); } }