flutter_hooks
flutter_hooks copied to clipboard
Add hook "useFixedExtentScrollController"
trafficstars
Is your feature request related to a problem? Please describe. Add a hook for FixedExtentScrollController
Describe the solution you'd like
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
/// Creates [FixedExtentScrollController] that will be disposed automatically.
///
/// See also:
/// - [FixedExtentScrollController]
FixedExtentScrollController useFixedExtentScrollController({
int initialItem = 0,
List<Object?>? keys,
}) {
return use(
_FixedExtentScrollControllerHook(
initialItem: initialItem,
keys: keys,
),
);
}
class _FixedExtentScrollControllerHook
extends Hook<FixedExtentScrollController> {
const _FixedExtentScrollControllerHook({
required this.initialItem,
super.keys,
});
final int initialItem;
@override
HookState<FixedExtentScrollController, Hook<FixedExtentScrollController>>
createState() => _FixedExtentScrollControllerHookState();
}
class _FixedExtentScrollControllerHookState extends HookState<
FixedExtentScrollController, _FixedExtentScrollControllerHook> {
late final controller = FixedExtentScrollController(
initialItem: hook.initialItem,
);
@override
FixedExtentScrollController build(BuildContext context) => controller;
@override
void dispose() => controller.dispose();
@override
String get debugLabel => 'useFixedExtentScrollController';
}
Additional context
Example:
ListWheelScrollView(
controller: scrollController,
itemExtent: 25,
squeeze: 0.8,
onSelectedItemChanged: (value) {
selected.value = value;
},
children: counts.map(
(index) => OnClick(
onTap: () {
selected.value = index;
scrollController.jumpToItem(index);
},
https://dartpad.dev/?id=a8d241f3fcc2f73a43b77860e6b5f066