query_kit_flutter 1.0.4
query_kit_flutter: ^1.0.4 copied to clipboard
TanStack Query for Flutter: cached server data, background refetching, retries, mutations and infinite queries, read in four equal styles. AI-coded, not affiliated with TanStack.
Changelog #
1.0.4 #
QueryBuilder,QuerySelectBuilder,InfiniteQueryBuilder,QueriesBuilderandMutationBuilderapply new options, and a newclient, inbuildinstead of when their parent hands them a new widget. Options that throw while being applied — a new key whoseInitialData.computethrows, say, or aclientleft with noQueryClientProviderabove — used to leave the widget behind without disposing it, and its observer, with anyrefetchInterval, kept running after the screen was gone. Now the failure is an ordinary build error: the widget shows the error and, on the same client, keeps its observer, a refetch in flight and a running mutation, takes up the next options that apply, and releases everything when it goes. A change of client releases the old client's observer even when the new one cannot be made.context.queryandQueryMixinalways worked this way.- The documentation of
QueryMixinandcontext.queryno longer promises that nothing a reader shows loses its subscription. A nested builder kept in a field —late final— and reading through the outerStateorcontextis not re-run by that reader's own build that reads, so its key is released there while it is still shown, until it runs again and reads. Abuildthat reads nothing releases nothing, and neither does a new widget from the parent on its own: the first read after it counts as the own build. The fix, now in the troubleshooting guide, is a widget of its own for the nested part.
1.0.3 #
No change to the code. The documentation site moved to its own address, https://query-kit.dualmeta.io/; the package page's homepage and documentation links, the README and the library's dartdoc name it, and the former address redirects there. The README opens with a title a reader searches for, "TanStack Query for Flutter | query_kit", instead of the package name, which pub.dev's own heading above it already shows.
1.0.2 #
No change to the code. The package description on pub.dev read "AI- coded", because its line was wrapped at the hyphen; it reads "AI-coded" again.
1.0.1 #
No change to the code. The package page now names the documentation site, https://dualmeta-gmbh.github.io/query_kit/, as its homepage and documentation, the README opens with a link to it, the quick start, the examples and the API reference, and the description says what the package is: TanStack Query for Flutter.
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.