Taming Flutter Infinite Scroll (Part 2): Turning ScrollController into a Reactive State Machine with CubitSignalMixin A developer introduced CubitSignalMixin and BlocSignalMixin from the bloc_signals package to turn Flutter's ScrollController into a reactive state machine, overcoming Dart's single-inheritance limitation. The mixins add state management and event handling capabilities directly to ScrollController, eliminating the need for third-party pagination packages and reducing boilerplate. In Part 1: Taming Flutter Infinite Scroll: Why 3 Lines of async Missed the Point, and How BlocSignal Fixes It https://dev.to/gde/taming-flutter-infinite-scroll-why-3-lines-of-async-missed-the-point-and-how-blocsignal-fixes-it-3n48 , we explored why wrapping mutable state in async generators and StreamIterator cracks under pressure when users rapidly fling a list. We demonstrated how BlocSignal ’s streamless droppable transformer solves thumb-flinging race conditions synchronously at the event boundary without Rx streams or microtask lag. Yet, even after solving event concurrency with a pure BLoC, many Flutter developers are left with a nagging architectural itch. Search pub.dev for "infinite scroll" or "pagination" , and you will find dozens of packages— infinite scroll pagination , lazy load scrollview , flutter pagewise , loadmore . It is practically a rite of passage for every Flutter developer to install at least one of them. Why do these packages exist in such numbers? Because implementing pagination with standard Flutter controllers requires tedious widget-level plumbing: StatefulWidget . ScrollController . scrollController.addListener onScroll in initState . removeListener and scrollController.dispose in dispose . offset = maxScrollExtent 0.9 . context.read