Skip to content

Commit 577c494

Browse files
authored
Merge branch 'main' into feature/code-expression
2 parents 16ebae6 + fa43a5e commit 577c494

File tree

153 files changed

+2576
-46
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

153 files changed

+2576
-46
lines changed

docs/accounts-billing/plan-pricing.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,9 @@ I am a Free user and have more than 2 projects – what will happen to them?
299299
<li>
300300
**Marketplace exception:** Existing Free plan projects published to the Marketplace prior to August 18, 2025 will not count toward your 2-project limit. If a project is later removed from Marketplace and you exceed the limit, it will be automatically archived.
301301
</li>
302+
<li>
303+
Archived projects are never deleted. If you later upgrade to a paid plan, you'll regain full access to edit and publish them.
304+
</li>
302305
</ul>
303306
</li>
304307
<li>

docs/ff-concepts/adding-customization/custom-code.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ necessary code.
6868
This can significantly speed up the building process and reduce the need for in-depth programming
6969
knowledge, making it especially useful for custom functions and actions.
7070

71-
**Limitation:** The prompts are limited to 100 characters currently.
71+
:::info[Limitation]
72+
Your prompt must be at least 3 words and no more than 500 characters.
73+
:::
7274

7375
<div style={{
7476
position: 'relative',

docs/ff-concepts/navigation-routing/deep-dynamic-linking.md

Lines changed: 134 additions & 36 deletions
Large diffs are not rendered by default.

docs/ff-concepts/notifications/push-notifications.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ You can add and send push notifications manually or trigger them based on user a
2727
:::info[General Prerequisites]
2828
Before you begin, ensure that you:
2929
- Complete all the steps in
30-
[**Firebase Setup**](../../ff-integrations/firebase/connect-to-firebase-setup.md).
30+
[**Firebase Setup**](../../ff-integrations/firebase/connect-to-firebase-setup.md). Note that, while setting up, make sure to follow step number 5 and 8 carefully from [**Allow FlutterFlow to Access Your Project**](../../ff-integrations/firebase/connect-to-firebase-setup.md#allow-flutterflow-to-access-your-project) section to properly add the **Cloud Functions Admin** role to **[email protected]** user.
3131
- Upgrade your Firebase project to the [**Blaze plan**](https://firebase.google.com/pricing) to enable [**Cloud Functions**](https://firebase.google.com/docs/functions), which are required specifically for FlutterFlow’s push notification setup, such as retrieving the FCM token and sending notifications trigger from FlutterFlow.
3232
:::
3333

docs/ff-integrations/ai/ai-agents.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Here are some examples of AI Agents:
2121

2222
:::info[Prerequisite]
2323
Before you begin setting up AI Agents, make sure you:
24-
1. Connect your project to Firebase by completing the [**Firebase Setup**](../firebase/connect-to-firebase-setup.md).
24+
1. Complete all the steps in [**Firebase Setup**](../firebase/connect-to-firebase-setup.md). Note that, while setting up, make sure to follow step number 5 and 8 carefully from [**Allow FlutterFlow to Access Your Project**](../firebase/connect-to-firebase-setup.md#allow-flutterflow-to-access-your-project) section to properly add the **Cloud Functions Admin** role to **[email protected]** user.
2525
2. Upgrade your Firebase project to the [**Blaze Plan**](https://firebase.google.com/pricing), as we rely on [**Firebase Cloud Functions**](https://firebase.google.com/docs/functions) to handle AI-related communication securely.
2626
:::
2727

docs/ff-integrations/payments/stripe.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ Integrating the Stripe Payments in your app comprises the following steps:
5858
4. [Testing](#4-testing)
5959
5. [Releasing to production](#5-releasing-to-production)
6060

61-
### 1. Setup Stripe payment
61+
### 1. Setup Stripe Payment
6262

6363
Setting up the Stripe payment includes acquiring the keys from your Stripe account and adding them to FlutterFlow.
6464

@@ -76,7 +76,7 @@ Follow the steps below to set up payment using Stripe:
7676
6. Copy the **Publishable Key** and **Secret Key** from the Stripe API keys page and paste them into the respective fields inside FlutterFlow. If you are using Stripe in test mode, make sure you paste them inside the **Test Credentials** section.
7777
7. Under the **Additional Settings**, you need to specify the following:
7878
1. **Merchant Display Name** (*Required*): Enter a name for the merchant (you) that the user will see while performing the payment.
79-
2. **Merchant Country Code** (*Required*): Enter your country code. This must be the 3-digit ISO country code, such as USA, IND, and NGA.
79+
2. **Merchant Country Code** (*Required*): Enter your country code. This must be the 2 digit ISO country code, such as US, IN, and AU.
8080
3. **Apple Merchant ID** (*Optional*): You need to enter this if you want to accept payments through Apple Pay as well. The instructions for using Apple Pay are in [this section](#2-apple-pay-setup-optional).
8181
8. Click **Deploy**.
8282

@@ -86,7 +86,7 @@ Follow the steps below to set up payment using Stripe:
8686
height: 0,
8787
width: '100%'}}>
8888
<iframe
89-
src="https://www.loom.com/embed/0e4ba1f7f055433e96a7fa6cede2c127?sid=400ef912-1580-44ad-81a9-25051bed0256"
89+
src="https://demo.arcade.software/PcikYUtB8cSug9CyUAOv?embed&show_copy_link=true"
9090
title=""
9191
style={{
9292
position: 'absolute',
@@ -108,7 +108,7 @@ Follow the steps below to set up payment using Stripe:
108108

109109
This would deploy the Stripe payment service as a Firebase Cloud Function. Now, you are ready to trigger payments inside your app.
110110

111-
### 2. Apple Pay setup (optional)
111+
### 2. Apple Pay Setup (optional)
112112

113113
Setting up Apple Pay comprises the following steps:
114114

@@ -185,7 +185,7 @@ To add Apple Merchant ID in FlutterFlow:
185185

186186
![Adding Apple Merchant ID in FlutterFlow](imgs/adding-apple-merchant-id.png)
187187

188-
### 3. Trigger Stripe payment [Action]
188+
### 3. Trigger Stripe Payment [Action]
189189

190190
In order to initiate a payment using Stripe, you have to use the **Stripe Payment** action.
191191

@@ -244,7 +244,7 @@ You can test Stripe payments on mobile and the Web before deployment. To do that
244244
4. [Download](../../testing-deployment-publishing/exporting-code/ff-cli.md) and [run](../../testing-deployment-publishing/running-your-app/run-your-app.md) your project..
245245
5. To test the purchase, you can use any of these [basic test card numbers](https://stripe.com/docs/testing#cards).
246246

247-
### 5. Releasing to production
247+
### 5. Releasing to Production
248248

249249
Before you release the app to production, complete the following steps:
250250

docs/resources/data-representation/app-state.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,17 @@ Here's a quick guide to updating the app state variable. We need to add an actio
114114
</iframe>
115115
</div>
116116

117+
## FAQs
118+
119+
<details>
120+
<summary>
121+
Why are some variable types not available in App State?
122+
</summary>
123+
<p>
124+
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.
125+
126+
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.
127+
128+
If you need to work with such data types, it's recommended to store them in Page or Component state instead.
129+
</p>
130+
</details>

docs/resources/data-representation/custom-data-types.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,42 @@ When naming custom data types, always use **UpperCamelCase**, as recommended by
6868

6969
## Accessing Custom Data Type
7070

71-
After creating the custom data type, you can use it to create variables, such as an app state variable, and then access them. Here's an [example](app-state.md#app-state-variables).
71+
After creating a custom data type, it’s treated internally as a [Dart class](https://dart.dev/language/classes). However, just defining the custom data type doesn’t hold any real data. To work with actual data, such as storing a user profile or a review, you need to create an **instance** of custom data type.
72+
73+
Creating an instance allows you to:
74+
75+
- Assign specific values to each field in your custom data type.
76+
- Store the instance in app state, page state, or pass it between widgets.
77+
- Access individual fields wherever needed.
78+
79+
To create an instance of a custom data type, first you need to [create a state variable](../../ff-concepts/state-management/state-variables.md#creating-state-variables) (of type **Data Type**) that will hold the instance. Then, to create and add the instance to the state variable, open the **Set from Variable** dialog and select **Create Data Type Object > Project Data Type**. Choose the data type you want to use. After that, set values for each of the required fields.
80+
81+
82+
<div style={{
83+
position: 'relative',
84+
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
85+
height: 0,
86+
width: '100%'}}>
87+
<iframe
88+
src="https://demo.arcade.software/qNNwqEm7vrvuWszmhf9R?embed&show_copy_link=true"
89+
title=""
90+
style={{
91+
position: 'absolute',
92+
top: 0,
93+
left: 0,
94+
width: '100%',
95+
height: '100%',
96+
colorScheme: 'light'
97+
}}
98+
frameborder="0"
99+
loading="lazy"
100+
webkitAllowFullScreen
101+
mozAllowFullScreen
102+
allowFullScreen
103+
allow="clipboard-write">
104+
</iframe>
105+
</div>
106+
<p></p>
72107

73108
### Custom Data Type in Custom Code
74109
Sometimes, you might want to access the custom data type in your custom code. Our custom code editor allows you to receive and pass data into a variable of a custom data type. For example, you could manipulate or analyze the data as needed, and then return the modified result in the custom data type.

docs/resources/projects/libraries.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,3 +430,14 @@ We're working on Library Values, which will allow users to set specific values w
430430
Projects can import libraries that themselves have imported other Libraries as dependencies. However, if the project and the library share the same dependency, the version must match exactly to avoid conflicts.
431431
</p>
432432
</details>
433+
434+
<details>
435+
<summary>Why do I get collision errors when importing a duplicated project as a library?</summary>
436+
<p>
437+
When you duplicate a project and publish it as a library, the unique identifiers (keys) for components and other resources are not automatically changed. If you then import this library back into the original project, it causes key collisions between the original and duplicated resources.
438+
439+
To help with this, FlutterFlow shows a dialog that offers to automatically delete the original resources in your base project and update all references to point to the library versions.
440+
441+
If you prefer to resolve this manually, you can duplicate individual components within the library after importing, this will generate new keys and avoid the collision.
442+
</p>
443+
</details>

0 commit comments

Comments
 (0)