Skip to main content

flutterflow_cloud 0.5.0-dev.1 copy "flutterflow_cloud: ^0.5.0-dev.1" to clipboard
flutterflow_cloud: ^0.5.0-dev.1 copied to clipboard

unlisted

The FlutterFlow Cloud SDK for Flutter — typed database records and queries, end-user auth with self-contained persistent sessions, file storage with progress and URL caching, and a fast built-in proje [...]

Changelog #

0.5.0-dev.1 #

A pre-release for trying store purchases before they launch: 0.4.0 with cloud.purchases and the public FlutterFlowCloud.insidePreview, as listed under 0.4.0-dev.1 (0.4.0 shipped without them). cloud.purchases may still change before 0.5.0.

0.4.0 #

  • Add collection(model).watch(id) and, in generated bindings, a typed watch(id) on every collection: one record, then each change, or null while it is missing or hidden by the model's get or subscribe rule. Only that record's writes reach the watch.
  • Add named-query watch(), typed snapshots and connection state.
  • Share equivalent watches and apply server-proven visible-row updates without redundant queries; uncertain changes retain strong first-page reconciliation.
  • Multiplex WebSockets with strong first-page reconciliation, auth invalidation, bounded reconnect, cancellation and paused-listener coalescing.
  • Support the same watch API through the offline emulator and preview proxy.
  • Password reset: cloud.auth.sendPasswordResetEmail(email: …) emails a reset link to an email/password account, and cloud.auth.completePasswordReset(oobCode: …, newPassword: …) sets the new password with the link's code, which revokes every session of that account. Neither signs anyone in or out locally. oobCodeInvalid and oobCodeExpired are FFXValidationErrors.

0.4.0-dev.1 #

A pre-release for trying store purchases before they launch; cloud.purchases may still change before 0.4.0.

  • cloud.purchases.recordEvents(events) posts what the app's paywall and shop saw (FFXPurchaseEvent: id, FFXPurchaseEventKind, at, source, item, plan, amount) to /v1/purchases/events for Payments' Reports, and answers how many were new.
  • FFXInsufficientCreditsError (an FFXConflictError, code insufficientCredits): a write whose rule calls spend() needs more credits than the end user has. It carries credits, needed and balance, and userMessage copy for the end user.
  • FFXPurchaseState.credits (FFXCredits): the app's credits as the backend keeps them, balance (bought plus this month's free), bought, free, freeEachMonth and freeRefillsAt, with words(n) for "3 vet questions". A pack is checked like any purchase; checkPretend takes its amount.
  • Store purchase problems from /v1/purchases (purchaseNotVerified, purchaseNotSold: FFXValidationError; paymentsNotConfigured, purchaseHeldByAnother: FFXConflictError) carry userMessage copy for the buyer.
  • cloud.purchases reads what the app sells and what the signed-in user bought (read() → FFXPurchaseState: purchase id, upgrade, owned unlocks, purchases and products with each store's ids) and checks a store purchase (checkAppStore, checkGooglePlay; in the preview, checkPretend records a purchase on drip's pretend store as an FFXStore.pretend test purchase, in the preview's backend only), refreshing the session when the upgrade changes. FlutterFlowCloud.insidePreview is public. cloud.purchases is an extension (FFXCloudPurchases) in package:flutterflow_cloud/purchases.dart, with the purchase types; the main library doesn't export it, so an app's own purchases getter (a purchase model's) is untouched.
  • Two tabs of a web app no longer sign each other out. Both hold the stored session, and a tab that refreshed with the refresh token another tab had already spent tripped the reuse check, which revokes the session. Now tabs refresh one at a time under the Web Lock ffx.<scope>.refresh (an isolate-local lock where navigator.locks is missing), and a refresh first takes a session another tab rotated since, presenting its refresh token only when its access token is due.
  • An expired App Preview ticket is never a sign-out. A 401 previewTicketExpired re-reads the base URL the host renews and sends once more; a second refusal is an FFXServiceUnavailableError, and the session stays. A 401 tokenExpired whose refresh failed transiently no longer clears the session in the background reconcile.
  • Inside App Preview, a screen preview that reads FlutterFlowCloud.instance before any initialize gets an instance the SDK connects itself, on the preview's backend with the whole-app preview's session or as a guest, instead of FlutterFlowCloud has not been initialized. It borrows that shared session and never rotates its refresh token. The app's own initialize replaces it. Outside App Preview nothing changes.
  • A cloud.auth.deleteAccount() the server refuses for good (a 4xx problem the SDK does not retry, such as the 403 permissionDenied for drip's test account) leaves the session as it was: its token, refresh and auth events carry on, and the next call is a new deletion with a new Idempotency-Key. Before, the session stopped refreshing until its token expired. A deletion started while a refresh is in flight waits for that refresh to land, so a refused one hands back the refreshed session, not a spent refresh token. A retry after a transport failure, a timeout, a 5xx, a 429 or a 409 idempotencyKeyInUse still keeps the original key.

0.3.0 #

  • cloud.connectors.call(connector, operation, params: …) calls an outside service the project connected (Slack, Resend, Stripe, OpenAI, Anthropic, Gemini, Airtable, Notion, …) through the platform, for an operation declared under connectors in .ffx/project.json; the app carries no key. Connector refusals are FFXApiErrors whose userMessage is written for the app's user, and an acting call that may have gone through (connectorOutcomeUnknown) is never retried. The generated ffx.dart re-exports FFXConnectors.
  • Custom claims stay current: the SDK follows the account's auth events and refreshes the session when its claims change.
  • cloud.auth.deleteAccount() permanently deletes the signed-in account and revokes its sessions.
  • Requests share one time budget across retries, and a mutation retried after a transport failure keeps its original Idempotency-Key.
  • Previews in FlutterFlow reach their own backend without app changes; FFX_EMULATOR_URL points the emulator client at a full URL.
  • Breaking: FFXPersistedSession has a required claimsRevision. A session saved by 0.2.x does not restore, so a signed-in user signs in again once after the upgrade (and a guest starts as a new guest).

0.2.2 #

  • fileReferenced (deleting a file a record still points at) is an FFXConflictError.
  • Generated file collections gain allowsContentType, and the upload pre-flight accepts single-type wildcards (image/*) the way the platform does.

0.2.1 #

  • Package README replaced with a short placeholder ahead of the public documentation.

0.2.0 #

The client SDK, rebuilt as a Flutter package. Replaces ffx_client 0.1.0 (package renamed; hard break, pre-release).

  • FlutterFlowCloud.initialize / FlutterFlowCloud.instance replace FFXApp; connection settings live in FFXOptions (typically generated).
  • Self-contained persistent sessions on Android, iOS, macOS, Windows, Linux, and web — no plugins. Sessions restore at initialize with auth.currentUser hydrated from the stored snapshot and a background reconcile; authStateChanges() is a Stream<FFXUser?> whose first event is the real current state.
  • Built-in opt-in query cache (FFXFetchPolicy: networkOnly/networkFirst/cacheFirst/cacheOnly) with honest FFXQueryMetadata; the fictional isFromCache: false / hasPendingWrites / client-clock serverTime fields are gone.
  • FFXApiError.userMessage: human-safe copy for every failure.
  • Storage: upload returns an awaitable FFXUploadTask with progress, cancellation, and in-place transfer retry; getDownloadUrl caches and single-flights signed URLs; getFile/updateFile/deleteFile cover the file record surface; FFXImage renders private files by id.
  • Database: query() parameters optional; pages()/records() cursor-following streams; aggregate() returns a typed FFXAggregateResult; batch() is the single typed batch API.
  • FFXSignOutScope enum replaces the stringly-typed sign-out scope; FFXGeoPoint value type added.
  • Built-in generator: dart run flutterflow_cloud:generate emits typed models/collections/queries/options from .ffx/project.json — fast, deterministic, formatted, no build_runner.
1
likes
0
points
11.2k
downloads

Publisher

verified publisherflutterflow.io

Weekly Downloads

The FlutterFlow Cloud SDK for Flutter — typed database records and queries, end-user auth with self-contained persistent sessions, file storage with progress and URL caching, and a fast built-in project code generator.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, http, web_socket

More

Packages that depend on flutterflow_cloud