FlutterError: ScrollController not attached to any scroll views
ID: flutter/scrollcontroller-not-attached
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| Flutter 3.10 | active | — | — | — |
| Flutter 3.13 | active | — | — | — |
| Flutter 3.16 | active | — | — | — |
Root Cause
ScrollController is used (e.g., .position, .offset, .animateTo) after it has been detached from all Scrollable widgets, typically due to a disposed state or incorrect lifecycle management.
generic中文
ScrollController 在从所有 Scrollable 小部件分离后被使用(例如 .position、.offset、.animateTo),通常是由于状态已释放或生命周期管理不当。
Official Documentation
https://api.flutter.dev/flutter/widgets/ScrollController-class.htmlWorkarounds
-
85% success Ensure ScrollController is created in initState and disposed in dispose, and only access its properties after the scroll view has built (e.g., using WidgetsBinding.instance.addPostFrameCallback).
Ensure ScrollController is created in initState and disposed in dispose, and only access its properties after the scroll view has built (e.g., using WidgetsBinding.instance.addPostFrameCallback).
-
92% success Check hasClients before accessing controller properties to avoid the error condition.
Check hasClients before accessing controller properties to avoid the error condition.
中文步骤
Ensure ScrollController is created in initState and disposed in dispose, and only access its properties after the scroll view has built (e.g., using WidgetsBinding.instance.addPostFrameCallback).
Check hasClients before accessing controller properties to avoid the error condition.
Dead Ends
Common approaches that don't work:
-
75% fail
Creates a new controller each rebuild, losing scroll position and causing memory leaks; the error persists if the old controller is still referenced.
-
90% fail
Does not address the root cause; the controller remains detached and further calls will still throw, leading to silent failures and broken UX.
-
60% fail
Global state causes conflicts when multiple scroll views share the same controller; detaching from one page breaks others.