You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.2 KiB
46 lines
1.2 KiB
import "package:flutter/material.dart";
|
|
|
|
class ListModel<E> {
|
|
ListModel({
|
|
@required this.listKey,
|
|
@required this.removedItemBuilder,
|
|
Iterable<E> initialItems,
|
|
}) : assert(listKey != null),
|
|
assert(removedItemBuilder != null),
|
|
_items = List<E>.from(initialItems ?? <E>[]);
|
|
|
|
final GlobalKey<AnimatedListState> listKey;
|
|
final dynamic removedItemBuilder;
|
|
final List<E> _items;
|
|
|
|
AnimatedListState get _animatedList => listKey.currentState;
|
|
|
|
void insert(int index, E item) {
|
|
_items.insert(index, item);
|
|
_animatedList.insertItem(index);
|
|
}
|
|
|
|
void edit(int index, E item) {
|
|
//_items.insert(index, item);
|
|
_items[index] = item;
|
|
//_animatedList.insertItem(index);
|
|
}
|
|
|
|
E removeAt(int index) {
|
|
final E removedItem = _items.removeAt(index);
|
|
if (removedItem != null) {
|
|
_animatedList.removeItem(index,
|
|
(BuildContext context, Animation<double> animation) {
|
|
return removedItemBuilder(removedItem, context, animation);
|
|
});
|
|
}
|
|
return removedItem;
|
|
}
|
|
|
|
int get length => _items.length;
|
|
|
|
E operator [](int index) => _items[index];
|
|
|
|
int indexOf(E item) => _items.indexOf(item);
|
|
}
|