Skip to content

Commit a092364

Browse files
committed
add flutter secure storage info
1 parent 70fa18c commit a092364

File tree

5 files changed

+35
-24
lines changed

5 files changed

+35
-24
lines changed

docs/generated-code/component-gen-code.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
2-
title: Components
2+
title: Component Model
33
slug: /generated-code/component-model
4-
sidebar_position: 6
4+
sidebar_position: 5
55
---
66

77
# Generated Code: Components

docs/generated-code/ff-app-state.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: FFAppState
3-
sidebar_position: 2
3+
sidebar_position: 4
44
---
55

66
# FFAppState

docs/generated-code/pages-generated-code.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Pages
2+
title: Page Model
33
slug: /generated-code/page-model
44
sidebar_position: 5
55
---

docs/generated-code/securing-keys-generated-code.md

Lines changed: 0 additions & 9 deletions
This file was deleted.

docs/ff-concepts/state-management/generated-code.md renamed to docs/generated-code/state-mgmt-gen-code.md

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
---
2-
slug: /concepts/state-management/generated-code
3-
title: Generated Code
2+
slug: /generated-code/state-management-generated-code
3+
title: FlutterFlow State Management
44
description: Learn about the state management used in FlutterFlow's generated code.
55
tags: [Generated Code, Concepts, State Management]
6-
toc_max_heading_level: 5
7-
sidebar_position: 2
6+
toc_max_heading_level: 4
7+
sidebar_position: 3
88
keywords: [FlutterFlow, Generated Code, State Management, Concepts]
99
---
1010

11-
# State Management
11+
# FlutterFlow State Management
12+
13+
:::warning[Correct topic?]
14+
This document explains the generated code behind the state management approaches used in FlutterFlow. If you're looking for guidance on adding state variables in FlutterFlow, refer to the **[State Variables](../ff-concepts/state-management/state-variables.md)** documentation.
15+
:::
1216

1317
FlutterFlow manages state in several ways, depending on the scope.
1418

15-
Generally, state management is handled using the Provider package, which facilitates the provisioning of data models for components, pages, and the overall app state.
19+
Generally, state management is handled using the [Provider](https://pub.dev/packages/provider) package, which facilitates the provisioning of data models for components, pages, and the overall app state.
1620

17-
![state-management.avif](../../../static/img/state-management.avif)
21+
![state-management.avif](../../static/img/state-management.avif)
1822

1923
## Page & Component Models
2024

@@ -24,13 +28,13 @@ Additionally, they provide space for action blocks, which are a set of actions t
2428

2529
## Page State
2630

27-
[Variables](../../resources/ui/pages/page-lifecycle.md) used exclusively within a page — such as a text field validator or the value of a checkbox — are stored in the `Model` of each page. These variables can be accessed by other component children on the same page. For instance, on a page with a form, tapping a button in one component may need to access the value of a text field in a different component.
31+
[Variables](../resources/ui/pages/page-lifecycle.md) used exclusively within a page — such as a text field validator or the value of a checkbox — are stored in the `Model` of each page. These variables can be accessed by other component children on the same page. For instance, on a page with a form, tapping a button in one component may need to access the value of a text field in a different component.
2832

2933
Variables within a page are tracked through `StatefulWidget` and are encapsulated into that page’s Model.
3034

3135
## Component State
3236

33-
Similar to page state, [**Component State variables**](../../resources/ui/components/component-lifecycle.md) are accessible within the component where they are defined. Each component has a corresponding `Model` and `Widget` class. Variables may be passed in from their parent as parameters. Additionally, you can access component state values from its parent Page widget.
37+
Similar to page state, [**Component State variables**](../resources/ui/components/component-lifecycle.md) are accessible within the component where they are defined. Each component has a corresponding `Model` and `Widget` class. Variables may be passed in from their parent as parameters. Additionally, you can access component state values from its parent Page widget.
3438

3539
This accessibility is possible because the Model of a component is instantiated within the parent Page model. It utilizes the Provider method `context.read()`, which returns any existing model in the tree before instantiating a new one. Thus, any updates to the state in the component model will reflect in the parent’s instance of that component model.
3640

@@ -40,6 +44,13 @@ For example, if a page includes a component with a text field and later on the p
4044

4145
It’s important to note that components cannot directly access variables of other components on the same page. However, you can pass a variable from ComponentA as a parameter to ComponentB in their parent Page. This ensures that ComponentB receives all updates from ComponentA as expected.
4246

47+
## App State
48+
49+
:::info[FFAppState]
50+
The generated code behind FlutterFlow's App State class is explained in the **[FFAppState](ff-app-state.md)** documentation.
51+
52+
:::
53+
4354
## Variables
4455

4556
Variables required across multiple pages of the app, such as a username, should be added to the App State. Refer to `lib/app_state.dart`.
@@ -50,9 +61,18 @@ On each page that requires access to app state variables, the method ```context.
5061

5162
## Persisting App State
5263

53-
When an app state variable is created, selecting the "Persisted" option enables FlutterFlow to save it on the device using the [shared_preferences package](https://pub.dev/packages/shared_preferences). This ensures the variable remains available even after the app is restarted, making it ideal for persisting settings such as login status or a user's choice between light and dark modes.
64+
When an app state variable is created, selecting the "Persisted" option enables FlutterFlow to save it on the device using the [**Shared Preferences**](https://pub.dev/packages/shared_preferences) package. This ensures the variable remains available even after the app is restarted, making it ideal for persisting settings such as login status or a user's choice between light and dark modes.
65+
66+
If the "**Secure Persisted Fields**" option is enabled in the app state settings, FlutterFlow utilizes the [**Flutter Secure Storage**](https://pub.dev/packages/flutter_secure_storage) package to encrypt the data.
67+
68+
:::tip[Platform Differences]
69+
If the platform is **Android**, then `flutter_secure_storage` stores data in [**`encryptedSharedPreference`**](https://developer.android.com/reference/androidx/security/crypto/EncryptedSharedPreferences), which are shared preferences that encrypt keys and values. It handles [**AES Encryption**](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) to generate a secret key encrypted with [**RSA**](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) and stored in [**KeyStore**](https://developer.android.com/reference/java/security/KeyStore).
70+
71+
For the **iOS** platform, it uses the [**KeyChain**](https://developer.apple.com/documentation/security/keychain_services) which is an iOS-specific secure storage used to store and access cryptographic keys only in your app.
72+
73+
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.
74+
:::
5475

55-
If the "Secure Persisted Fields" option is enabled in the app state settings, FlutterFlow utilizes the [flutter_secure_storage package](https://pub.dev/packages/flutter_secure_storage) to encrypt the data. This package leverages platform-specific implementations for data encryption, utilizing Keychain on iOS, KeyStore on Android, and libsecret on Linux.
5676

5777
## Global State
5878

0 commit comments

Comments
 (0)