@@ -124,7 +124,10 @@ class AutoAnimateSliverListController<T> {
124124 _currentItems = newItems;
125125
126126 final provider = _tickerProvider;
127- if (provider == null ) return ;
127+ if (provider == null ) {
128+ Future .microtask (() => _isAddingItem = false );
129+ return ;
130+ }
128131
129132 // Create animation controller for new item
130133 final moveController = AnimationController (
@@ -311,16 +314,17 @@ class AutoAnimateSliverListController<T> {
311314 });
312315 }
313316
314- /// Do not use this method directly, use [updateItems]
317+ /// Do not use this method directly
315318 void updateItems (List <T > updatedItems) => _items = updatedItems;
316319
317- /// Do not use this method directly, use [updateItemsWithAnimation]
320+ /// Do not use this method directly
318321 void updateItemsWithAnimation ({
319322 required TickerProvider tickerProvider,
320323 required List <T > updatedItems,
324+ bool forceUpdate = false ,
321325 }) {
322326 this ._tickerProvider = tickerProvider;
323- if (_isAddingItem || _isRemovingItem) return ;
327+ if (! forceUpdate && ( _isAddingItem || _isRemovingItem) ) return ;
324328
325329 final newItems = List <T >.from (_items);
326330 final newItemKeys = < String > {};
@@ -450,7 +454,7 @@ class AutoAnimateSliverListController<T> {
450454 }
451455
452456 void initialize ({required TickerProvider tickerProvider}) {
453- this ._tickerProvider ?? = tickerProvider;
457+ this ._tickerProvider = tickerProvider;
454458
455459 final currentItemsLength = _currentItems.length;
456460 for (var i = 0 ; i < currentItemsLength; i++ ) {
@@ -474,4 +478,28 @@ class AutoAnimateSliverListController<T> {
474478 values[i].moveController.dispose ();
475479 }
476480 }
481+
482+ /// Do not use this method directly
483+ /// Disposes all AnimationControllers and their tickers without disposing the controller itself.
484+ void disposeAnimations () {
485+ final values = _itemStates.values.toList ();
486+ final valuesLength = values.length;
487+ for (var i = 0 ; i < valuesLength; i++ ) {
488+ final controller = values[i].moveController;
489+ controller
490+ ..stop ()
491+ ..dispose ();
492+ }
493+ // Clear the map to prevent reuse of disposed controllers
494+ _itemStates.clear ();
495+ _itemKeys.clear ();
496+ _removingItems.clear ();
497+ _items.clear ();
498+ _currentItems = List <T >.from (_items);
499+ _isNewItemAddedAtTop = false ;
500+ _newItemHeight = 0.0 ;
501+ _isAddingItem = false ;
502+ _isRemovingItem = false ;
503+ _tickerProvider = null ;
504+ }
477505}
0 commit comments