defineDataLoader<T> function

DataLoader<T> defineDataLoader<T>(
  1. DataFetcher<T> fetcher, {
  2. ValueGetter<T?>? defaults,
})

Creates a reusable DataLoader from a DataFetcher.

The returned loader tracks the lifecycle of the calling widget: it subscribes while mounted and disposes internal resources on unmount.

The optional defaults callback provides an initial value that is exposed before the first fetch completes.

Errors thrown by fetcher are captured by AsyncData and can be surfaced by the consumer.

Example:

final userLoader = defineDataLoader<String>(
  (context) => fetchUserName(context),
  defaults: () => 'Guest',
);

Implementation

DataLoader<T> defineDataLoader<T>(
  DataFetcher<T> fetcher, {
  ValueGetter<T?>? defaults,
}) {
  return (context) {
    final data = useAsyncData(
      context,
      () => fetcher(context),
      defaults: defaults,
    );

    onUnmounted(context, data.dispose);
    return data;
  };
}