qora_flutter 0.8.0
qora_flutter: ^0.8.0 copied to clipboard
A Flutter implementation for Qora, bringing powerful async state management, automatic caching, and offline-first capabilities to the widget tree.
Changelog #
All notable changes to this project will be documented in this file.
[Unreleased] #
0.8.0 - 2026-03-01 #
Changed #
- Updated dependency to
qora: ^0.8.0— enablesPersistQoraClient,StorageAdapter,QoraSerializer, and the full persistence layer introduced in core 0.8.0
0.7.0 - 2026-03-03 #
Added #
InfiniteQueryBuilder<TData, TPageParam>—StatefulWidgetthat manages the full infinite-query lifecycle: creates anInfiniteQueryObserveron mount, fetches the first page, subscribes to all state transitions, and disposes cleanly; auto-refetches onInfiniteInitial(external invalidation); acceptsqueryKey,fetcher,options,builder,client, andenabledInfiniteQueryController<TData, TPageParam>— stable handle passed to the builder withfetchNextPage(),fetchPreviousPage(), andrefetch(); safe to capture in scroll listeners andRefreshIndicator.onRefresh
0.6.0 - 2026-03-02 #
Added #
NetworkStatusBuilder— low-level widget that subscribes to theConnectivityManagerstream and rebuilds on everyNetworkStatustransition; accepts optionalchildto avoid rebuilding expensive sub-treesNetworkStatusIndicator— high-level wrapper that overlays an offline banner onNetworkStatus.offline; built-in default banner (wifi-off icon, "Offline mode" text, no Material dependency); customisable viaofflineBanneror fullbuilderescape-hatchQoraScope.connectivityManagerOf(context)— static method exposing the activeConnectivityManagerto descendant widgets; used internally byNetworkStatusBuilderQoraMutationBuilder— now injectsisOnlinecallback andofflineMutationQueuefromQoraClientintoMutationControllerautomaticallyQoraBuilder— builder signature extended to three arguments(BuildContext, QoraState<T>, FetchStatus); subscribes toclient.watchFetchStatus(key)alongside state stream; catchesQoraOfflineExceptionsilently (handled viaFetchStatus.paused)
Changed #
FlutterConnectivityManager— now a pure signal provider; constructor takes no arguments; removedQoraClientdependency and directinvalidateWhere()call; all reconnect logic delegated toQoraClient.attachConnectivityManager()QoraScope— callsclient.attachConnectivityManager(cm)afterconnectivityManager.start()ininitState; exposes manager via_InheritedQoraScope
0.5.0 - 2026-03-01 #
Changed #
- Updated dependency to
qora: ^0.5.0— enablesPersistQoraClient,StorageAdapter,QoraSerializer, and the full persistence layer introduced in core 0.5.0
0.4.0 - 2026-02-28 #
Changed #
- Updated dependencies to
qora: ^0.4.0inqora_flutterpackage - Updated README and documentation to reflect new version and features
0.3.0 - 2026-02-25 #
Added #
MutationBuilder<TData, TVariables, TContext>—StatefulWidgetthat creates and manages aMutationControllerinternally; thebuilderreceives the currentMutationStateand amutate(variables)callbackmutatorparameter (mirrorsfetcherinQoraBuilder) — the async function performing the writeoptionsparameter —MutationOptionswithonMutate/onSuccess/onError/onSettledlifecycle hooksmetadataparameter — optionalMap<String, Object?>?forwarded to everyMutationEvent; attach domain context (e.g.{'category': 'auth', 'screen': 'login'}) visible in DevTools without modifying the core schema- Rebuilds on every state transition; controller is disposed automatically on widget unmount
- Recreates the controller if
mutator,options, ormetadataidentity changes across widget rebuilds - Passes
QoraScope.maybeOf(context)astrackerautomatically; safe to use without aQoraScopeancestor (standalone mode, no DevTools wiring)
0.2.0 - 2026-02-22 #
Added #
FlutterConnectivityManager— invalidates all queries when the device reconnects after being offline; powered byconnectivity_plus(bundled as a direct dependency)FlutterConnectivityManagerandFlutterLifecycleManagerexported from the mainqora_flutterlibrary barrelQoraScopenow accepts an optionalconnectivityManagerparameter alongsidelifecycleManager
Changed #
queryKeyacceptsObject— bothQoraBuilderandQoraStateBuildernow accept a plainList<dynamic>or aQoraKey; no wrapping inQoraKey(...)requiredFlutterLifecycleManager.refetchIntervalis now public (was_refetchInterval); configures the minimum background duration before queries are invalidated on app resume (default: 5 s)- Internal refetch mechanism uses
client.invalidateWhere((_) => true)instead of direct stream manipulation; activeQoraBuilderwidgets detect the resultingLoading(previousData: …)state and re-fetch automatically
0.1.0 - 2026-02-11 #
Added #
QoraScope(InheritedWidget) — providesQoraClientto the widget treeQoraBuilder<T>— fetches on mount, subscribes to all state transitions, re-fetches on invalidation, and cleans up on disposeQoraStateBuilder<T>— observe-only variant; subscribes to state without triggering a fetchBuildContextextensions:context.qora,context.qoraOrNullFlutterLifecycleManager— invalidates all queries when the app resumes after a configurable background pause