Skip to main content

query_kit_hooks 0.1.0 copy "query_kit_hooks: ^0.1.0" to clipboard
query_kit_hooks: ^0.1.0 copied to clipboard

TanStack Query's hooks for Flutter: useQuery, useMutation, useInfiniteQuery and the rest on flutter_hooks, over query_kit_flutter. AI-coded, not affiliated with TanStack.

TanStack Query hooks for Flutter | query_kit_hooks #

useQuery, useMutation, useInfiniteQuery and the rest of React Query's hooks, on flutter_hooks. They read the same cache, with the same rules, as the four call styles of query_kit_flutter, which this package builds on and re-exports.

Documentation: the hooks guide on query-kit.dualmeta.io · API reference

AI-coded. query_kit is an entirely AI-coded project: all code, tests and documentation were written by AI coding agents (Anthropic's Claude). A human maintainer set the goals and reviews releases, but did not write the code.

A port, not affiliated. The behaviour is TanStack Query's, and upstream's own hook tests are ported case by case and run against these hooks, with thanks to Tanner Linsley and the TanStack team. This package is not affiliated with, endorsed by or connected to them; please take problems to this repository's issues, not to TanStack.

Why a separate package #

query_kit_flutter depends on nothing beyond Flutter, so it cannot use flutter_hooks. This package can. If your widgets are already HookWidgets, the hooks read a query the way the rest of your hooks read state. If they are not, you do not need this package: the binding's four call styles do the same job, and none of them is behind the hooks.

Install #

flutter pub add query_kit_hooks flutter_hooks

This package brings query_kit_flutter with it and re-exports it, so its import gives you the whole binding. flutter_hooks goes in your pubspec.yaml as well, because your files import it for HookWidget: this package does not re-export it, and the depend_on_referenced_packages lint asks for a direct dependency on every package a file imports.

import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:query_kit_hooks/query_kit_hooks.dart';

Requires Flutter 3.27 or later.

Reading a query #

Provide a QueryClient with a QueryClientProvider, exactly as for the binding. Then read a query from a HookWidget:

class TasksScreen extends HookWidget {
  const TasksScreen({super.key});

  @override
  Widget build(BuildContext context) {
    final tasks = useQuery(
      QueryObserverOptions<List<Task>>(
        queryKey: QueryKey(<Object?>['tasks']),
        queryFn: (context) => api.listTasks(signal: context.signal),
      ),
    );

    return switch (tasks) {
      QueryPending() => const Center(child: CircularProgressIndicator()),
      QueryError(:final error) => Center(child: Text('$error')),
      QuerySuccess(:final data) => ListView(
          children: [for (final task in data) Text(task.name)],
        ),
    };
  }
}

The hook takes the same options and returns the same sealed QueryResult as context.query. A different queryKey on a later build switches the same observer to the other query. Unmounting the widget lets the query go.

The hooks in 0.1.0 #

Hook Does what
useQuery, useSelectQuery one query, with or without select
useInfiniteQuery a paged query
useMutation a mutation, as a MutationController
useQueries, useCombinedQueries a list of queries, raw or combined
useIsFetching, useIsMutating how many queries are fetching, how many mutations are pending
useMutationState, useTypedMutationState a selection over the mutation cache, untyped or typed
usePrefetchQuery, usePrefetchInfiniteQuery start a fetch without reading it
useQueryClient the client of the nearest provider

The hooks that read one result — useQuery, useSelectQuery, useInfiniteQuery, useMutation and useCombinedQueries — take a buildWhen, as the binding's call styles do. useQueries takes none, as QueriesBuilder takes none. No hook rebuilds for a notification carrying what the widget is already showing.

What each hook takes and returns, the rules of hooks, what a throw in build costs and how to test a HookWidget are in the hooks guide.

License and credits #

MIT. query_kit is a port of TanStack Query by Tanner Linsley and contributors, whose MIT notice is kept in LICENSE-TANSTACK. The hooks run on flutter_hooks by Remi Rousselet. Bugs and questions go to the issue tracker.

0
likes
160
points
113
downloads

Documentation

Documentation
API reference

Publisher

verified publisherdualmeta.io

Weekly Downloads

TanStack Query's hooks for Flutter: useQuery, useMutation, useInfiniteQuery and the rest on flutter_hooks, over query_kit_flutter. AI-coded, not affiliated with TanStack.

Homepage
Repository (GitHub)
View/report issues
Contributing

Topics

#hooks #flutter-hooks #data-fetching #tanstack-query #react-query

License

MIT (license)

Dependencies

flutter, flutter_hooks, query_kit_flutter

More

Packages that depend on query_kit_hooks