setScrollController method

void setScrollController(
  1. ScrollController controller
)

Sets the scroll controller for auto-scrolling

Implementation

void setScrollController(ScrollController controller) {
  // Remove the old listener if it exists
  if (_scrollController != null && _scrollListener != null) {
    _scrollController!.removeListener(_scrollListener!);
  }

  _scrollController = controller;

  // Create and add new listener to detect manual scrolling
  _scrollListener = () {
    if (_scrollController?.hasClients == true) {
      // If user is dragging or a manual scroll action is happening
      if (_scrollController!.position.isScrollingNotifier.value) {
        _isManuallyScrolling = true;
        _lastManualScrollTime = DateTime.now();
        // debugPrint('USER SCROLL: Manual scrolling detected');
      } else if (_isManuallyScrolling) {
        // Reset after a short delay to allow animations to complete
        Future.delayed(const Duration(milliseconds: 300), () {
          if (DateTime.now().difference(_lastManualScrollTime).inMilliseconds >= 300) {
            _isManuallyScrolling = false;
            // debugPrint('USER SCROLL: Manual scrolling ended');
          }
        });
      }
    }
  };

  _scrollController?.addListener(_scrollListener!);
}