query_kit_flutter 1.0.0
query_kit_flutter: ^1.0.0 copied to clipboard
Flutter binding for query_kit: a provider, controllers, builder widgets, a State mixin and context.query. An AI-coded community port, not affiliated with TanStack.
Changelog #
1.0.0 #
First release. query_kit_flutter is the Flutter binding for
query_kit, a Dart port of TanStack
Query, and re-exports it. It depends on Flutter, meta and query_kit and
on nothing else. From here on, a breaking change is a major version.
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. It is a community port, not affiliated with or endorsed by TanStack.
Setup
QueryClientProviderplaces aQueryClientabove the tree and mounts it;QueryClientProvider.createbuilds and owns one.of,readandmaybeOffind it.- The app lifecycle drives the client's focus state, so queries refetch when
the app returns to the foreground;
inactiveis read per platform andisAppShownoverrides the mapping. - Connectivity is opt-in through
OnlineStatus.fixedorOnlineStatus.stream; nothing is installed by default.
Four equal ways to read a query
context.query(options)andcontext.selectQueryin any widget.QueryBuilderandQuerySelectBuilder, theStreamBuildershape.QueryMixinon aState:watchQuery,watchSelectQuery,watchInfiniteQuery,watchMutation.QueryController, aValueListenable<QueryResult<T>>that works without widgets and with any package that reads a listenable.
Infinite queries and mutations in the same four shapes:
context.infiniteQuery, InfiniteQueryBuilder, watchInfiniteQuery,
InfiniteQueryController (with paging on the controller), and
context.mutation, MutationBuilder, watchMutation, MutationController
(with mutate, mutateAsync, reset and cancel).
Rebuilds
- A widget rebuilds when its result changes.
selectnarrows the data it sees;buildWhen, taken by every builder and every read (context.query,watchQuery, …), decides when it rebuilds. - Results that arrive during a build are delivered after the frame.
Beside the four styles
QueryListener,InfiniteQueryListenerandMutationListenerfor side effects (snackbars, navigation), withlistenWhen.QueriesBuilderandQueriesControllerfor a dynamic list of queries; the core'scombineover results of different types, whichever call style read them.MutationStateController(and.typed) for cache-wide mutation state,IsFetchingControllerfor a global loading indicator.
Testing
- Controllers are testable without widgets. A widget test ends with a short
teardown — take the tree down,
clear()the client — documented in the README and the testing guide; nothing test-only is exported.
Requires Flutter 3.27 or later.