diff --git a/.github/workflows/build-errors-check.yml b/.github/workflows/build-errors-check.yml
index b936fb43f..aa3713541 100644
--- a/.github/workflows/build-errors-check.yml
+++ b/.github/workflows/build-errors-check.yml
@@ -15,12 +15,16 @@ jobs:
fetch-depth: 0
- name: Install Dependencies
- run: npm install
+ run: npm ci
+
+ - name: Typecheck
+ run: npm run typecheck
- name: Build
run: npm run build
+ - name: Audit SEO and agent artifacts
+ run: npm run audit:seo-agent:built
-
-
-
+ - name: Evaluate agent retrieval
+ run: npm run eval:agent-retrieval
diff --git a/.github/workflows/content-freshness.yml b/.github/workflows/content-freshness.yml
new file mode 100644
index 000000000..e60fbc8fc
--- /dev/null
+++ b/.github/workflows/content-freshness.yml
@@ -0,0 +1,37 @@
+name: Documentation Freshness SLA
+
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: '17 8 * * 1'
+
+jobs:
+ freshness-audit:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout full history
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Build canonical artifacts
+ run: npm run build
+
+ - name: Enforce freshness SLA
+ id: freshness
+ continue-on-error: true
+ run: npm run audit:seo-agent:strict
+
+ - name: Upload freshness report
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: documentation-freshness-report
+ path: reports/seo-agent-audit.*
+
+ - name: Fail when pages exceed SLA
+ if: steps.freshness.outcome == 'failure'
+ run: exit 1
diff --git a/.gitignore b/.gitignore
index b2d6de306..5d440f894 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
# Production
/build
+/reports
# Generated files
.docusaurus
diff --git a/CONTENT_QUALITY.md b/CONTENT_QUALITY.md
new file mode 100644
index 000000000..efe7c05eb
--- /dev/null
+++ b/CONTENT_QUALITY.md
@@ -0,0 +1,99 @@
+# Documentation search and agent quality standard
+
+This repository treats human search, web search, and AI-agent retrieval as one publishing system. A page is not complete merely because it renders: it must be discoverable, uniquely identifiable, current, accessible, and safe to use as cited answer context.
+
+## A+ release gates
+
+An A+ metric is at least 98%. The production build and `npm run audit:seo-agent:built` measure the following gates:
+
+| Metric | A+ requirement |
+| --- | --- |
+| Crawl and indexation | Every canonical page is allowed by `robots.txt`, appears once in the sitemap, has an evidence-based `lastmod`, and no generated search, tag, or archive route appears in the sitemap. |
+| Metadata | Every page has a unique title and description, 2–3 controlled tags, and at least three query-oriented keywords. Titles are at most 65 characters and descriptions are 50–180 characters. |
+| Content structure | The built page has exactly one H1, at least 50 visible words, and at least one contextual internal link unless it is the site root. Broken links and anchors fail the Docusaurus build. |
+| Accessibility | Every image has useful alt text and every embedded tutorial has a non-empty title. |
+| Performance | No JavaScript chunk exceeds 250 KB gzip, no canonical HTML file exceeds 250 KB, referenced instructional media stays below 2 MB, and third-party chat loads only after interaction. |
+| Freshness | At least 98% of pages are within their review SLA: 180 days for volatile material and 365 days for standard material. |
+| Agent discovery | Every canonical page has page-level Markdown, appears in `llms.txt`, belongs to at least one bounded topic pack, and is present in the agent manifest. No topic pack exceeds 500,000 characters. |
+| Structured data | Every built documentation page includes valid `TechArticle` JSON-LD with a canonical URL and publisher. |
+| Retrieval quality | On the fixed intent set: recall@5 ≥98%, top-1 accuracy ≥90%, and canonical evidence coverage ≥98%. |
+| Live answer quality | On a separately approved and recorded model run: answer correctness ≥95%, citation support ≥98%, and unsupported-claim rate <1%. This is not inferred from the static retrieval score. |
+
+## Required front matter
+
+Every page must include:
+
+```yaml
+---
+slug: /canonical-route
+title: Task-specific title
+description: A unique 50–180 character summary that says what the reader can accomplish.
+tags: [FlutterFlow, Controlled Product Area]
+keywords: [FlutterFlow, user query phrase, feature name]
+last_verified: 2026-09-01
+---
+```
+
+Only add `last_verified` after checking the instructions against the current product. Metadata cleanup, link checking, or a successful build alone does not count as product verification.
+
+## Page design for answer engines
+
+A task guide should state the outcome in its opening paragraph and use this order when relevant:
+
+1. What the feature does and when to use it.
+2. Availability, plan, platform, and prerequisite constraints.
+3. Numbered steps using current UI labels and navigation paths.
+4. A verifiable expected result.
+5. Common failure modes and safe recovery steps.
+6. Related canonical guides.
+
+Put critical facts in text. Images and videos supplement the procedure; they do not replace it. Use exact FlutterFlow UI labels in bold. Prefer one canonical page per intent and link aliases or broader overviews to it.
+
+## Terminology that agents must distinguish
+
+- **AI Agent** is the FlutterFlow desktop feature for using external coding agents to edit a FlutterFlow project.
+- **AI Agents** is the runtime integration for adding AI-powered experiences to an app.
+- **Codex CLI** is the terminal interface. **Codex in the ChatGPT desktop app** is the desktop surface. State which surface a procedure applies to.
+- **Test Mode**, **Run Mode**, **Local Run**, and deployed builds are distinct environments. Do not use the names interchangeably.
+- **Generated code** describes exported Flutter code. It is not the same as project configuration edited through the FlutterFlow CLI or MCP tools.
+
+## Freshness workflow
+
+Volatile sections include integrations, deployment, testing, CLI/agent tooling, accounts and billing, and troubleshooting. They must be verified every 180 days. Other pages must be verified every 365 days.
+
+For each review:
+
+1. Reproduce the task in the current product or obtain confirmation from the owning product team.
+2. Verify plan, platform, region, and role prerequisites.
+3. Confirm every UI label, navigation path, code sample, external link, and expected result.
+4. Remove obsolete alternatives and redirect duplicate pages to the canonical guide.
+5. Update `last_verified` to the review date and include public evidence in the pull request when appropriate. Keep private source revisions, implementation paths, excerpts, and review notes in an approved private system; never add them to this public repository or its Git history.
+6. Run `npm run build` and `npm run audit:seo-agent:built`.
+
+The audit uses `last_verified` when present. For pages included in the repository-wide SEO migration, it otherwise uses `freshness-baseline.json`, which preserves the last pre-migration content evidence date. New pages fall back to their most recent Git commit. This prevents a metadata-only migration from making old product instructions look newly verified. Stale pages remain visible as warnings until a real product review occurs.
+
+## Agent artifacts
+
+The build publishes:
+
+- `/llms.txt`: canonical page inventory and bounded topic-pack index.
+- `/llms-full.txt`: complete canonical corpus for consumers that explicitly want it.
+- `/llms/
-- Teams with more than 5 users who do not wish to move yet to an Enterprise contract can continue on the Business tier under a transitional pricing structure. These teams will be billed at the standard Business tier seat pricing and then $85/seat/month for each additional seat over 5. Pricing will be based on the number of users in the team as of September 18, 2025 and billed on a monthly basis.
+- Teams with more than 5 users who do not wish to move yet to an Enterprise contract can continue on the Business tier under a transitional pricing structure. These teams will be billed at the standard Business tier seat pricing and then $85/seat/month for each additional seat over 5. Pricing will be based on the number of users in the team as of September 18, 2025 and billed on a monthly basis.
- This option allows larger retail teams to continue operating under the Business feature set without immediate contract negotiation, but will be available only to existing 6+ seat teams for 12 months from September 18, 2025 through September 18, 2026 to ensure continuity without immediate contract negotiation.
@@ -406,7 +416,7 @@ However, if you would like to maintain a single account, collaboration across al
Can I belong to multiple teams? How will that be billed?
-Yes, starting August 18, 2025, users will be able to belong to multiple teams in FlutterFlow in the new plans – this is a new capability as part of our updated team and collaboration structure. Each team is treated as a separate billing entity, with its own plan, users, and usage limits.
+Yes, starting August 18, 2025, users will be able to belong to multiple teams in FlutterFlow in the new plans – this is a new capability as part of our updated team and collaboration structure. Each team is treated as a separate billing entity, with its own plan, users, and usage limits.
If you are added as an editor on more than one team, you will count toward the seat total on each of those teams, and each team will manage your seat and billing as part of their own subscription. You will not be billed individually – all billing remains centralized at the team level.
diff --git a/docs/accounts-billing/privacy-terms-of-service.md b/docs/accounts-billing/privacy-terms-of-service.md
index 2e9563628..c509d4439 100644
--- a/docs/accounts-billing/privacy-terms-of-service.md
+++ b/docs/accounts-billing/privacy-terms-of-service.md
@@ -1,12 +1,25 @@
-
-
+---
+title: Privacy And Terms Of Service
+description: >-
+ How do I request the deletion of my personal data? To request deletion of your
+ personal data, please reach out to our support team at support@flutterflow.io
+ How do I request a c...
+tags:
+ - FlutterFlow
+ - Accounts & Billing
+keywords:
+ - Privacy And Terms Of Service
+ - Privacy Terms Of Service
+ - Accounts Billing
+last_verified: 2026-09-02
+---
# Privacy And Terms Of Service
### How do I request the deletion of my personal data?
To request deletion of your personal data, please reach out to our support team at support@flutterflow.io
### How do I request a copy of my personal data?
-To request deletion of your personal data, please reach out to our support team at support@flutterflow.io.
+To request a copy of your personal data, contact [FlutterFlow support](mailto:support@flutterflow.io) from the email address associated with your account. FlutterFlow may need to verify your identity before fulfilling the request.
### How do I unsubscribe from email communications / marketing emails?
To unsubscribe from FlutterFlow emails, please click the “Unsubscribe” link in the footer of our emails.
@@ -15,4 +28,8 @@ To unsubscribe from FlutterFlow emails, please click the “Unsubscribe” link
You can review the most recent version of our Privacy Policy [on the website](https://www.flutterflow.io/privacy).
### Where can I view your Terms of Service (ToS)?
-You can review the most recent version of our Terms of Service [linked on the website](https://www.flutterflow.io/tos).
\ No newline at end of file
+You can review the most recent version of our Terms of Service [linked on the website](https://www.flutterflow.io/tos).
+
+## Related documentation
+
+See [Account Management](/accounts-billing/account-management) for a related FlutterFlow workflow.
diff --git a/docs/accounts-billing/referral-program.md b/docs/accounts-billing/referral-program.md
index 45c091da5..be7814909 100644
--- a/docs/accounts-billing/referral-program.md
+++ b/docs/accounts-billing/referral-program.md
@@ -1,8 +1,25 @@
-
+---
+title: Referral Program
+description: >-
+ With the retirement of the Pro plan, the existing referral program has been
+ discontinued.
+tags:
+ - FlutterFlow
+ - Accounts & Billing
+keywords:
+ - Referral Program
+ - Accounts Billing
+ - FlutterFlow
+last_verified: 2026-09-02
+---
# Referral Program
:::warning[Discontinued]
With the retirement of the Pro plan, the existing referral program has been discontinued. Any active referral discounts will end at your next renewal. However, referral credits you’ve already earned will remain in your account and can be redeemed for free months on the new Growth plan.
-We are also exploring new referral and incentive programs to better support and reward our community under the updated pricing model.
+For current promotions or incentive programs, rely on notices in your FlutterFlow account or official FlutterFlow announcements; this page documents only the discontinued referral program.
:::
+
+## Related documentation
+
+See [Account Management](/accounts-billing/account-management) for a related FlutterFlow workflow.
diff --git a/docs/accounts-billing/subscriptions/refund.md b/docs/accounts-billing/subscriptions/refund.md
index 4c4dde276..a7decd1e5 100644
--- a/docs/accounts-billing/subscriptions/refund.md
+++ b/docs/accounts-billing/subscriptions/refund.md
@@ -1,13 +1,21 @@
---
slug: refunds
title: Refunds
-tags: []
+tags:
+ - FlutterFlow
+ - Accounts & Billing
toc_max_heading_level: 5
sidebar_position: 4
+description: >-
+ If you're not happy with your FlutterFlow subscription, you can cancel at any
+ time.
+keywords:
+ - Refunds
+ - Subscriptions
+ - Accounts Billing
+last_verified: 2026-09-02
---
-
-
# Refunds
If you're not happy with your FlutterFlow subscription, you can [cancel at any time](./subscriptions.md#cancel-my-plan).
-However, there are no refunds for cancellation. In the event that the Company suspends or terminates your Account or these Terms, you understand and agree that you shall receive no refund, whether for any unused time on a subscription, any license or subscription fees for any portion of the Service, any content or data associated with your User Account, or for anything else.
\ No newline at end of file
+Cancellation does not ordinarily provide a refund for unused subscription time or prepaid fees. The controlling policy is the current [FlutterFlow Terms of Service](https://flutterflow.io/tos); contact [FlutterFlow support](mailto:support@flutterflow.io) for account-specific questions or where applicable law may require different treatment.
diff --git a/docs/accounts-billing/subscriptions/subscriptions.md b/docs/accounts-billing/subscriptions/subscriptions.md
index c757b2cf5..1b66699e9 100644
--- a/docs/accounts-billing/subscriptions/subscriptions.md
+++ b/docs/accounts-billing/subscriptions/subscriptions.md
@@ -1,22 +1,30 @@
---
slug: subscriptions
title: Subscriptions
-tags: []
+tags:
+ - FlutterFlow
+ - Accounts & Billing
toc_max_heading_level: 5
sidebar_position: 0
+description: >-
+ This section provides information on free trials, plan changes, and other
+ subscription-related questions.
+keywords:
+ - Subscriptions
+ - Accounts Billing
+ - FlutterFlow
+last_verified: 2026-09-02
---
-
-
# Subscriptions
This section provides information on free trials, plan changes, and other subscription-related questions.
## Free Trials
-The first paid plan you purchase will come with a free 14-day trial. For 14 days, you will have access to the features of the plan you selected before you are charged. If you can cancel your subscription during this 14-day trial, you will not be charged.
+When the checkout offers a 14-day free trial for your first paid plan, you can use that plan's features during the trial and cancel before the displayed charge date to avoid the first subscription charge. Confirm the offer and charge date shown at checkout because promotions and eligibility can change.
:::info
-The 14-day trial applies only to your first paid plan. Any later plan (Basic, Growth, or Business) won’t include a trial, even if the first plan is still in trial.
+The standard trial is limited to the first eligible paid-plan purchase. Do not assume a later Basic, Growth, or Business subscription includes another trial; the checkout is authoritative for your account.
:::
@@ -32,7 +40,7 @@ To start a free trial, please follow these steps:
### What happens at the end of the trial period?
-At the end of your trial period, your payment method will be charged. You can cancel at any time during the trial period.
+Unless you cancel before the charge date displayed in billing, the selected subscription renews into a paid plan at the end of the trial.
## Upgrade Plan
@@ -84,7 +92,7 @@ You can view the next billing cycle date in the "My Plan" section of the [Flutte

-The next billing cycle date for this plan is September 12, 2025.
+The date in the screenshot is an example. Use the renewal date shown in your own billing portal.
### Do subscriptions renew automatically?
@@ -100,16 +108,14 @@ We are unable to transfer a paid FlutterFlow subscription to another FlutterFlow
### If I have a paid plan, will project collaborators be able to use paid features?
-No. Having a paid plan yourself does not give your project collaborators access to paid features. Starting **September 17, 2025**, all collaboration must happen within a **Growth, Business, or Enterprise plan**, and every collaborator must have a **paid seat** in that team to have full edit access. Anyone not on your team will be switched to **view-only** until added as a paid team member.
+No. A personal paid plan does not give project collaborators paid features. Full team edit access uses a **Growth**, **Business**, or **Enterprise** team plan, and each editor needs the appropriate paid team seat or eligible project-collaborator access. A collaborator without that access is view-only.
### If I upgrade from the Growth Plan to the Business Plan in the middle of my billing cycle, will I be charged for both plans?
-Upgrades are automatic, so the system will count the remaining days from the Growth plan and reduce it from the Business Plan price.
-
-For example, if you paid $80 for Growth and you have 15 days remaining in the billing cycle, then on upgrading to Business (let's say priced at $150), you will eventually pay $(150-40) = $110.
+The billing portal calculates the upgrade charge and any credit for the unused portion of the current plan. Review the invoice preview before confirming; do not calculate the final charge from documentation examples because pricing, tax, currency, and remaining time vary.
:::info
FlutterFlow provides different pricing options depending on your region. To see the exact prices for your area, visit the [**Plans & Pricing**](../plan-pricing.md) page.
-:::
\ No newline at end of file
+:::
diff --git a/docs/ff-concepts/adding-customization/cloud-functions.md b/docs/ff-concepts/adding-customization/cloud-functions.md
index 2cbf87acf..4474bb22e 100644
--- a/docs/ff-concepts/adding-customization/cloud-functions.md
+++ b/docs/ff-concepts/adding-customization/cloud-functions.md
@@ -1,12 +1,19 @@
---
slug: /concepts/custom-code/cloud-functions
title: Cloud Functions
-description: Learn how to use Cloud Functions in your FlutterFlow app for serverless backend functionality.
-tags: [Cloud Functions, Serverless, Integration]
+description: >-
+ Learn how to use Cloud Functions in your FlutterFlow app for serverless
+ backend functionality.
+tags:
+ - FlutterFlow
+ - Concepts
sidebar_position: 7
-keywords: [FlutterFlow, Cloud Functions, Serverless, Integration]
+keywords:
+ - FlutterFlow
+ - Cloud Functions
+ - Serverless
+ - Integration
---
-
# Cloud Functions
Cloud Functions let you run backend code in response to events and API requests without managing your own servers. They are commonly used for tasks such as processing data, calling external APIs, sending notifications, running AI workflows, or securely handling secrets and business logic.
@@ -20,7 +27,7 @@ FlutterFlow supports both Firebase Cloud Functions and Supabase Edge Functions,
FlutterFlow includes built-in support for creating, editing, deploying, and triggering Firebase Cloud Functions directly from the platform.
:::note
-Read up on some interesting use cases of
+Read up on some interesting use cases of
[**Cloud Functions**](https://firebase.google.com/docs/functions/use-cases).
:::
@@ -28,8 +35,7 @@ Read up on some interesting use cases of
Let's see how to add a *Cloud Function* by building an example that generates logos based on user prompts. Here's how it looks:
-
@@ -244,8 +248,7 @@ To use the *Could Function* result, ensure you provide the *Action Output Variab
For this example, we'll use the result (i.e., generated logo image URL) and set it to *logoImage* variable. Here's how you do it:
-
+
### Testing Cloud Functions
@@ -362,9 +365,8 @@ Here's how it looks:
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
height: 0,
width: '100%'}}>
-
-The FlutterFlow CLI requires the Dart SDK, which ships with Flutter. Install Flutter (recommended) or Dart on its own, then start a new Claude Code session. The plugin retries the install automatically. +The FlutterFlow CLI requires the Dart SDK, which ships with Flutter. Install Flutter (recommended) or Dart on its own, then start a new Claude Code session. The plugin retries the install automatically.
The Action Block must return a value, and every parameter, plus the return type, must be supported by the tool serializer. -
+Yes, but the reliable pattern is to use a single catalog component that accepts a list rather than expecting the model to assemble multiple independent sibling components on its own. -
+The generated tool code catches the exception, clears the loading state, and sends an error payload back to the model. The UI should remain stable, and the model can decide how to explain or recover. -
+The event must be LOCAL scope and must still exist in the project or dependency where it was defined. -
+That is the expected behavior for `auto_respond: false`. The listener queues hidden context instead of triggering a separate inference call. -
+No. Duplicate listeners for the same event on the same widget are rejected during validation. -
+No. Conversations do not persist across app restarts. If a user closes and reopens the app, the chat history is reset. -
+GenUI uses Firebase AI Logic, which manages the underlying Gemini model and its configuration. At the moment, you cannot directly select specific model variants or adjust parameters like temperature or top_p. The system is designed to provide a simplified, managed experience without requiring manual tuning. -
+If you exceed Firebase AI Logic or Gemini free-tier limits, requests will fail with a 429 quota-exceeded error. This typically means you’ve hit limits such as requests per minute or free-tier usage caps. In some cases, the error will include a retry time, after which you can try again. While the Spark plan works for testing, it is subject to strict free-tier limits, so for higher usage or production apps, you should expect to upgrade to a paid plan and monitor usage closely -
++A Flutter route can have only one active Hero for a given tag. Reusing one fixed tag for every generated item creates duplicates. Bind the Hero Tag to a stable value that is unique per item, and pass or reconstruct the same value on the destination page. FlutterFlow also warns that Hero animations may not work on dynamically generated widgets, so test both forward and backward navigation with production-like data. +
+
+
+
+
+
+
>
+
>
+
+
+
+
+
+
+
+
+
-Event data may not appear instantly, which can be frustrating during development. Firebase may take up to **24 hours** to display event data in the main dashboards. Ensure your device has internet access and you’ve used the app at least once since enabling Analytics. +Event data may not appear instantly. Use Analytics **Realtime** or **DebugView** while validating an implementation; standard processed reports can take **24–48 hours**. Ensure the device has internet access and that you have used the app since enabling Analytics. See Google's [data freshness reference](https://support.google.com/analytics/answer/9333790) for current processing expectations.
- \ No newline at end of file + diff --git a/docs/ff-integrations/authentication/authentication-methods.md b/docs/ff-integrations/authentication/authentication-methods.md index fc63229aa..dd2ff0ce7 100644 --- a/docs/ff-integrations/authentication/authentication-methods.md +++ b/docs/ff-integrations/authentication/authentication-methods.md @@ -2,9 +2,19 @@ title: Auth Methods sidebar_position: 1 slug: /integrations/authentication-methods - +description: >- + Authentication enables users to create accounts and log into your app, + establishing a secure, verified connection. +tags: + - FlutterFlow + - Integrations + - Authentication Methods +keywords: + - Auth Methods + - Authentication Methods + - Integrations +last_verified: 2026-09-02 --- - # Authentication Methods Overview Authentication enables users to create accounts and log into your app, establishing a secure, @@ -26,14 +36,13 @@ their account and receive important communications.  -## OAuth (Open Authorization) +## OAuth and OpenID Connect -**OAuth** is a popular authentication protocol that enables users to authorize -one -application to interact with another on their behalf without revealing their -password. This method is commonly used to allow applications to access service -features or user information from other services, such as logging into a -third-party app using Google or Facebook credentials. +**OAuth 2.0** is an authorization framework: it lets an app obtain limited access +to another service without receiving the user's password. Social sign-in commonly +adds **OpenID Connect (OIDC)** or a provider-specific identity layer so the app can +authenticate the user. Follow the selected provider's setup guide because callback +URLs, client types, consent screens, and credential handling differ. By using OAuth, the user's login credentials stay secure with the original service provider, and only @@ -44,11 +53,11 @@ login process across various platforms. ## Phone Authentication Another method is phone authentication, where a user's phone number is used as a -form of identity verification. Upon registering or logging in, the user receives -a text message with a verification code that must be entered to proceed. This -method leverages the security of mobile networks and the uniqueness of phone -numbers to ensure that the person attempting access is the legitimate owner of -the account. +sign-in credential. Upon registering or logging in, the user receives a text +message with a verification code that must be entered to proceed. This verifies +possession of the phone number at that moment; it does not prove a person's +real-world identity. SIM swaps, recycled numbers, interception, and social +engineering make SMS unsuitable as the only factor for high-risk operations.  @@ -61,14 +70,18 @@ to creating an account. If a user decides to sign up later, their anonymous account can be upgraded to a regular account, preserving their data and interactions. -Each anonymous session is typically isolated, with strict permissions to prevent -access to sensitive features or user data. When upgrading to a full account, -secure practices are used to link the anonymous data to the new authenticated -profile, ensuring that no data leakage or unauthorized access occurs during the -transition. +Isolation is not automatic. Enforce ownership in your Firestore, Storage, Supabase, +or backend authorization rules, and test those rules with anonymous accounts. When +the user adopts a permanent sign-in method, link the credential to the existing +anonymous account when supported; creating a separate account can orphan the +anonymous user's data. Each authentication method aims to balance user convenience with high security, ensuring that personal and sensitive data remains protected while providing a -seamless user experience. +seamless user experience. + + + +## Related documentation - \ No newline at end of file +See [Auth Services](/integrations/authentication-types) for a related FlutterFlow workflow. diff --git a/docs/ff-integrations/authentication/authentication-types.md b/docs/ff-integrations/authentication/authentication-types.md index 74158cb60..acb0e7b94 100644 --- a/docs/ff-integrations/authentication/authentication-types.md +++ b/docs/ff-integrations/authentication/authentication-types.md @@ -1,22 +1,32 @@ --- slug: /integrations/authentication-types title: Auth Services -description: Learn about integrating various authentication services like Firebase, Supabase, and Custom Authentication in FlutterFlow. -keywords: [FlutterFlow, Authentication, Firebase, Supabase, Custom Authentication, App Settings] +description: >- + Learn about integrating various authentication services like Firebase, + Supabase, and Custom Authentication in FlutterFlow. +keywords: + - FlutterFlow + - Authentication + - Firebase + - Supabase + - Custom Authentication + - App Settings sidebar_position: 1 +tags: + - FlutterFlow + - Integrations + - Authentication Types +last_verified: 2026-09-02 --- - # Overview -FlutterFlow provides native support for a variety of Authentication Services, including **Firebase**, **Supabase**, and **Custom Authentication** options. To integrate these services into your app, simply navigate to 'App Settings,' select 'Authentication,' and then choose your preferred service. From there, you can set up initial pages for both entry and logged-in states. Follow any additional steps as necessary to complete the setup. +FlutterFlow supports **Firebase**, **Supabase**, and **Custom Authentication**. In your project, open **Settings and Integrations > App Settings > Authentication**, enable authentication, choose the authentication type, and configure the entry and logged-in pages. Then complete the provider-specific setup before adding authentication actions. ## Firebase Authentication In FlutterFlow, you can seamlessly connect with **Firebase** and utilize the available authentication methods. -Firebase Authentication integrates tightly with other Firebase services, leveraging industry -standards like OAuth 2.0 and OpenID Connect. This makes it highly adaptable for use with your custom -backend, ensuring a secure and scalable solution. +Firebase Authentication integrates with other Firebase services and supports standards and provider flows such as OAuth 2.0 and OpenID Connect. If your own backend participates in authentication, mint or verify tokens only in a trusted server environment and follow Firebase's server-side guidance. :::info Learn how to enable [**Firebase Authentication**](../authentication/firebase-auth/auth-initial-setup.md) and integrate popular auth providers in your FlutterFlow diff --git a/docs/ff-integrations/authentication/custom-auth/custom-auth.md b/docs/ff-integrations/authentication/custom-auth/custom-auth.md index f6f8c9c27..094f9ec48 100644 --- a/docs/ff-integrations/authentication/custom-auth/custom-auth.md +++ b/docs/ff-integrations/authentication/custom-auth/custom-auth.md @@ -1,12 +1,18 @@ --- slug: /integrations/authentication/custom-authentication title: Custom Authentication -tags: [Custom Authentication, Authentication] +tags: + - FlutterFlow + - Integrations + - Authentication description: Learn how to add custom authentication in your FlutterFlow app. sidebar_position: 1 -keywords: [FlutterFlow, Custom Authentication, Authentication] +keywords: + - FlutterFlow + - Custom Authentication + - Authentication +last_verified: 2026-09-02 --- - # Custom Authentication Custom authentication allows you to manage auth-related data (login details) while utilizing your own backend to authenticate users. @@ -26,9 +32,8 @@ Let's see how to add custom authentication by building an example that looks lik paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding height: 0, width: '100%'}}> -
-To try phone sign-in without any limitations, you can add some fictitious numbers to the Firebase console.
+Use Firebase fictional phone numbers to test without sending an SMS or consuming normal SMS quota. These numbers are for development only; never use a real person's number as a test fixture.
To add the fictitious number:
@@ -361,9 +366,8 @@ To add the fictitious number:
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
height: 0,
width: '100%'}}>
-
1. First, ensure you have clicked the "Save" button while [Enabling phone authentication in Firebase](#2-enabling-phone-authentication-in-firebase).
-
+

1. If this is already enabled, head over to **Settings > SMS region policy >** select **Allow > Select regions** you want to support and click **Save**.
-
+

Due to a recent update, Google Maps custom markers won't work in Run or Test mode unless CanvasKit is enabled. This is expected behavior. To use custom markers effectively, enable CanvasKit from [**Advanced Web Settings**](../../../resources/projects/settings/project-setup.md#advanced-web-settings).
When encountering the "Error: Unknown error occurred" message, consider these troubleshooting steps:
-
+
1. **Stripe Settings Adjustment**: In FlutterFlow's Stripe settings, verify the Merchant country code is a 3-digit code, like "USA" instead of "US". If needed, remove previously deployed functions in the Firebase console and redeploy them after updating the country code.
2. **User Authentication Requirement**: Stripe payments require an authenticated user session. Ensure you're attempting the Stripe action after a user has successfully logged in to the app.
3. **Cloud Functions Permissions**: Check that your cloud functions have the **Cloud Functions Invoker** permission set for **allUsers** in the Google Cloud console. To do this, go to the Cloud Console, directly search for the **initStripePayment** function, open the function, switch to the **Permissions** tab, and confirm the permissions status. This permission is typically assigned by default, but it's good practice to double-check.
-
+

+If **Persist Auth Sessions** is disabled, the session is in memory only and your app owns startup behavior. If it is enabled, initialization restores the previous session. Keep **Store Auth Session Securely** enabled so generated projects use the platform's protected-storage integration for persisted custom-auth data.
+:::warning[Web storage limitation]
+Protected browser storage cannot defend a token from malicious JavaScript already executing in the app's origin. Prevent cross-site scripting, use a strict Content Security Policy where possible, and consider server-managed `HttpOnly`, `Secure` cookies for higher-risk web applications.
:::
-This file also offers easy-to-use getters for essential information such as the user's ID, login token, and other data. This setup simplifies the process of accessing and managing login details throughout your app.
-
-## Log in Implementation
-When the Log In action is activated by tapping a button, we initiate a series of operations behind the scenes to ensure a smooth login process.
-
-Upon calling the signIn method, it triggers the `_updateCurrentUser` method from `CustomAuthManager` internally.
-
-This method receives various parameters such as `authenticationToken`, `refreshToken`, `tokenExpiration`, `authUid`, and `userData`, updating the CustomAuthManager class's properties with these details. Consequently, this stores the current session's authentication and user information effectively.
-
-:::info
-To learn more about the concepts of Authentication Token, Refresh Token, and Token Expiry Time, please refer the [Concepts](custom-auth/token.md) doc.
-:::
+See [Custom Authentication](custom-auth/custom-auth.md) for the editor workflow and [Tokens](custom-auth/token.md) for token lifecycle and security guidance.
-A new user object, marked as logged in (`loggedIn` set to true), along with the provided `authUid` and `userData`, is then added to the user object stream mentioned earlier. This update informs all the stream's subscribers about the changed user state, signaling that the user has successfully logged in.
+## Extending generated authentication code
-Additionally, the `persistAuthData` method is invoked to save the updated authentication details (tokens, expiration, user ID, etc.) for future sessions.
+Before editing generated auth files:
-After signing in, `context.goNamedAuth('AuthPage', context.mounted);` is called that navigates the user to the Logged In Page specified in FlutterFlow's Authentication Settings.
+1. Export the latest project and keep the generated baseline under version control.
+2. Prefer FlutterFlow custom actions or supported configuration when they can express the change.
+3. Never embed provider secrets, service-account keys, refresh tokens, or administrative keys in client code.
+4. Re-export into a separate branch and review the diff; future exports can replace generated files.
+5. Test logged-out startup, successful and failed login, token expiry, refresh failure, logout, deep links, and protected-route redirects on every target platform.
+Do not copy generated authentication files between projects without reviewing package names, provider configuration, routes, platform setup, and dependency versions.
diff --git a/docs/ff-integrations/authentication/supabase-auth/auth-actions.md b/docs/ff-integrations/authentication/supabase-auth/auth-actions.md
index 8cdd61565..452fe0f33 100644
--- a/docs/ff-integrations/authentication/supabase-auth/auth-actions.md
+++ b/docs/ff-integrations/authentication/supabase-auth/auth-actions.md
@@ -1,12 +1,19 @@
---
slug: /integrations/authentication/supabase/auth-actions
-title: Common Auth Actions
+title: 'Common Auth Actions: Supabase Auth'
description: Learn how to add Supabase Authentication actions in your FlutterFlow app.
-tags: [Auth Actions, Authentication, Supabase]
+tags:
+ - FlutterFlow
+ - Integrations
+ - Authentication
sidebar_position: 1
-keywords: [FlutterFlow, Auth Actions, Authentication, Supabase]
+keywords:
+ - FlutterFlow
+ - Auth Actions
+ - Authentication
+ - Supabase
+last_verified: 2026-09-02
---
-
# Authentication Actions
Currently FlutterFlow supports the following Actions for Supabase Authentication:
@@ -23,7 +30,7 @@ Follow the steps below to add Email Login action:
5. Set the **Email Field** dropdown to the widget name that accepts email (e.g., *TextFieldEmail*).
6. Set the **Password Field** dropdown to the widget name that accepts a password (e.g., *TextFieldPassword*).
-
+
## Create Account [Action]
@@ -45,7 +52,7 @@ Follow the steps below to add email signup action:
6. Set the **Password Field** dropdown to the widget name that accepts a password (e.g., *TextFieldPassword*).
7. Similarly, If you have a confirm password field in your UI, set the **Confirm Password Field** to the appropriate one.
-
+
## Log out [Action]
@@ -55,8 +62,8 @@ Follow the steps below to add this action:
1. Select the widget (e.g., Button) on which you want to add the action.
-2. Select **Actions** from the Properties Panel (the right menu), If it's the first action,
- click **+ Add Action** button. Otherwise, click the "**+**" button below the previous action
+2. Select **Actions** from the Properties Panel (the right menu), If it's the first action,
+ click **+ Add Action** button. Otherwise, click the "**+**" button below the previous action
tile (inside **Action Flow Editor**) and select **Add Action**.
3. Search and select the **Log Out** (under **Backend/Database > Supabase Authentication**) action.
@@ -71,9 +78,8 @@ This action allows users to reset their password by sending a reset link to thei
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
height: 0,
width: '100%'}}>
- Getting the error "Could not create an account as firebase@flutterflow.io to your Firebase project.
-If you encounter such an issue, you just need to enable the
-[**Email Sign-In**](../../authentication/firebase-auth/email-sign-in.md) in your
+If you encounter such an issue, you just need to enable the
+[**Email Sign-In**](../../authentication/firebase-auth/email-sign-in.md) in your
Firebase project.
Is SQLite a good choice for apps that require offline functionality?
-Absolutely. SQLite stores data locally, making it an excellent choice for apps that need to operate offline. Users can access and manipulate data without needing an internet connection.
+SQLite can read and write local data without an internet connection. If the app also needs cloud backup or cross-device state, you must design and test a separate synchronization layer, conflict policy, authentication model, and retry behavior.
@@ -31,11 +45,11 @@ Once initiated, FlutterFlow will handle the rest of the project creation in the
Here's a quick walkthrough:
#### Enable Firebase Authentication
-If you want to use the Firebase Authentication in your app or the Firebase Content Manager, you must enable the authentication in the Firebase console and enable the 'Email/Password' sign-in.
+If your app uses Firebase Authentication, enable Authentication in the Firebase console and configure only the sign-in providers your app needs. The Firestore Content Manager connection also requires Email/Password sign-in to be enabled for its managed access flow.
#### Enable Firebase Storage
If you plan to use Firebase storage in your app, click on the Enable Storage on Firebase and enable it on Firebase console.
@@ -77,8 +91,11 @@ In the dialog, scroll down to **Setup Firebase**, check that option, and click *
8. Select **+ Add Another Role** again. Under **Select A Role**, search for **Cloud Functions Admin**. Select **Cloud Functions Admin**.
:::info
-Note: The option to add Cloud Functions Admin may only show up if you are on a Firebase Blaze plan. In addition, you may need to [enable cloud functions](https://console.cloud.google.com/marketplace/product/google/cloudfunctions.googleapis.com) first.
-Cloud Functions Admin permissions are required for several FlutterFlow features (e.g., Push Notifications). Adding this Cloud Functions Admin is optional, but not doing so will prevent you from using any functions that require Cloud Functions.
+Cloud Functions Admin permissions are required for FlutterFlow features that deploy Cloud Functions, such as Push Notifications. This role is optional if you do not use those features. Enabling the Cloud Functions API and upgrading the Firebase project to the Blaze plan are separate prerequisites for deploying functions; the billing plan does not control whether the IAM role appears.
+:::
+
+:::caution[Grant only required project access]
+These roles let FlutterFlow configure resources in this Firebase project. Grant them only to the documented FlutterFlow principal and only on the intended project. Periodically review project members and remove access when FlutterFlow no longer needs to manage the project.
:::
#### Connect and autogenerate files
@@ -98,7 +115,7 @@ Do not close or refresh the page while the files are being generated.
## Connect to Firebase on Creating a New FlutterFlow Project
-If you know you'll be integrating Firebase as you create your project, you can do the following:
+If you know you'll be integrating Firebase as you create your project, you can do the following:
#### Step 1: Create a new project and enable Firebase
@@ -106,21 +123,21 @@ First, create a new project, and while doing so, keep the Setup Firebase option
-#### Step 2: Connect to Firebase
+#### Step 2: Connect to Firebase
-If you'd like FlutterFlow to create a Firebase project for you, click **"+ Create Project"** and follow the [related steps](#create-a-new-firebase-project-from-flutterflow). Alternatively, if you wish to connect an existing Firebase project manually, please follow the [manual steps here](#connect-an-existing-firebase-project-manually).
+If you'd like FlutterFlow to create a Firebase project for you, click **"+ Create Project"** and follow the [related steps](#create-a-new-firebase-project-from-flutterflow). Alternatively, if you wish to connect an existing Firebase project manually, please follow the [manual steps here](#connect-an-existing-firebase-project-manually).
#### Step 3: Enable Authentication
-Turn on the Enable Authentication to allow users to log into your app using various sign-in methods, including email and password, social media providers, and even phone number.
+Turn on the Enable Authentication to allow users to log into your app using various sign-in methods, including email and password, social media providers, and even phone number.
-**Note:** this step only enables authentication. You will need to complete an additional setup to implement authentication logic later.
+**Note:** this step only enables authentication. You will need to complete an additional setup to implement authentication logic later.
-## Enable Firestore for Database Access
+## Enable Firestore for Database Access
If you plan to use Firestore Database as your backend, follow these additional steps to enable Firestore. This will allow you to create collections and add documents directly from FlutterFlow.
@@ -130,14 +147,12 @@ To configure Firestore Database:
-2. Next, you will need to set your **Firebase security rules**. To get started quickly, you can select Start in test mode and select Next.
+2. Next, set your **Firebase security rules**. Prefer production mode and deploy rules that match your app's access model. If you temporarily select **Start in test mode** for a disposable prototype, treat the database as publicly accessible during the test window and replace those rules before adding real user data or sharing the app.
-:::info
-We recommend updating your Firebase security rules before deploying your app. Please see [this
-link](../database/cloud-firestore/firestore-rules.md) for additional information on
-Firestore security rules.
+:::warning
+Test-mode rules are not production security. Configure, test, and deploy [Firestore Security Rules](../database/cloud-firestore/firestore-rules.md) before storing sensitive data. Authentication alone does not restrict a collection unless the rules enforce the intended authorization.
:::
3. Next, you will need to choose the location where your Firestore data will be stored. From the dropdown, select a location and then select Enable. Please see this link for additional information on Firebase locations.
@@ -162,18 +177,21 @@ Here are the steps to deploy indexes.
If you add a filtering/ordering on the query or change the existing filtering/ordering settings, you should deploy the Firestore Indexes again.
:::
-
+
+## Related documentation
+
+See [App Check](/integrations/firebase/app-check) for a related FlutterFlow workflow.
diff --git a/docs/ff-integrations/firebase/crashlytics.md b/docs/ff-integrations/firebase/crashlytics.md
index 9da8caf0e..fdaae8427 100644
--- a/docs/ff-integrations/firebase/crashlytics.md
+++ b/docs/ff-integrations/firebase/crashlytics.md
@@ -2,11 +2,16 @@
slug: /integrations/firebase/crashlytics
title: Crashlytics
description: Learn how to integrate Firebase Crashlytics in your FlutterFlow app.
-tags: [Firebase, Crashlytics]
+tags:
+ - FlutterFlow
+ - Integrations
+ - Firebase
sidebar_position: 2
-keywords: [FlutterFlow, Firebase, Crashlytics]
+keywords:
+ - FlutterFlow
+ - Firebase
+ - Crashlytics
---
-
# Firebase Crashlytics
[Firebase Crashlytics](https://firebase.google.com/products/crashlytics) is a crash-reporting tool that helps you catch errors. It enables you to troubleshoot the issue by logging the details, such as the exact line number that caused the error, device name, OS version, and time when the crash happened.
@@ -21,4 +26,4 @@ You can see all the logged errors/crashes inside the Crashlytics dashboard of yo
1. Click on the issue name to see its details.
2. To test the crash on your app, [download the app](../../ff-concepts/advanced/flutterflow-cli/exporting-projects.md), add a code that throws an error, and run it on a mobile device or emulator with an active internet connection.
-
\ No newline at end of file
+
diff --git a/docs/ff-integrations/firebase/performance-monitoring.md b/docs/ff-integrations/firebase/performance-monitoring.md
index 1116928f6..9de624f50 100644
--- a/docs/ff-integrations/firebase/performance-monitoring.md
+++ b/docs/ff-integrations/firebase/performance-monitoring.md
@@ -1,12 +1,20 @@
---
slug: /integrations/firebase/performance-monitoring
title: Performance Monitoring
-description: Learn how to integrate Firebase Performance Monitoring in your FlutterFlow app.
-tags: [Firebase, Performance Monitoring]
+description: >-
+ Learn how to integrate Firebase Performance Monitoring in your FlutterFlow
+ app.
+tags:
+ - FlutterFlow
+ - Integrations
+ - Firebase
sidebar_position: 4
-keywords: [FlutterFlow, Firebase, Performance Monitoring]
+keywords:
+ - FlutterFlow
+ - Firebase
+ - Performance Monitoring
+last_verified: 2026-09-02
---
-
# Performance Monitoring
[Firebase Performance Monitoring](https://firebase.google.com/docs/perf-mon) is a tool that *automatically* collects performance data from your app and provides insights through the Firebase console. It can monitor both network requests and specific parts of your code.
@@ -18,4 +26,20 @@ Enabling performance monitoring is beneficial for:
- **Data-Driven Decisions**: Make optimization decisions based on real performance data.
- **Monitor Network Calls**: See how long network requests take, helping identify slow APIs or network issues.
-To enable performance monitoring, navigate to Settings and Integrations > Project Setup > Firebase > Open the Performance Monitoring section and Enable Performance Monitoring toggle.
\ No newline at end of file
+After you [connect the FlutterFlow project to Firebase](connect-to-firebase-setup.md), navigate to **Settings and Integrations > Project Setup > Firebase**, open **Performance Monitoring**, and turn on **Enable Performance Monitoring**. Regenerate Firebase configuration files if FlutterFlow prompts you, then rebuild the app.
+
+## Verify data collection
+
+Run a non-production build on each supported platform, exercise startup and several HTTP requests, and check the **Performance** dashboard in the Firebase console. Data may take a few minutes to appear. Firebase automatically records lifecycle and HTTP/S network traces; individual Flutter screen-rendering traces are not automatically available because Flutter renders through one native view controller.
+
+Use custom code traces when you need to measure a specific workflow such as loading images or querying a database. Start and stop every trace reliably, and use bounded, low-cardinality metric or attribute values.
+
+:::warning[Privacy and consent]
+Performance Monitoring transmits performance and app/device attributes to Firebase. Review the [data Firebase collects](https://firebase.google.com/docs/perf-mon/data-collection), update your privacy disclosures and consent flow where required, and follow applicable laws and store policies. Do not put names, email addresses, user IDs, tokens, full query strings, or other personal or secret data in trace names, metric names, attributes, or URLs.
+:::
+
+For custom initialization or consent-controlled collection in exported code, follow Firebase's [collection-control guidance](https://firebase.google.com/docs/perf-mon/disable-sdk) and test that both automatic and custom collection behave as intended.
+
+## Related documentation
+
+See [Firebase's Flutter setup and validation guide](https://firebase.google.com/docs/perf-mon/flutter/get-started) for platform behavior and troubleshooting details.
diff --git a/docs/ff-integrations/firebase/remote-config.md b/docs/ff-integrations/firebase/remote-config.md
index 752d24037..ae7f76fd0 100644
--- a/docs/ff-integrations/firebase/remote-config.md
+++ b/docs/ff-integrations/firebase/remote-config.md
@@ -2,21 +2,31 @@
slug: /integrations/firebase/remote-config
title: Remote Config
description: Learn how to integrate Firebase Remote Config in your FlutterFlow app.
-tags: [Firebase, Remote Config]
+tags:
+ - FlutterFlow
+ - Integrations
+ - Firebase
sidebar_position: 1
-keywords: [FlutterFlow, Firebase, Remote Config]
+keywords:
+ - FlutterFlow
+ - Firebase
+ - Remote Config
+last_verified: 2026-09-02
---
-
# Remote Config
-[Firebase remote config](https://firebase.google.com/docs/remote-config) allows you to control your app's behavior and appearance without pushing an app update. For example, you could use it to change or show/hide certain elements of your app, such as a promo banner and Santa hat, or use it as a feature flag (payments, food delivery) with no need to publish an app update.
+[Firebase Remote Config](https://firebase.google.com/docs/remote-config) lets you change supported app behavior and appearance without publishing a new app build. For example, you can show a promotional banner or gradually expose a non-security-sensitive feature.
+
+:::danger[Remote Config is not secret or authorization storage]
+Users can inspect values delivered to a client app. Never store API secrets, credentials, private endpoints, entitlement decisions, prices that must be enforced, or authorization rules in Remote Config. Enforce security-sensitive decisions on a trusted backend and use Remote Config only to adjust the client experience.
+:::

-When you enable the Remote Config, you must specify the parameter in our builder (called 'in-app defaults') and inside the Remote Config dashboard of your [Firebase console](https://console.firebase.google.com/). When the app starts, it fetches config values from the Firebase console, and for any reason, if it fails, your app will use the in-app defaults.
+When you enable Remote Config, define each parameter in FlutterFlow as an **in-app default** and define the corresponding key in your [Firebase console](https://console.firebase.google.com/). On startup, the generated app fetches and activates eligible remote values. If no fetched value is available or activation fails, the app uses the in-app default, so every default must be safe and usable on its own.
:::warning
-The app will try to fetch values every time it starts. However, due to the minimum fetch interval of 1 hour (set by default), the values won't be fetched more than once in 1 hour.
+The app attempts a fetch at startup, but FlutterFlow configures a one-hour minimum fetch interval. Starting the app repeatedly within that interval generally reuses the last activated value. Published changes are therefore not an instant-delivery or emergency kill-switch mechanism.
:::
## Using Firebase Remote Config
@@ -35,25 +45,26 @@ You will be able to dynamically control your app using the parameters created in
To create the parameter:
-1. Navigate to the [Firebase Console](https://console.firebase.google.com/u/0/) > Enagage > Remote Config** page.
+1. Open your project in the [Firebase console](https://console.firebase.google.com/u/0/) and navigate to **Remote Config** (currently under **DevOps & Engagement**).
2. If this is the first time, click **Create configuration** button.
3. Click **Add parameter**. This will open the **Create parameter** section on the right side.
4. Enter the **Parameter name** (e.g., *show_promo_banner*, *primary_color*, etc.).
5. Set the **Data type** among the *String*, *Number*, *Boolean*, and *JSON*.
6. Set the **Default value**.
-7. If you enable the **Use in-app default** toggle, any change made to this parameter from here won't be reflected in your app. Instead, your app will use values from the parameters defined in our builder (see how to create it in the [next step](#3-add-parameter-in-flutterflow)).
+7. If you select **Use in-app default**, Firebase sends no backend value for that parameter and the app uses the default defined in FlutterFlow. Otherwise, set a backend default and any conditional values you need.
8. Click **Save**.
9. Click **Publish Changes** to make this parameter immediately available to your app.
+If several conditions match, the first condition in Firebase's ordered list takes precedence. Test default, conditional, offline, and failed-fetch behavior before relying on a parameter in production.
+
-When you add an App State variable of `List` type in FlutterFlow, several utility functions are automatically generated to help you manage this list. These functions include a getter, a setter, and methods for adding, removing, and updating items in the list. This setup ensures that you can easily interact with the list while keeping the app state consistent and responsive. Below is an explanation of these generated functions using the specific example of a LatLngList.
+When you add an App State variable of `List` type in FlutterFlow, utility methods are generated for adding, removing, inserting, and updating items. The following `LoggableList` example reflects debug-enabled generated code; production exports may use a regular `List` while retaining the same public state operations.
```js
diff --git a/docs/generated-code/flutterflow-model.md b/docs/generated-code/flutterflow-model.md
index de0b875de..80a0fd2e3 100644
--- a/docs/generated-code/flutterflow-model.md
+++ b/docs/generated-code/flutterflow-model.md
@@ -2,11 +2,22 @@
title: FlutterFlow Model
slug: /generated-code/flutterflow-model
sidebar_position: 4
+description: >-
+ The class is an abstract class used in FlutterFlow to provide a unified and
+ extensible structure for managing state and behavior of widgets (both pages
+ and components).
+last_verified: 2026-09-01
+tags:
+ - FlutterFlow
+ - Generated Code
+keywords:
+ - FlutterFlow Model
+ - Generated Code
+ - FlutterFlow
---
-
# FlutterFlow Model
-The `FlutterFlowModel` class is an abstract class used in FlutterFlow to provide a unified and extensible structure for managing state and behavior of widgets (both pages and components). It encapsulates **initialization, state management,** and **disposal** logic, making it easier to handle the lifecycle of widgets and their models.
+The `FlutterFlowModel` class is an abstract class used in FlutterFlow to provide a unified and extensible structure for managing state and behavior of widgets (both pages and components). It encapsulates **initialization, state management,** and **disposal** logic, making it easier to handle the lifecycle of widgets and their models.
FlutterFlow automatically generates the `flutter_flow_model.dart` file, which contains the `FlutterFlowModel` class and utility methods like `wrapWithModel()` and `createModel()`.
@@ -42,7 +53,7 @@ abstract class FlutterFlowModel
-Certain variable types, e.g., **Firestore Documents** and **Supabase Row**, can be used in Page State or Component State, but not in App State. This is because App State variables are designed to be global, meaning they stay in memory throughout the app. When App State variables are marked as persisted, the variable’s value is saved to the device’s local storage. +Certain variable types, such as **Firestore Document**, **Supabase Row**, and **SQLite Row**, can be used in Page State or Component State but not in App State. App State is global and remains in memory while the app runs; persisted fields are also serialized to device storage. Storing large or complex data types like documents in App State could lead to **performance or size issues**, especially on lower-end devices. For this reason, FlutterFlow limits App State to lightweight types, while Page/Component State allows for more flexibility since their scope is smaller and temporary. If you need to work with such data types, it's recommended to store them in Page or Component state instead.
- \ No newline at end of file + diff --git a/docs/resources/data-representation/constants.md b/docs/resources/data-representation/constants.md index 2e46cecb6..d4f593da9 100644 --- a/docs/resources/data-representation/constants.md +++ b/docs/resources/data-representation/constants.md @@ -1,32 +1,45 @@ --- slug: /resources/data-representation/constants title: Constants -description: Explore the importance of using Constants in FlutterFlow to define unchanging values throughout your application. -tags: [Constants, FlutterFlow, Data Representation] +description: >- + Explore the importance of using Constants in FlutterFlow to define unchanging + values throughout your application. +last_verified: 2026-09-01 +tags: + - FlutterFlow + - Resources + - Data sidebar_position: 6 -keywords: [Constants, FlutterFlow, Data Representation] +keywords: + - Constants + - FlutterFlow + - Data Representation --- - # Constants -Constants are used to define values that remain unchanged throughout the lifetime of an application. Using constants is a good practice for values that do not need to be recalculated or reassigned. +Constants define app-wide values that cannot be changed by actions at runtime. Use them for values you configure once in the builder and reuse in widgets, actions, or expressions. -Constants are used to define values that you believe are fixed, like API endpoints, standard mathematical values, maximum size limits set by business rules, etc. +Examples include a public API base URL, a standard mathematical value, or a maximum size imposed by a business rule. A project constant is compiled into the exported app, so never use it for API keys, passwords, or other secrets. :::tip[When to use Constants vs **[App state variables](app-state)?**] -Constants don't change. Once you set its value (in builder), you can't change it from within the app. On the other hand, app state variables are dynamic. They can be updated in response to interactions in the application, such as a user clicking a button or entering data. +Constants don't change. Once you set a constant's value in the builder, the running app cannot reassign it. App State variables are dynamic and can be updated in response to interactions such as a button tap. ::: ## Create and use Constants +1. Open **App Values > Constants** from the left-side navigation menu. +2. Select **Add App Constant**, then enter its name, optional description, type, list setting, and value. +3. In a compatible property or action input, open **Set from Variable > Constants > Project Constants** and select it. + +Project constants currently support Integer, Double, String, Color, Image Path, Video Path, Audio Path, and Boolean values; each can also be configured as a list. Exported code emits them as `static const` fields in `lib/app_constants.dart` when the project defines constants. +