-
Notifications
You must be signed in to change notification settings - Fork 104
Uncategorized: moved articles from the uncategorized folder to various aspect of the document tree. #438
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Uncategorized: moved articles from the uncategorized folder to various aspect of the document tree. #438
Changes from 6 commits
1761c49
57b7670
5fa6aa0
6133e9a
b9380c2
6a1cff4
1794577
c4b147a
e251849
5e4c3b2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
--- | ||
keywords: ['menu', 'submenu', 'local state'] | ||
slug: /resources/create-a-submenu-using-local-state | ||
title: Create a Submenu Using Local State | ||
--- | ||
|
||
# Create a Submenu Using Local State | ||
|
||
This guide demonstrates how to implement a toggleable submenu in a FlutterFlow project using local state and conditional visibility logic. | ||
|
||
Follow the steps below to create a Submenu using Local State: | ||
|
||
1. **Create a Local State Variable** | ||
- Add a boolean local state variable to your page. | ||
- This variable will control the visibility of the submenu (`true` = open, `false` = closed). | ||
|
||
2. **Place the Submenu Inside a Stack** | ||
- Use a `Stack` widget to layer the submenu on top of the page content. | ||
- Position the submenu where you want it to appear. | ||
|
||
3. **Control Visibility with Local State** | ||
- Apply a visibility condition on the submenu widget using the boolean state variable. | ||
- When the value is `true`, the submenu will be shown; when `false`, it will be hidden. | ||
|
||
4. **Add Toggle Action to Menu Icon** | ||
- On the `onTap` event of the menu icon button, add a conditional action: | ||
- If the state variable is `false`, set it to `true`. | ||
- If it is `true`, set it to `false`. | ||
|
||
5. **Close Menu When Item is Tapped** | ||
- After triggering any submenu action, set the local state variable to `false` to close the menu. | ||
|
||
6. **Dismiss Menu When Tapping Page Background** | ||
- Wrap the main page content in a `GestureDetector`. | ||
- On tap, set the local state variable to `false` to close the menu when the user taps outside it. | ||
|
||
:::tip | ||
The `Stack` widget allows placing widgets on top of each other, which is essential for layering the submenu over other UI elements. | ||
::: | ||
|
||
:::info[Examples] | ||
- [Project Example](https://app.flutterflow.io/project/sub-menu-840l5q) | ||
- [Run Mode Preview](https://app.flutterflow.io/run/LfzBGTaef8WldndHa2x4) | ||
::: | ||
|
||
 |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,7 @@ tags: [Auth Actions, Authentication, Firebase] | |
sidebar_position: 1 | ||
keywords: [FlutterFlow, Auth Actions, Authentication, Firebase] | ||
--- | ||
|
||
# Common Auth Actions | ||
|
||
Here's a list of common authentication actions: | ||
|
@@ -22,6 +23,35 @@ Follow the steps below to add this action: | |
|
||
 | ||
|
||
## Login [Action] | ||
|
||
The Login action allows users to authenticate and gain access to your app. Login behavior can differ based on the provider you configure (e.g., email/password, Google, Apple, phone number). Each provider has its own setup, but they all share the same underlying action to sign in users. | ||
|
||
You typically add the login action to a button (e.g., "Login" or "Sign In") that collects user credentials via TextFields or third-party authentication triggers. | ||
|
||
## Handling Invalid Login Credentials | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. adding this after logout action doesnt make sense because this page doesnt have login action. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have done that There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. where? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
||
When a user enters incorrect login credentials, FlutterFlow automatically displays a `SnackBar` with an error message. This helps users understand why their login attempt failed without needing custom logic. | ||
|
||
 | ||
|
||
When the **Login Action** fails, a `SnackBar` is shown with the relevant error (e.g., “No user found” or “Wrong password”). This message appears automatically during runtime; no additional configuration is required. | ||
|
||
:::tip | ||
There is no need to manually add alert dialogs for failed login attempts. FlutterFlow handles `SnackBar` display automatically when authentication fails. | ||
::: | ||
|
||
**Customize the SnackBar (Optional)** | ||
|
||
1. Select the **Login Action** from your button or trigger. | ||
2. In the **Actions tab**, open the **Action Output** section. | ||
3. Use conditional logic to check the error message. | ||
4. Display a custom `SnackBar` or navigate based on the message content. | ||
|
||
:::note | ||
To customize the `SnackBar` further, use the **Action Output** and attach additional logic based on the error string. | ||
::: | ||
|
||
## Reset Password | ||
|
||
With Firebase Authentication, there are two ways you can allow users to reset their password in your FlutterFlow app: | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
--- | ||
keywords: ['device', 'address', 'current'] | ||
slug: /integrations/maps/convert-device-location-to-address | ||
title: Convert Device Location to Address | ||
--- | ||
|
||
# Convert Device Location to Address in FlutterFlow | ||
mrdavidorok marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
This guide is part of the **[Geocoding in FlutterFlow](/geocoding)** series. | ||
It focuses on **reverse geocoding**—turning a device’s latitude and longitude into a readable address (such as city or street name). | ||
|
||
You can achieve this in FlutterFlow using either: | ||
|
||
- **The Google Maps Geocoding API** (via API Calls) | ||
- **The `geocoding` Dart package** (via a Custom Action) | ||
|
||
Explore a live example in this **[FlutterFlow sample project](https://app.flutterflow.io/project/geo-track-rvndye)**. | ||
|
||
**Option 1: Using the Google Maps API** | ||
|
||
1. **Enable the Geocoding API** | ||
|
||
1. Go to the [Google Cloud Console](https://console.cloud.google.com/). | ||
2. Select your project. | ||
3. Search for and enable the **Geocoding API**. | ||
|
||
 | ||
|
||
2. **Add API Key to App State** | ||
|
||
1. Go to **App State > Local State** in FlutterFlow. | ||
2. Add a new variable: | ||
- `apiKey` → Type: `String` | ||
3. Paste your Geocoding API key as the default value. | ||
|
||
 | ||
|
||
3. **Create the API Call** | ||
|
||
1. Navigate to **API Calls** in FlutterFlow. | ||
2. Create a new API call with the following configuration: | ||
|
||
- **Base URL**: | ||
```js | ||
https://maps.googleapis.com/maps/api/geocode/json | ||
``` | ||
- **Method**: `GET` | ||
|
||
3. Under **Variables**, add: | ||
- `latlng` → Type: `String` | ||
- `apiKey` → Type: `String` | ||
|
||
 | ||
|
||
4. Create a Custom Function (LatLng → String) | ||
|
||
Create a custom function that accepts a `LatLng` value (device location) and returns a string in `"latitude,longitude"` format. | ||
|
||
This will be used to populate the `latlng` variable in your API call. | ||
|
||
 | ||
|
||
5. **Run the API and Display the Result** | ||
|
||
1. Add a button or trigger to run the API call. | ||
2. Pass the following: | ||
- `latlng`: From the custom function. | ||
- `apiKey`: From local state. | ||
3. From the API response, extract the address using a **JSON Path**. | ||
|
||
Example JSON Path for city name: | ||
```json | ||
$.results[0].address_components[1].long_name | ||
``` | ||
4. Bind the extracted value to a `Text` widget. | ||
|
||
**Option 2: Using the `geocoding` Dart Package** | ||
|
||
If you prefer to use Flutter's native functionality, you can achieve the same result using the geocoding Dart package in a custom action. | ||
|
||
1. **Add the Package** | ||
Add the dependency to your project’s pubspec.yaml file: | ||
|
||
```js | ||
dependencies: | ||
geocoding: ^2.1.0 | ||
``` | ||
|
||
2. **Create a Custom Action** | ||
- Create a new custom action. | ||
- Add a parameter: LatLng location. | ||
3. Use the geocoding package to convert the coordinates into a readable address. | ||
|
||
Sample code: | ||
|
||
```js | ||
import 'package:geocoding/geocoding.dart'; | ||
|
||
Future<String> getAddressFromLocation(LatLng location) async { | ||
final placemarks = await placemarkFromCoordinates(location.latitude, location.longitude); | ||
final place = placemarks.first; | ||
return '${place.locality}, ${place.country}'; | ||
} | ||
|
||
``` | ||
4. Return the result and bind it to a Text widget. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
--- | ||
mrdavidorok marked this conversation as resolved.
Show resolved
Hide resolved
|
||
slug: /integrations/maps/geocoding | ||
title: Geocoding in FlutterFlow | ||
keywords: ['geocoding', 'reverse geocoding', 'maps', 'location', 'address'] | ||
--- | ||
|
||
# Geocoding in FlutterFlow | ||
|
||
**Geocoding** is the process of converting between human-readable addresses (like “1600 Amphitheatre Parkway, Mountain View, CA”) and geographic coordinates (latitude and longitude). | ||
|
||
FlutterFlow supports geocoding through **custom API calls** and **custom code actions**, giving you flexibility to choose the approach that works best for your app. | ||
|
||
**Types of Geocoding** | ||
|
||
There are two common types of geocoding: | ||
|
||
1. **Forward Geocoding** | ||
Converting an address into geographic coordinates. | ||
*Example:* `"Paris, France"` → `(48.8566, 2.3522)` | ||
|
||
2. **Reverse Geocoding** | ||
Converting geographic coordinates into an address. | ||
*Example:* `(37.4221, -122.0841)` → `"1600 Amphitheatre Parkway, Mountain View, CA"` | ||
|
||
**Approaches in FlutterFlow** | ||
|
||
You can implement geocoding in FlutterFlow in two main ways: | ||
|
||
1. **Google Maps Geocoding API** | ||
|
||
- Uses the official Google Maps API for reliable, global geocoding. | ||
- Requires a Google Cloud project and API key. | ||
- Works via a standard API Call in FlutterFlow. | ||
- Best for: | ||
- Apps with existing Google Maps integrations. | ||
- Large-scale or high-accuracy location services. | ||
|
||
See: **[Google Maps Geocoding API Documentation](https://developers.google.com/maps/documentation/geocoding)** | ||
|
||
2. **`geocoding` Dart Package (Custom Code)** | ||
|
||
- Uses Flutter’s [`geocoding`](https://pub.dev/packages/geocoding) package for native geocoding. | ||
- Works entirely offline for some lookups (depending on platform and data availability). | ||
- Implemented via a custom action in FlutterFlow. | ||
- Best for: | ||
- Apps that don’t want to rely on external APIs. | ||
- Simpler geocoding needs. | ||
|
||
:::tip[Related Guides] | ||
- [Convert Device Location to Address](/convert-device-location-to-address) — Step-by-step guide for reverse geocoding a device’s coordinates. | ||
- (Coming soon) Forward Geocoding with FlutterFlow — Learn how to convert an address into coordinates. | ||
::: | ||
|
||
|
||
:::tip | ||
If your app already uses Google Maps for displaying locations, the Google API method will be the most seamless. If you want a code-based approach that avoids API calls, the `geocoding` package is a good alternative. | ||
::: |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -73,6 +73,26 @@ For the **iOS** platform, it uses the [**KeyChain**](https://developer.apple.com | |
In the case of the **Web**, it uses the [**Web Cryptography**](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) (Web Crypto) API. | ||
::: | ||
|
||
## Example: Check Onboarding Completion Using App State | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. did you read the content on this file? do you think its the correct file? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I didnt work on this article There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. what does that mean? you are adding info to this file, so wont you first read the file? |
||
|
||
Use a persisted app state variable to ensure users complete onboarding before accessing certain parts of your app (e.g., home screen, checkout). | ||
|
||
Follow the steps below: | ||
|
||
1. **Create a Boolean Variable** | ||
- Go to **App Settings > State Management > Persisted Values**. | ||
- Create a boolean variable like `hasCompletedOnboarding`, default: `false`. | ||
|
||
2. **Update After Onboarding** | ||
- On the final onboarding screen, add an **Update Persisted Value** action to set `hasCompletedOnboarding = true`. | ||
|
||
3. **Add Conditional Navigation** | ||
- On the target page’s **Page Load**, add a **Conditional Action**: | ||
- If `hasCompletedOnboarding == false` → Navigate to the onboarding page. | ||
|
||
:::tip | ||
Use `Local State` for session-only checks; use `Persisted` for cross-session logic. | ||
::: | ||
|
||
## Global State | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,6 +13,26 @@ keywords: [App Builder, FlutterFlow, UI, Design] | |
On opening the project, you'll see the App Builder, which consists of four main sections: | ||
[Navigation Menu](#navigation-menu), [Toolbar](#toolbar), [Canvas](#canvas-area), and [Properties Panel](#properties-panel). | ||
|
||
:::warning[Editor Performance Does Not Affect App Builds] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why is it the first thing in the article? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I didn't work on this article. It wasn't written by me There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. again what do you even mean? you're adding info to this file and I'm adding comments on your content addition, not on his content |
||
|
||
Slow performance in the FlutterFlow editor, such as UI lag or long loading times, may occur in large projects or long sessions, but **this does not impact the performance of your final app build**. | ||
|
||
Editor slowness is typically caused by: | ||
- Large projects with many pages or custom functions. | ||
- Long text blocks typed directly into the editor. | ||
- Accumulated browser cache from extended sessions. | ||
|
||
To improve responsiveness: | ||
- Draft long content externally before pasting into the editor. | ||
- Restart your browser regularly. | ||
- Use the macOS app version for better UI performance. | ||
- Close unused pages or widgets to free up memory. | ||
|
||
The compiled app’s performance depends on your app logic, code efficiency, and device resources—not the speed of the editor environment. | ||
|
||
::: | ||
|
||
|
||
 | ||
|
||
## Navigation Menu | ||
|
@@ -54,4 +74,5 @@ elements on the canvas. It allows you to add [Actions](../../resources/control-f | |
The Properties Panel will vary slightly depending on the entity you have selected. To explore the details of each Properties Panel, click on the following: | ||
|
||
- **[Page Properties](../../resources/ui/pages/pages-properties.md)** (when you have selected a Page) | ||
- **[Widget Properties](../../resources/ui/widgets/widget-properties.md)** (when you have selected any widget, including built-in components) | ||
- **[Widget Properties](../../resources/ui/widgets/widget-properties.md)** (when you have selected any widget, including built-in components) | ||
|
Uh oh!
There was an error while loading. Please reload this page.