Skip to content

Commit a3b2889

Browse files
authored
Merge branch 'main' into pinkesh/update-teams-library
2 parents 28721e0 + 18131e4 commit a3b2889

File tree

9 files changed

+245
-10
lines changed

9 files changed

+245
-10
lines changed

docs/ff-concepts/adding-customization/vscode-extension.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,3 +229,42 @@ To delete a Custom Action or Widget, delete the associated file.
229229
You can add custom [pub.dev](https://pub.dev/) package dependencies with the `Dart: Add Dependency` command from the Visual Studio Code command palette. This will update the `pubspec.yaml` file.
230230

231231

232+
## FAQs
233+
<details>
234+
<summary>How do I download code from the Beta or Enterprise version of FlutterFlow?</summary>
235+
<p>
236+
If you're using a different version of FlutterFlow, such as *Beta* or *Enterprise*, you can override the URL by modifying the **Extension Settings > settings.json** file.
237+
238+
For example:
239+
240+
- For the **Beta** version, set the `flutterflow.urlOverride` value to `https://api-beta.flutterflow.io/v1`.
241+
- For the **Enterprise** version, set the `flutterflow.urlOverride` value to `https://api-enterprise-[region].flutterflow.io` (replace [region] with your specific region).
242+
243+
<div style={{
244+
position: 'relative',
245+
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
246+
height: 0,
247+
width: '100%'}}>
248+
<iframe
249+
src="https://demo.arcade.software/nt5zn8DE5GxLPbKeZVL3?embed&show_copy_link=true"
250+
title=""
251+
style={{
252+
position: 'absolute',
253+
top: 0,
254+
left: 0,
255+
width: '100%',
256+
height: '100%',
257+
colorScheme: 'light'
258+
}}
259+
frameborder="0"
260+
loading="lazy"
261+
webkitAllowFullScreen
262+
mozAllowFullScreen
263+
allowFullScreen
264+
allow="clipboard-write">
265+
</iframe>
266+
</div>
267+
<p></p>
268+
269+
</p>
270+
</details>

docs/ff-concepts/layout/responsive-layout.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ For `Row 2`, set its Expansion property to *Flexible* (the middle icon) and assi
8585

8686
![test-expansion.avif](imgs/test-expansion.avif)
8787

88-
I encourage you to test with different web dimensions and sizes to see how well this adapts.
88+
We encourage you to test with different web dimensions and sizes to see how well this adapts.
8989

9090
Depending on your design needs, there are various approaches to managing space. Let's consider a different scenario: What if we want the searchBar to always occupy 40% of the screen width, with `Row 2` taking up the remaining space after placing the `searchBar` and `search IconButton`?
9191

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
---
2+
slug: /concepts/layouts/flex
3+
title: Flex
4+
description: Learn how to add the Flex widget in your FlutterFlow app.
5+
tags: [Flex, Widget, Concepts]
6+
sidebar_position: 2
7+
keywords: [FlutterFlow, Wrap, Concepts]
8+
---
9+
10+
# Flex
11+
12+
The **Flex** widget can be used as an alternative to **Row** and **Column**. It allows you to dynamically set the layout axis (horizontal or vertical) based on specific conditions or logic. This is especially useful for creative responsive layouts - where child elements should be horizontal when the screen is wide, and vertical when the screen is narrow.
13+
14+
![flex.png](imgs/flex.png)
15+
16+
17+
18+
## Adding Flex Widget
19+
20+
To use the Flex widget, add it from the **Layout Elements** section of the **Widget Palette**, then add child widgets inside it. From the properties panel, set a condition for the **Is Horizontal** property. When this condition evaluates to `True`, the items will be laid out horizontally.
21+
22+
Consider an ecommerce app where recent orders are displayed vertically on mobile devices and switch to a horizontal layout on larger screens to make better use of the available space.
23+
24+
<div style={{
25+
position: 'relative',
26+
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
27+
height: 0,
28+
width: '100%'}}>
29+
<iframe
30+
src="https://demo.arcade.software/3zWIgGDDec21fNIeCVOU?embed&show_copy_link=true"
31+
title=""
32+
style={{
33+
position: 'absolute',
34+
top: 0,
35+
left: 0,
36+
width: '100%',
37+
height: '100%',
38+
colorScheme: 'light'
39+
}}
40+
frameborder="0"
41+
loading="lazy"
42+
webkitAllowFullScreen
43+
mozAllowFullScreen
44+
allowFullScreen
45+
allow="clipboard-write">
46+
</iframe>
47+
</div>
48+
<p></p>
49+
50+
Here's another example of using a Flex widget on a create account page to dynamically align the signup fields based on screen size.
51+
52+
<div style={{
53+
position: 'relative',
54+
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
55+
height: 0,
56+
width: '100%'}}>
57+
<iframe
58+
src="https://demo.arcade.software/HPk574WhIatWbJBdlxtf?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+
:::tip[Best Practices]
79+
80+
- If you only need a simple vertical or horizontal arrangement, consider using [**Row**](../../../resources/ui/widgets/composing-widgets/rows-column-stack.md) or [**Column**](../../../resources/ui/widgets/composing-widgets/rows-column-stack.md).
81+
- For very large numbers of children, consider using [**ListView**](../../../resources/ui/widgets/composing-widgets/list-grid.md#listview-widget) or [**GridView**](../../../resources/ui/widgets/composing-widgets/list-grid.md#gridview-widget) instead of **Flex**, as they offer better performance for scrolling large lists of items.
82+
- When the content exceeds the screen limit, you can enable scrolling to make the content accessible. However, if you want to avoid scrolling altogether and still fit all the content on the screen, consider using a [**Wrap**](wrap-widget.md) widget.
83+
84+
:::
85+
86+
## Customization
87+
88+
When **Is Horizontal** property is disabled, the Flex widget behaves like a Column, and when enabled, it acts as a Row. Settings like [main axis alignment](../../../resources/ui/widgets/composing-widgets/rows-column-stack.md#main-axis), [cross axis alignment](../../../resources/ui/widgets/composing-widgets/rows-column-stack.md#cross-axis), [scrollability](../../../resources/ui/widgets/composing-widgets/rows-column-stack.md#scrollability), and [spacing](../../../resources/ui/widgets/composing-widgets/rows-column-stack.md#spacing) work the same way they do for the Column and Row widgets.
89+
90+
49.2 KB
Loading

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ How this app state update will affect your app.
8383
- **No Rebuild:** No rebuild is required.
8484

8585
:::tip[Generated Code]
86-
Curious about how state changes are handled internally when you choose different **Update Type** options? Explore the detailed [**FFAppState**](../../generated-code/ff-app-state) guide.
86+
Curious about how state changes are handled internally when you choose different **Update Type** options? Explore the detailed [**FFAppState**](../../generated-code/ff-app-state.md) guide.
8787
:::
8888

8989
Here's a quick guide to updating the app state variable. We need to add an action to the 'Add to Bag' button. Within this action, we'll provide the product details and configure it to add to the current cart list.
Binary file not shown.

docs/resources/projects/libraries.md

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ With Libraries, you can publish the complete FlutterFlow project as a library an
3737

3838
## Publishing a Library
3939

40+
To make the resources in your project available for others to use, publish your project as Library.
41+
42+
When you publish your project as a Library, your project will become a **Library Project**, and [certain features](#disabled-features-in-a-library) will no longer be available.
43+
44+
:::note
45+
When you publish your project as Library, it can not be reverted. If you want to restore your project so that it is no longer a Library, you can clone the project. However, things like your deployment and Firestore settings will be cleared. If you want to preserve the state of your project before turning it into a Library, you should clone it first and then publish.
46+
:::
47+
4048
To publish a FlutterFlow project as a library, start by creating a FlutterFlow project as you normally would, then follow these steps:
4149

4250
<div style={{
@@ -78,7 +86,7 @@ When a project is converted into a library, the following features are disabled
7886

7987
- App settings
8088
- Firebase
81-
- Development environment
89+
- Development environments
8290
- Authentication
8391
- Push notifications
8492
- Mobile deployment
@@ -226,6 +234,89 @@ You can easily upgrade to newer versions of the libraries as they become availab
226234

227235
![update-library](imgs/update-library.avif)
228236

237+
## Library Values
238+
239+
**Library values** are essentially variables created and used by a library author and intended to have their values set by the library user. These values allow library author to create configurable variables that are useful in different contexts, such as API keys, global settings, or other project-specific configurations. These values allow library users to input specific data required for the library to function properly in their project.
240+
241+
For example, If someone has built a library that uses OpenAI API, they would define a Library Value for the OpenAI API key. As the user of the library, when you import, you must provide your own API key to ensure the library functions properly.
242+
243+
By using Library Values, the library author allows users to adapt the library to their own configurations without hardcoding sensitive or project-specific data, like API keys, into the library itself.
244+
245+
### Create Library Values as Author
246+
247+
The library author defines the variable name, data type (e.g., string, enum), whether the variable is nullable, and an optional default value.
248+
249+
To create library values, navigate to **Settings and Integrations > App Settings > Publish as Library > Library Values** section and click **+ Add Value**.
250+
251+
<div style={{
252+
position: 'relative',
253+
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
254+
height: 0,
255+
width: '100%'}}>
256+
<iframe
257+
src="https://demo.arcade.software/vGIveMr1UmSlaiOreYmR?embed&show_copy_link=true"
258+
title=""
259+
style={{
260+
position: 'absolute',
261+
top: 0,
262+
left: 0,
263+
width: '100%',
264+
height: '100%',
265+
colorScheme: 'light'
266+
}}
267+
frameborder="0"
268+
loading="lazy"
269+
webkitAllowFullScreen
270+
mozAllowFullScreen
271+
allowFullScreen
272+
allow="clipboard-write">
273+
</iframe>
274+
</div>
275+
<p></p>
276+
277+
#### Use Library Values
278+
After setting Library Values, they function just like any other variable in FlutterFlow. You can bind them to components, actions, API calls, or any property that allows you to configure dynamic values across your library project. You can access Library Values via the ****Set from Variable**** menu.
279+
280+
:::tip
281+
Library values are used only within the library project and are not available for use in the project that imports it. The library user can only set their values.
282+
:::
283+
284+
![access-library-values](imgs/access-library-values.avif)
285+
286+
### Set Library Values as User
287+
288+
To set library values, navigate to **Settings and Integrations > Project Setup > Project Dependencies** page. When you import a library, you'll be prompted to set values for required Library Values. If the library has already been added, click on **View Details**, which will open a dialog and then you can enter a value.
289+
290+
<div style={{
291+
position: 'relative',
292+
paddingBottom: 'calc(56.67989417989418% + 41px)', // Keeps the aspect ratio and additional padding
293+
height: 0,
294+
width: '100%'}}>
295+
<iframe
296+
src="https://demo.arcade.software/JG68MN6oBpZpPvHnKDmh?embed&show_copy_link=true"
297+
title=""
298+
style={{
299+
position: 'absolute',
300+
top: 0,
301+
left: 0,
302+
width: '100%',
303+
height: '100%',
304+
colorScheme: 'light'
305+
}}
306+
frameborder="0"
307+
loading="lazy"
308+
webkitAllowFullScreen
309+
mozAllowFullScreen
310+
allowFullScreen
311+
allow="clipboard-write">
312+
</iframe>
313+
</div>
314+
<p></p>
315+
316+
:::tip
317+
For different [**development environments**](../../testing-deployment-publishing/development-environments/development-environments.md) (e.g., development vs. production), you can bind Library Values to [**environment values**](../../testing-deployment-publishing/development-environments/development-environments.md#use-environment-values). For instance, you could have two different Library Values for an API key, such as `DEV_OPENAI_API_KEY` and `PROD_OPENAI_API_KEY`, and bind them to the development and production environments to track API usage separately.
318+
:::
319+
229320
## FAQs
230321

231322
<details>

docs/testing-deployment-publishing/development-environments/development-environments.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ Additionally, you must manually set up [**Firestore rules**](../../ff-integratio
119119
The data that you add to Firebase through the Content Manager is specific to the Firebase project, and environment, that you have selected.
120120
:::
121121

122-
#### Comnfiguring Supabase
122+
#### Configuring Supabase
123123
If your project uses Supabase, you'll need to [**set up a new Supabase project**](../../ff-integrations/supabase/supabase-setup.md) for each environment.
124124

125125
Create environment-specific values like `SupabaseAPIURL` and `SupabaseAnonKey`, and then configure the Supabase properties to point to these newly created values. Below is an example of how it would look like.

docs/testing-deployment-publishing/exporting-code/ff-cli.md

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,27 @@ To use the CLI, you'll need to create an API token and use it in your requests.
6464

6565
| Flag | Behavior | Default |
6666
| --- | --- | --- |
67-
| --dest / -d | Specifies a destination folder other than the current directory | Current directory |
68-
| --[no]-include-assets | Option to download assets (images, GIFs). Useful for consecutive code exports if the assets folder hasn't changed | False |
69-
| --branch-name / -b | Downloads from a specific branch | Main |
70-
| --[no]-fix | Option to run dart fix on the code after downloading | False |
71-
| --[no]-parent-folder | Option to download the code into a subfolder instead of directly into the directory | False |
67+
| --dest / -d | Specifies a destination folder other than the current directory. | Current directory |
68+
| --[no]-include-assets | Option to download assets (images, GIFs). Useful for consecutive code exports if the assets folder hasn't changed. | False |
69+
| --branch-name / -b | Downloads from a specific branch. | Main |
70+
| --[no]-fix | Option to run dart fix on the code after downloading. | False |
71+
| --[no]-parent-folder | Option to download the code into a subfolder instead of directly into the directory. | False |
72+
| --[no]-as-module | Whether to generate the project as a Flutter module. | False |
73+
| --[no]-as-debug | Whether to generate the project with debug logging to be able to use FlutterFlow Debug Panel inside the DevTools. | False |
74+
| --project-environment | Which [development environment](../development-environments/development-environments.md) to be used. If empty, the current environment in the project will be downloaded. | Current environment |
7275

7376
## Filtered exports
7477

75-
We've developed [a solution](https://github.com/krabhishek/flutterflow-filtered-pull) that allows you to use the CLI tool without overwriting specific files or directories. This is especially useful if you're managing code outside of FlutterFlow and want to prevent it from being overwritten during a code export.
78+
We've developed [a solution](https://github.com/krabhishek/flutterflow-filtered-pull) that allows you to use the CLI tool without overwriting specific files or directories. This is especially useful if you're managing code outside of FlutterFlow and want to prevent it from being overwritten during a code export.
79+
80+
## FAQ
81+
<details>
82+
<summary>I am getting an error as FormatException: Missing argument for…</summary>
83+
<p>
84+
This error likely indicates that you haven't correctly entered the command option along with its value. Double-check that all required information has been entered. If everything is correct and you're still encountering the error, it might be due to using an outdated version of the FlutterFlow CLI. To resolve this, you can update to the latest version by running the installation command:
85+
```
86+
dart pub global activate flutterflow_cli
87+
```
88+
This should update the CLI and fix the issue.
89+
</p>
90+
</details>

0 commit comments

Comments
 (0)