Hibok
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

46 líneas
1.2 KiB

  1. import 'package:flutter/material.dart';
  2. class ListModel<T> {
  3. final GlobalKey<AnimatedListState> listKey;
  4. final List<T> _items;
  5. ListModel({
  6. @required this.listKey,
  7. List<T> initialItems,
  8. }) : assert(listKey != null),
  9. _items = initialItems ?? <T>[];
  10. AnimatedListState get _animateList => listKey.currentState;
  11. int get length => _items.length;
  12. T operator [](int index) => _items[index];
  13. int indexOf(T item) => _items.indexOf(item);
  14. void insert(int index, T item) {
  15. _items.insert(index, item);
  16. _animateList.insertItem(index);
  17. }
  18. void remove(T item) {
  19. int index = _items.indexOf(item);
  20. _items.remove(item);
  21. _animateList.removeItem(index,
  22. (BuildContext context, Animation<double> animation) {
  23. return Container();
  24. });
  25. }
  26. void add(T item) {
  27. int curLen = _items.length;
  28. _items.insert(curLen, item);
  29. _animateList.insertItem(curLen, duration: Duration(milliseconds: 100));
  30. var scrollCtrl = _animateList.widget.controller;
  31. Future.delayed(Duration(milliseconds: 300), () {
  32. scrollCtrl.animateTo(scrollCtrl.position.maxScrollExtent,
  33. curve: Curves.ease, duration: Duration(milliseconds: 300));
  34. });
  35. }
  36. }