import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; PagingController usePagingController({ required PageKeyType? Function(PagingState) getNextPageKey, required FutureOr> Function(PageKeyType) fetchPage, }) { return use( _PagingControllerHook( getNextPageKey: getNextPageKey, fetchPage: fetchPage, ), ); } class _PagingControllerHook extends Hook> { const _PagingControllerHook({ super.keys, required this.getNextPageKey, required this.fetchPage, }); final PageKeyType? Function(PagingState) getNextPageKey; final FutureOr> Function(PageKeyType) fetchPage; @override HookState< PagingController, Hook> > createState() => _PagingControllerHookState(); } class _PagingControllerHookState extends HookState< PagingController, _PagingControllerHook > { late final controller = PagingController( getNextPageKey: hook.getNextPageKey, fetchPage: hook.fetchPage, ); @override PagingController build(BuildContext context) => controller; @override void dispose() => controller.dispose(); @override String get debugLabel => 'usePagingController'; }