Skip to content

Commit 3010b6d

Browse files
authored
Merge branch 'main' into david/migrate-widget-issues
2 parents f6ade7b + dd86b08 commit 3010b6d

File tree

13 files changed

+155
-47
lines changed

13 files changed

+155
-47
lines changed

docs/ff-concepts/design-system/design-system.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ Here are all the properties you can customize:
256256

257257
![main-axis-margin](../imgs/main-axis-margin.avif)
258258

259-
6. **Cross Axis Maring:** This refers to the space or gap along the cross direction of the scrollbar. For instance, in a vertically scrolling list, it refers to the left and right spacing, and in a horizontally scrolling list, it refers to the top and bottom spacing.
259+
6. **Cross Axis Margin:** This refers to the space or gap along the cross direction of the scrollbar. For instance, in a vertically scrolling list, it refers to the left and right spacing, and in a horizontally scrolling list, it refers to the top and bottom spacing.
260260

261261
![cross-axis-margin](../imgs/cross-axis-margin.avif)
262262

docs/ff-integrations/database/cloud-firestore/getting-started.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,39 @@ com/embed/v_hR4K4auoQ" frameborder="0" allow="accelerometer; autoplay; clipboard
9595

9696
:::
9797

98+
## Manage Databases
99+
100+
You can also create multiple Firestore databases within a single Firebase project. This is especially useful for enterprise use cases, for example, when managing region-based databases or supporting multiple clients with isolated data stores.
101+
102+
Additionally, you can use multiple databases to simulate different environments such as development, staging, and production. **However, note that** this setup is not directly related to the [Development Environments](../../../testing-deployment-publishing/development-environments/development-environments.md) in FlutterFlow, which operates independently of Firebase's multi-database configuration. This means that you’ll need to manually switch Firestore Database ID when switching Development Environments.
103+
104+
To create a new database, go to the **Firebase Console > Firestore Database** section. Click the button next to the default database, i.e, **Add database**. Choose a region and configure your security rules. Once the new database is created, you can switch between databases using the dropdown.
105+
106+
Next, copy the new **Database ID** and navigate to **FlutterFlow > Settings and Integrations > Firebase > Advanced Settings**. Paste the ID into the **Firestore Database ID** input field. Finally, regenerate the config file. Your app will now use the newly created database.
107+
108+
109+
<div style={{
110+
position: 'relative',
111+
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
112+
height: 0,
113+
width: '100%'}}>
114+
<iframe
115+
src="https://demo.arcade.software/f2lDuL0yk5UlrjkNnfRF?embed&show_copy_link=true"
116+
title=""
117+
style={{
118+
position: 'absolute',
119+
top: 0,
120+
left: 0,
121+
width: '100%',
122+
height: '100%',
123+
colorScheme: 'light'
124+
}}
125+
frameborder="0"
126+
loading="lazy"
127+
webkitAllowFullScreen
128+
mozAllowFullScreen
129+
allowFullScreen
130+
allow="clipboard-write">
131+
</iframe>
132+
</div>
133+
<p></p>

docs/resources/control-flow/user-interactivity/forms/form-widgets/text-field.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,15 @@ To autofocus a TextField, select the TextField widget, move to the **Properties
410410
</div>
411411
<p></p>
412412

413+
### Enable Interactive Selection
414+
415+
The **Enable Interactive Selection** toggle controls whether users can interact with the text selection features, such as long-press selection, copy/paste menus, and selection handles.
416+
417+
By default, this property is set to **True**, allowing users to select, copy, and paste text using the platform's built-in text selection controls. Disabling this can help prevent unintended text copying or editing, especially in sensitive fields.
418+
419+
420+
![interactive-selection](../imgs/interactive-selection.avif)
421+
413422
### Autocomplete a TextField
414423

415424
You might want to allow users to enter the text by suggesting them a list of items. The suggested items are shown if it contains the currently entered text from TextField. For example, using autocomplete to get the *Country* *name*, *Fruit* *name*, etc.
Binary file not shown.

docs/resources/projects/libraries.md

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,17 +253,17 @@ You can easily upgrade to newer versions of the libraries as they become availab
253253

254254
## Library Pages
255255

256-
You can also add and manage pages within a library, making it easy to reuse those pages across multiple projects. These pages function like any regular project page in your app; they support navigation, parameters, state management, and transitions.
256+
When you publish a library, all the pages included in the library become available for use in the consumer project. These pages function like any regular project page in your app; they support navigation, parameters, state management, and transitions.
257257

258-
Including pages with libraries offers a modular approach to development, making it ideal for large teams and complex, multi-feature apps. For example, instead of recreating common flows like onboarding and payment flows, you can build them in a library once and use them wherever needed.
258+
Library Pages offers a modular approach to development, making it ideal for large teams and complex, multi-feature apps. For example, instead of recreating common flows like onboarding and payment flows, you can build them in a library once and use them wherever needed.
259259

260260
:::tip[Possible Use Cases]
261261
- **Super Apps** like Gojek and Uber with distinct modules such as ride booking, shopping, and payments. Each module can be developed as a separate library and imported into a single main project.
262262
- **Enterprise Apps** with isolated user journeys for different roles, such as admin and customer. Each role-based flow can be built as its own library and integrated into the core app as needed.
263263
- **White-labeled Apps** that share common onboarding flows can benefit from libraries. The onboarding process can be built once as a library and reused across all branded versions of the app.
264264
:::
265265

266-
The library author selects which pages to include and publishes the library. When users import or update the library, they can override the default route names to prevent conflicts between the library and their project. Library pages then appear in navigation actions just like any regular page.
266+
When users import or update the library, they can override the default route names to prevent conflicts between the library and their project. Library pages then appear in navigation actions just like any regular page.
267267

268268
<div style={{
269269
position: 'relative',
@@ -291,7 +291,50 @@ The library author selects which pages to include and publishes the library. Whe
291291
</div>
292292
<p></p>
293293

294+
### Library Pages in NavBar
294295

296+
Library pages can also be used in the NavBar, allowing users to add reusable flows into the app’s primary navigation structure. For example, in a Super App, you can import ride booking, food delivery, or payment pages from separate libraries and add them directly to the bottom navigation, giving users quick access to each module.
297+
298+
:::tip
299+
Want to learn more about building modular Super Apps using libraries? Check out our [**blog post**](https://blog.flutterflow.io/scaling-super-apps-modular-architecture-with-flutterflow-libraries/).
300+
:::
301+
302+
To display a library page on the NavBar, navigate to **Project Dependencies > FlutterFlow Libraries**, then click on **Pages** for the relevant library to open its details. In the list of pages, locate the desired page and click **Nav Bar Settings**, then enable **Show on NavBar**. You can also customize additional settings, such as label and icon, as needed.
303+
304+
To confirm, go to the **Nav Bar & App Bar** section, where you’ll see the library page listed as part of the NavBar items.
305+
306+
:::info
307+
NavBar settings for regular pages are available directly within the Page Settings panel in the builder. However, for Library pages, these settings are managed through the Library Details dialog.
308+
309+
![NavBar-settings-for-regular-and-library-page](imgs/NavBar-settings-for-regular-and-library-page.avif)
310+
:::
311+
312+
313+
<div style={{
314+
position: 'relative',
315+
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
316+
height: 0,
317+
width: '100%'}}>
318+
<iframe
319+
src="https://demo.arcade.software/BDac382RQTHTKFhtZcsc?embed&show_copy_link=true"
320+
title=""
321+
style={{
322+
position: 'absolute',
323+
top: 0,
324+
left: 0,
325+
width: '100%',
326+
height: '100%',
327+
colorScheme: 'light'
328+
}}
329+
frameborder="0"
330+
loading="lazy"
331+
webkitAllowFullScreen
332+
mozAllowFullScreen
333+
allowFullScreen
334+
allow="clipboard-write">
335+
</iframe>
336+
</div>
337+
<p></p>
295338

296339
## Library Values
297340

docs/resources/projects/settings/project-apis.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,13 @@ Authorization: Bearer YOUR_API_TOKEN_HERE
103103
## API Endpoints
104104
Below is a list of available API endpoints with their methods and usage descriptions.
105105

106-
| Endpoint | Method | Purpose |
107-
| --------------------------- | ------ | --------------------------------------------- |
108-
| `/listPartitionedFileNames` | GET | List available YAML file names for a project. |
109-
| `/l/listProjects` | POST | Retrieve metadata for all projects. |
110-
| `/projectYamls` | GET | Export/download YAML files from a project. |
111-
| `/validateProjectYaml` | POST | Validate YAML content before applying changes. |
112-
| `/updateProjectYaml` | POST | Update project configuration via YAML. |
106+
| Endpoint | Method | Purpose |
107+
| --------------------------- | ------ | --------------------------------------------- |
108+
| `/listPartitionedFileNames` | GET | List available YAML file names for a project. |
109+
| `/l/listProjects` | POST | Retrieve metadata for all projects. |
110+
| `/projectYamls` | GET | Export/download YAML files from a project. |
111+
| `/validateProjectYaml` | POST | Validate YAML content before applying changes. |
112+
| `/updateProjectByYaml` | POST | Update project configuration via YAML. |
113113

114114

115115
### List File Names
@@ -358,7 +358,7 @@ curl -X POST \
358358
This endpoint allows you to overwrite existing files in your FlutterFlow project by submitting updated YAML content.
359359

360360
#### Endpoint
361-
`POST /updateProjectYaml`
361+
`POST /updateProjectByYaml`
362362

363363
#### Request Body
364364
```jsx
@@ -413,7 +413,7 @@ This example updates the `ad-mob` file and adds/updates app state variables.
413413

414414
```jsx
415415
curl -X POST \
416-
'https://api.flutterflow.io/v2/updateProjectYaml' \
416+
'https://api.flutterflow.io/v2/updateProjectByYaml' \
417417
-H 'Authorization: Bearer YOUR_API_TOKEN' \
418418
-H 'Content-Type: application/json' \
419419
-d '{
@@ -462,7 +462,7 @@ First, we use the `/listPartitionedFileNames` endpoint to check if the `app-stat
462462
</div>
463463
<p></p>
464464

465-
Next, we open the `app-state.yaml` file and update the `enableDarkMode` variable by setting its `persisted` value to `true`. We then convert the updated YAML into a properly escaped single line string and validate it using the `/validateProjectYaml` endpoint. If validation succeeds, we send the final update using the `/updateProjectYaml` endpoint.
465+
Next, we open the `app-state.yaml` file and update the `enableDarkMode` variable by setting its `persisted` value to `true`. We then convert the updated YAML into a properly escaped single line string and validate it using the `/validateProjectYaml` endpoint. If validation succeeds, we send the final update using the `/updateProjectByYaml` endpoint.
466466

467467

468468
<div style={{
@@ -535,7 +535,7 @@ When YAML validation fails, you'll receive detailed error information:
535535
-d '{"projectId": "project-id", "fileKey": "ad-mob", "fileContent": "showTestAds: false"}'
536536
537537
# 2. If validation passes, apply the changes
538-
curl -X POST 'https://api.flutterflow.io/v2/updateProjectYaml' \
538+
curl -X POST 'https://api.flutterflow.io/v2/updateProjectByYaml' \
539539
-H 'Authorization: Bearer YOUR_API_KEY' \
540540
-H 'Content-Type: application/json' \
541541
-d '{"projectId": "project-id", "fileKeyToContent": {"ad-mob": "showTestAds: false"}}'
Binary file not shown.

docs/resources/ui/widgets/built-in-widgets/tooltip.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@ Here’s exactly how you do it:
117117

118118
On touch devices, the *Tooltip* opens on tap. To make it open on long press instead, use the **Trigger Mode** property.
119119

120+
### Show Tooltip on Focus
121+
122+
The **Show Tooltip on Focus** toggle controls whether the tooltip is displayed when the child widget receives keyboard focus. This is particularly useful for improving accessibility and keyboard navigation, as it ensures users see helpful information when they tab through form fields, interactive elements or any important information.
123+
124+
![tooltip-on-focus](imgs/tooltip-on-focus.avif)
125+
120126
### Change tooltip alignment
121127

122128
By default, the *Tooltip* appears below the target widget. You can change this setting using the **Preferred Direction** property. This allows you to open the Tooltip **Above**, **Left,** and **Right** directions in addition to the **Below**.

docs/testing-deployment-publishing/branching-collaboration/branching.md

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ toc_max_heading_level: 4
1111
# Branching
1212
Branching creates a separate copy of your work, so you can add new features without disrupting your current progress. It enables multiple developers or teams to work simultaneously on different features without interfering with each other.
1313

14-
Suppose you have an eCommerce app and you want to add a new feature, such as a product recommendation system. Instead of incorporating it directly into your `main` branch and potentially causing problems, you can create a branch to work on this new feature in isolation. Once it's complete, you can integrate it back into the `main` branch.
14+
Suppose you have an eCommerce app and you want to add a new feature, such as a product recommendation system. Instead of incorporating it directly into your existing `main` branch and potentially causing problems, you can create a branch to work on this new feature in isolation. Once it's complete, you can integrate it back into the `main` branch.
1515

1616
:::info
1717
While all users can access the branching menu and create commits, only **Pro**, **Teams**, and **Enterprise** plans support creating new branches.
@@ -28,12 +28,18 @@ FlutterFlow. You can also learn more about
2828
## Branching Overview
2929
Before you create and merge a branch, it is essential to understand the general workflow. Here's what it looks like:
3030

31-
![branching](../imgs/branching.avif)
31+
![branching](imgs/branching-overview.avif)
3232

33-
First, create a new branch from the `main` branch. After making your changes and finalizing the
34-
feature, merge this new branch back into the `main` branch. If there are any conflicts,
33+
First, create a new branch from the `main` branch. After making your changes in a new branch and finalizing the feature, merge this new branch back into the `main` branch. If there are any conflicts,
3534
you must resolve them first.
3635

36+
:::note
37+
It’s important to understand what merging actually means. Merging does not perform a "union" of data between branches. Instead, Git merge reconciles differences (diffs) between the branches. When you merge, Git compares the changes made in the new branch with the main branch and applies these changes directly.
38+
39+
For instance, if a branch is created and all existing data is deleted before new content is added, Git interprets this as a replacement. When the branch is merged back into the main branch, those deletions will also be applied removing the original data. This behaviour can be surprising to those expecting Git to automatically preserve all content from both branches. Learn more about [**Merging**](#merging).
40+
41+
To avoid accidental data loss, ensure that your branch workflow involves incremental and intentional changes rather than deleting and replacing all existing content unless that's specifically your goal.
42+
:::
3743

3844
## Creating a New Branch
3945
To create a new branch from the current branch, simply go to the **Branching Options** button next to current branch in the **Branching menu.**
@@ -177,12 +183,12 @@ You can also merge changes from the parent branch, into the current branch. For
177183

178184
![after-merging-2](../imgs/after-merging-2.png)
179185

180-
During a merge, FlutterFlow compares the changes made in both branches, if the changes don't overlap or conflict then the branches are automatically combined. If there are conflicts (for example, both branches modified the same widget property) you'll need to resolve these before the merge can be completed.
186+
During a merge, Git compares the changes made in both branches, if the changes don't overlap or conflict then the branches are automatically combined. If there are conflicts (for example, both branches modified the same widget property) you'll need to resolve these before the merge can be completed.
181187

182188
:::note Few things to note here
183189

184-
- At the moment, FlutterFlow only supports merging into the parent branch, or the branch that the current branch was created from (usually `main`)
185-
- Only the user who initiated the merge can access both the `main` branch and the branch during an ongoing merge.
190+
- At the moment, FlutterFlow only supports merging into the parent branch, or the branch that the current branch was created from.
191+
- Only the user who initiated the merge can access both the branches during an ongoing merge.
186192
- Merges result in a merge [commit](#commits), which means you can undo a merge by restoring the branch to a prior commit
187193
- If you leave the project during the merge and come back, the progress you have made on the merge will be preserved.
188194

0 commit comments

Comments
 (0)