import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:scroll_to_index/scroll_to_index.dart'; /// Creates [AutoScrollController] that will be disposed automatically. /// /// See also: /// - [AutoScrollController] AutoScrollController useAutoScrollController({ double initialScrollOffset = 0.0, bool keepScrollOffset = true, String? debugLabel, Axis? axis, AutoScrollController? copyTagsFrom, double? suggestedRowHeight, Rect Function() viewportBoundaryGetter = defaultViewportBoundaryGetter, List? keys, }) { return use( _AutoScrollControllerHook( initialScrollOffset: initialScrollOffset, keepScrollOffset: keepScrollOffset, debugLabel: debugLabel, axis: axis, copyTagsFrom: copyTagsFrom, suggestedRowHeight: suggestedRowHeight, viewportBoundaryGetter: viewportBoundaryGetter, keys: keys, ), ); } class _AutoScrollControllerHook extends Hook { const _AutoScrollControllerHook({ required this.initialScrollOffset, required this.keepScrollOffset, required this.viewportBoundaryGetter, this.axis, this.copyTagsFrom, this.suggestedRowHeight, this.debugLabel, List? keys, }) : super(keys: keys); final double initialScrollOffset; final bool keepScrollOffset; final String? debugLabel; final Axis? axis; final AutoScrollController? copyTagsFrom; final double? suggestedRowHeight; final Rect Function() viewportBoundaryGetter; @override HookState> createState() => _AutoScrollControllerHookState(); } class _AutoScrollControllerHookState extends HookState { late final controller = AutoScrollController( initialScrollOffset: hook.initialScrollOffset, keepScrollOffset: hook.keepScrollOffset, debugLabel: hook.debugLabel, axis: hook.axis, copyTagsFrom: hook.copyTagsFrom, suggestedRowHeight: hook.suggestedRowHeight, viewportBoundaryGetter: hook.viewportBoundaryGetter, ); @override AutoScrollController build(BuildContext context) => controller; @override void dispose() => controller.dispose(); @override String get debugLabel => 'useAutoScrollController'; }