Skip to content

Commit c1f839e

Browse files
authored
Merge branch 'main' into fix/test-auth-on-local-run
2 parents 729c151 + b1d7ac8 commit c1f839e

File tree

117 files changed

+1806
-204
lines changed

Some content is hidden

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

117 files changed

+1806
-204
lines changed

docs/accounts-billing/new-pricing-comparison.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ export const PricingToggles = () => {
380380
</tr>
381381
<tr>
382382
<td>Cloud Functions<br/><span className="feature-description">Write and deploy Firebase Cloud Functions directly from FlutterFlow</span></td>
383-
<td></td>
383+
<td></td>
384384
<td>✅</td>
385385
<td>✅</td>
386386
<td>✅</td>

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/intro/ff-ui/imgs/toolbar.avif

24.8 KB
Binary file not shown.

docs/intro/ff-ui/toolbar.md

Lines changed: 18 additions & 175 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ The Toolbar, located at the top of the app builder, provides easy access to nume
1313

1414
![toolbar](imgs/toolbar.avif)
1515

16-
## Project info
16+
## Project Info
1717

1818
Hovering over this section reveals the essential information about your project. Here, you can easily check the project name, branch name, environment name and the current version of FlutterFlow that you're using, along with its release date. Additionally, it shows the Flutter version that your project is currently running on.
1919

20-
## Help
20+
## Help Menu
2121

2222
From here, you will get access to essential resource links that will come in handy while building your apps.
2323

@@ -31,7 +31,7 @@ From here, you will get access to essential resource links that will come in han
3131
8. **Current Status/Known Issues**: We want to keep you informed about the current status of FlutterFlow and provide updates regarding any known issues. We aim to ensure transparency and keep you in the loop about the platform's performance and potential issues.
3232
9. **Show/Hide Chat**: You can use this option to show or hide the chat button at the bottom right of the app builder.
3333

34-
## Keyboard shortcuts
34+
## Keyboard Shortcuts
3535

3636
With keyboard shortcuts, you can perform common actions related to widgets and run your project in Test or Run mode with just a few keystrokes, saving you time and effort. Select this option to see all the shortcuts.
3737

@@ -43,168 +43,12 @@ The Command Palette makes it easy to find and use things in the App Builder. Ope
4343

4444
![command-palette.avif](imgs/command-palette.avif)
4545

46-
## AI Tools
47-
FlutterFlow AI Tools is a powerful set of features designed to speed up app development by leveraging artificial intelligence. These tools allow you to quickly generate app elements such as pages, components, and even entire page layouts with relevant widgets automatically populated.
48-
49-
### New Page Creation
50-
Instantly create pages in your app from a prompt. To create a page, open the **AI Tools** menu from the Toolbar. Next, select **New Page Creation** and enter a description for your page.
51-
52-
<div style={{
53-
position: 'relative',
54-
paddingBottom: 'calc(50.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
55-
height: 0,
56-
width: '100%'}}>
57-
<iframe
58-
src="https://demo.arcade.software/jAH6Ar0X8fTIk3PTRNej?embed&show_copy_link=true"
59-
title=""
60-
style={{
61-
position: 'absolute',
62-
top: 0,
63-
left: 0,
64-
width: '100%',
65-
height: '100%',
66-
colorScheme: 'light'
67-
}}
68-
frameborder="0"
69-
loading="lazy"
70-
webkitAllowFullScreen
71-
mozAllowFullScreen
72-
allowFullScreen
73-
allow="clipboard-write">
74-
</iframe>
75-
</div>
76-
<p></p>
77-
78-
### New Component Creation
79-
Aside from pages, you can also create [Components](/resources/ui/components) directly from a prompt. To create a component, open the **AI Tools** menu from the Toolbar. Next, select **New Component Creation** and enter a description for your UI component.
80-
81-
<div style={{
82-
position: 'relative',
83-
paddingBottom: 'calc(50.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
84-
height: 0,
85-
width: '100%'}}>
86-
<iframe
87-
src="https://demo.arcade.software/qTqZVHv7EOjw0Gcfp697?embed&show_copy_link=true"
88-
title=""
89-
style={{
90-
position: 'absolute',
91-
top: 0,
92-
left: 0,
93-
width: '100%',
94-
height: '100%',
95-
colorScheme: 'light'
96-
}}
97-
frameborder="0"
98-
loading="lazy"
99-
webkitAllowFullScreen
100-
mozAllowFullScreen
101-
allowFullScreen
102-
allow="clipboard-write">
103-
</iframe>
104-
</div>
105-
<p></p>
106-
107-
### Sketch To Component
108-
Sketch to Component allows you to add a sketch of your [Component](/resources/ui/components). This sketch can include outlines of widgets or layouts to incorporate, and it can also include annotations that tell the AI tool more about the design you have in mind.
109-
110-
To create a Component from a sketch, open the **AI Tools** menu from the Toolbar. Next, select **Sketch to Component** and draw directly in the input or upload an image file of your sketch.
111-
112-
<div style={{
113-
position: 'relative',
114-
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
115-
height: 0,
116-
width: '100%'}}>
117-
<iframe
118-
src="https://demo.arcade.software/llUMoLjlVutwhBfi5rxH?embed&show_copy_link=true"
119-
title=""
120-
style={{
121-
position: 'absolute',
122-
top: 0,
123-
left: 0,
124-
width: '100%',
125-
height: '100%',
126-
colorScheme: 'light'
127-
}}
128-
frameborder="0"
129-
loading="lazy"
130-
webkitAllowFullScreen
131-
mozAllowFullScreen
132-
allowFullScreen
133-
allow="clipboard-write">
134-
</iframe>
135-
</div>
136-
<p></p>
137-
138-
### Page Autocomplete
139-
Page Autocomplete intelligently adds relevant widgets to a page based on the pages’s context, making it easy to complete partially built pages.
140-
The project context includes the existing widgets and design of those widgets, as well as the page's description.
141-
142-
If the page does not have a description, you will be asked to describe what you want the page to contain.
143-
144-
To use Page Autocomplete, open the **AI Tools** menu from the Toolbar. Next, and select **Page Autocomplete** on the page that
145-
you want FlutterFlow AI to complete.
146-
147-
<div style={{
148-
position: 'relative',
149-
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
150-
height: 0,
151-
width: '100%'}}>
152-
<iframe
153-
src="https://demo.arcade.software/nI1ECv9gcuY4iurJaWJC?embed&show_copy_link=true"
154-
title=""
155-
style={{
156-
position: 'absolute',
157-
top: 0,
158-
left: 0,
159-
width: '100%',
160-
height: '100%',
161-
colorScheme: 'light'
162-
}}
163-
frameborder="0"
164-
loading="lazy"
165-
webkitAllowFullScreen
166-
mozAllowFullScreen
167-
allowFullScreen
168-
allow="clipboard-write">
169-
</iframe>
170-
</div>
171-
<p></p>
172-
173-
## Canvas size
174-
175-
We allow you to visualize and design your app for various mobile, tablet, and desktop devices. The [canvas](../ff-ui/canvas.md) size is defined as width (in pixels) x height (in pixels). This size is determined according to the device selected. To set a custom canvas size, click on the Canvas Size and enter the width and height (in pixels) you want.
176-
177-
<div style={{
178-
position: 'relative',
179-
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
180-
height: 0,
181-
width: '100%'
182-
}}>
183-
<iframe
184-
src="https://demo.arcade.software/6TBNjYNfVDmV4NawxA4f?embed&show_copy_link=true"
185-
title="Sharing a Project with a User"
186-
style={{
187-
position: 'absolute',
188-
top: 0,
189-
left: 0,
190-
width: '100%',
191-
height: '100%',
192-
colorScheme: 'light'
193-
}}
194-
frameborder="0"
195-
loading="lazy"
196-
webkitAllowFullScreen
197-
mozAllowFullScreen
198-
allowFullScreen
199-
allow="clipboard-write">
200-
</iframe>
201-
</div>
202-
203-
## Project history
204-
205-
Understand the crucial concepts of project history, such as saving and versioning [here](../../testing-deployment-publishing/branching-collaboration/saving-versioning.md).
206-
207-
## Project comments
46+
## AI Generation History
47+
48+
The **AI Generation History** panel lets you track the status of your AI-generated items. It provides a list of all previously generated pages and components, and you can easily preview them from here.
49+
50+
51+
## Project Comments
20852

20953
This helps you leave your thoughts, opinions, questions, or feedback on a specific widget with your project team or a client. While adding a comment, you can tag users, and they will be able to respond, creating a thread of conversation.
21054

@@ -214,7 +58,7 @@ To tag users, select the @ symbol and choose the project team member(s).
21458

21559
:::
21660

217-
## Optimizations & Enhancements
61+
## Project Suggestions
21862

21963
We scan and suggest enhancements to elevate your app's design and speed. Imagine having a personal consultant for design and performance dedicated to improving the user experience of your app.
22064

@@ -230,7 +74,7 @@ You can control what kind of suggestions you would like to receive by clicking o
23074

23175
![Optimization.avif](imgs/Optimization.avif)
23276

233-
## Project issues
77+
## Project Issues
23478

23579
If there are any issues or warnings present in your current project that might result in a build failure or app crash, they will be displayed in this section. You can click this option to view a short description of each issue and navigate to the place where you can fix the issue by clicking on the respective issue.
23680

@@ -242,11 +86,12 @@ If there are any issues or warnings present in your current project that might r
24286

24387
![Warning-and-errors.avif](imgs/Warning-and-errors.avif)
24488

245-
## Branching
24689

247-
[Branching](../../testing-deployment-publishing/branching-collaboration/branching.md) enables you to create a separate copy of your existing project, allowing you to develop new features without affecting the current functionality.
90+
## Version Control
91+
**Version Control** is a system that tracks changes to your project's files over time, allowing you to revert to previous states if needed. In FlutterFlow, you can utilize [Branching](../../testing-deployment-publishing/branching-collaboration/branching.md) to create a separate copy of your project to build or test features without affecting the main version.
24892

249-
## Developer menu
93+
94+
## Developer Menu
25095
The Developer Menu provides developers with access to tools such as code viewing, GitHub integration, and source code download capabilities.
25196

25297
1. **View Code**: This option lets you display the *Dart* code for all the pages of your FlutterFlow project. You can also take a look at the dependencies being used by the app here.
@@ -267,9 +112,7 @@ _Connect GitHub Repo_, _Download Code_, and _Download APK_ features requires a [
267112

268113
7. **Refactor Project**: This option opens your FlutterFlow project in a YAML-based file editor, allowing you to perform bulk edits more efficiently. You can search, edit, and replace values across multiple files—useful for renaming keys, updating data types, or migrating resources to a Library. Check out the [**Refactor Project**](../../resources/projects/refactor-project.md) documentation for more details.
269114

270-
271-
272-
## Share project
115+
## Share Project
273116

274117
You can make a project public so that others can view and clone your project. Before you share your project, make sure to remove any sensitive information.
275118

@@ -280,10 +123,10 @@ You can make a project public so that others can view and clone your project. Be
280123

281124
:::
282125

283-
## Preview
126+
## Preview App
284127

285128
You can use this option to run your app in [Preview mode](../../testing-deployment-publishing/running-your-app/run-your-app.md#preview-mode).
286129

287-
## Testing
130+
## Test Mode
288131

289132
This menu allows you to run your app in [Test](../../testing-deployment-publishing/running-your-app/run-your-app.md#test-mode) or [Run](../../testing-deployment-publishing/running-your-app/run-your-app.md#run-mode) mode.

docs/misc/customer-support-policy.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Lastly, you can connect with a [FlutterFlow Expert](https://experts.flutterflow.
4646

4747
We regularly release feature updates and bug releases. To make sure you are on the most recent version of FlutterFlow select Ctrl/Cmd + R.
4848

49-
If you think you've found a bug, please submit an [in-app bug report](../intro/ff-ui/toolbar.md#help) or let us know via chat (Standard and Pro users only). Please make sure to include:
49+
If you think you've found a bug, please submit an [in-app bug report](../intro/ff-ui/toolbar.md#help-menu) or let us know via chat (Standard and Pro users only). Please make sure to include:
5050

5151
* A link to your project
5252
* The page(s) effected
Binary file not shown.

docs/resources/control-flow/functions/utility-functions.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ To add inline function, open the Set from Variable dialog wherever it's possible
100100

101101
For example, we may want to quickly calculate the discount amount of a product where the discount is 18% of the MRP of the product. The expression would be `cost - (cost * discount)`.
102102

103+
:::tip
104+
Looking for more power and flexibility? Use the new [**Custom Code Expression**](#custom-code-expression). It’s a more advanced version of Inline Functions that lets you access FlutterFlow generated resources without passing them as arguments. You also get real-time autocomplete and inline error checking for faster, more accurate logic.
105+
:::
106+
103107
**Precedence of operations**
104108

105109
Inline Function for math operations follow typical precedence (e.g., multiplication/division before addition/subtraction), but parentheses can change the order.
@@ -162,6 +166,79 @@ Here are some common expressions you can use for your business logic:
162166
| `int.parse(s)` | Convert the **String** into an **integer.** | `int.parse(stringValue)` | `int` |
163167

164168

169+
## Custom Code Expression
170+
171+
**Custom Code Expression** lets you write short Dart code directly in widget property fields and action flows in FlutterFlow. It’s a more powerful version of [**Inline Function**](#inline-function-code-expressions), allowing you to directly access FlutterFlow generated classes, global variables, widget properties, parameters, and more without needing to manually pass them as inputs.
172+
173+
Custom Code Expressions also support real-time autocomplete, making it easy to discover available fields as you type. For example, when you type `FFAppState().`, it will suggest all available app state variables along with their types.
174+
175+
In addition, inline validation provides immediate feedback as you write, helping you catch syntax errors or invalid property references.
176+
177+
:::info
178+
To use Custom Code Expression, you must have an active [**FlutterFlow paid plan**](https://www.flutterflow.io/pricing).
179+
:::
180+
181+
:::tip
182+
- To explore what you can access within a Custom code expression, refer to the [**Common Examples**](../../../ff-concepts/adding-customization/common-examples.md) page.
183+
- Press `^ + Space` (or `Ctrl + Space`) while typing to see suggestions for what you can access in your Custom code expression.
184+
- You can access values inside custom structs. For example, you can use `FFAppState().localDeviceInfo.osVersion` if that field exists in your app state.
185+
- To use Custom code expressions better, it's helpful to understand how FlutterFlow builds your project behind the scenes. You can check the [**State Management**](../../../generated-code/state-mgmt-gen-code.md) page and other **Generated Code** sections to learn how everything is set up.
186+
187+
:::
188+
189+
Here are a couple of examples showing how to access App State and Page State within a Custom code expression:
190+
191+
- **App State Access:** For example, to check if dark mode is enabled using an App State variable:
192+
193+
```jsx
194+
FFAppState().enableDarkMode ? 'Dark Mode On' : 'Light Mode Off'
195+
```
196+
197+
This accesses the global `enableDarkMode` boolean stored in `FFAppState`, and returns a string based on its value.
198+
199+
- **Page and Component State Access:** For example, to access a page or component state variable like `searchText`, you start with `_model.` and then select the variable from the autocomplete suggestions.
200+
201+
```jsx
202+
_model.searchText.isEmpty ? '' : 'Searching for "${_model.searchText}"'
203+
```
204+
205+
This expression checks if the `searchText` variable (defined as a page state) is empty, and returns an appropriate message. The `_model` object refers to the current page’s generated state model.
206+
207+
Here's an example of adding a Custom Code Expression:
208+
209+
<div style={{
210+
position: 'relative',
211+
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
212+
height: 0,
213+
width: '100%'}}>
214+
<iframe
215+
src="https://demo.arcade.software/6RV03v2ByVqRgCTeg3QF?embed&show_copy_link=true"
216+
title=""
217+
style={{
218+
position: 'absolute',
219+
top: 0,
220+
left: 0,
221+
width: '100%',
222+
height: '100%',
223+
colorScheme: 'light'
224+
}}
225+
frameborder="0"
226+
loading="lazy"
227+
webkitAllowFullScreen
228+
mozAllowFullScreen
229+
allowFullScreen
230+
allow="clipboard-write">
231+
</iframe>
232+
</div>
233+
<p></p>
234+
235+
### Execute Custom Code [Action]
236+
237+
To use a Custom Code Expression when triggering actions in FlutterFlow (i.e., inside an Action Flow), you can use the **Execute Custom Code** action. This allows you to run a Dart expression when something happens, such as tapping a button or after a page loads.
238+
239+
![execute-custom-code.avif](img/execute-custom-code.avif)
240+
241+
The Execute Custom Code action can be really helpful in scenarios where the home page is removed early from the navigation stack and standard navigation using the local context may fail. To prevent this, you can [use the global navigator context](../../../ff-concepts/navigation-routing/deep-dynamic-linking.md#using-global-context-to-navigate) inside a code expression.
165242
166243
## Custom Functions
167244
@@ -170,3 +247,18 @@ You can also use custom functions to handle slightly more complex calculations o
170247
:::info
171248
Learn more about [**Custom Functions**](../../../ff-concepts/adding-customization/custom-functions.md).
172249
:::
250+
251+
## FAQS
252+
<details>
253+
<summary>
254+
How is a Custom Code Expression different from an Inline Function?
255+
</summary>
256+
<p>
257+
Custom Code Expression is a more advanced and flexible version of Inline Function.
258+
259+
With Inline Functions, you had to manually pass values as arguments. In contrast, Custom Code Expressions let you directly reference FlutterFlow generated resources (such as `FFAppState()`, `_model`, context, and more) without needing to pass them in.
260+
261+
You can write any valid Dart expression in a Custom code expression, even multi-line logic using anonymous functions. Plus, Custom Code Expressions support real-time autocomplete and inline error validation, making it much easier to discover available variables and avoid mistakes.
262+
263+
</p>
264+
</details>

0 commit comments

Comments
 (0)