A Flutter library to easily display a list with animated changes from a Stream<List<E>>
.
It's like StreamBuilder + ListView.Builder
with animations.
Taken inspiration from the Animated List Sample and Java-diff-utils
dependencies:
animated_stream_list: ^1.1.0
import 'package:animated_stream_list/animated_stream_list.dart';
@required Stream<List<E>> streamList;
@required AnimatedStreamListItemBuilder<E> itemBuilder;
@required AnimatedStreamListItemBuilder<E> itemRemovedBuilder;
Duration duration;
AnimatedStreamListItemBuilder<T>
is just a function which builds a tile
typedef Widget AnimatedStreamListItemBuilder<T>(
T item,
int index,
BuildContext context,
Animation<double> animation,
);
// create tile view as the user is going to see it, attach any onClick callbacks etc.
Widget _createTile(String item, Animation<double> animation) {
return SizeTransition(
axis: Axis.vertical,
sizeFactor: animation,
child: const Text(item),
);
}
// what is going to be shown as the tile is being removed, usually same as above but without any
// onClick callbacks as, most likely, you don't want the user to interact with a removed view
Widget _createRemovedTile(String item, Animation<double> animation) {
return SizeTransition(
axis: Axis.vertical,
sizeFactor: animation,
child: const Text(item),
);
}
final Stream<List<String>> list = // get list from some source, like BLOC
final animatedView = AnimatedStreamList<String>(
streamList: list,
itemBuilder: (String item, int index, BuildContext context, Animation<double> animation) =>
_createTile(item, animation),
itemRemovedBuilder: (String item, int index, BuildContext context, Animation<double> animation) =>
_createRemovedTile(item, animation),
);
}
List<E> initialList;
Initial list
Equalizer equals;
Compares items for equality, by default it uses the ==
operator, it's critical this works properly.
Equalizer
is function, that, given two items of the same type, returns true if they are equal, false otherwise
typedef bool Equalizer(dynamic item1, dynamic item2);
You can check the Animated List Documentation for the rest:
Axis scrollDirection;
bool reverse;
ScrollController scrollController;
bool primary;
ScrollPhysics scrollPhysics;
bool shrinkWrap;
EdgeInsetsGeometry padding;
This amazing package was originally created by Dawid Bota over here. I have taken over the development with his blessing and all tracking will be done on this repo moving forward.