flutterflow-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +124 -0
- package/build/api/flutterflow.d.ts +11 -0
- package/build/api/flutterflow.js +61 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +54 -0
- package/build/prompts/dev-workflow.d.ts +2 -0
- package/build/prompts/dev-workflow.js +68 -0
- package/build/prompts/generate-page.d.ts +2 -0
- package/build/prompts/generate-page.js +36 -0
- package/build/prompts/inspect-project.d.ts +2 -0
- package/build/prompts/inspect-project.js +30 -0
- package/build/prompts/modify-component.d.ts +2 -0
- package/build/prompts/modify-component.js +39 -0
- package/build/resources/docs.d.ts +2 -0
- package/build/resources/docs.js +76 -0
- package/build/resources/projects.d.ts +3 -0
- package/build/resources/projects.js +60 -0
- package/build/tools/find-component-usages.d.ts +7 -0
- package/build/tools/find-component-usages.js +225 -0
- package/build/tools/find-page-navigations.d.ts +7 -0
- package/build/tools/find-page-navigations.js +228 -0
- package/build/tools/get-component-summary.d.ts +22 -0
- package/build/tools/get-component-summary.js +193 -0
- package/build/tools/get-page-by-name.d.ts +3 -0
- package/build/tools/get-page-by-name.js +56 -0
- package/build/tools/get-page-summary.d.ts +22 -0
- package/build/tools/get-page-summary.js +220 -0
- package/build/tools/get-yaml-docs.d.ts +6 -0
- package/build/tools/get-yaml-docs.js +217 -0
- package/build/tools/get-yaml.d.ts +3 -0
- package/build/tools/get-yaml.js +47 -0
- package/build/tools/list-files.d.ts +3 -0
- package/build/tools/list-files.js +30 -0
- package/build/tools/list-pages.d.ts +25 -0
- package/build/tools/list-pages.js +101 -0
- package/build/tools/list-projects.d.ts +3 -0
- package/build/tools/list-projects.js +19 -0
- package/build/tools/sync-project.d.ts +3 -0
- package/build/tools/sync-project.js +144 -0
- package/build/tools/update-yaml.d.ts +3 -0
- package/build/tools/update-yaml.js +24 -0
- package/build/tools/validate-yaml.d.ts +3 -0
- package/build/tools/validate-yaml.js +22 -0
- package/build/utils/cache.d.ts +48 -0
- package/build/utils/cache.js +162 -0
- package/build/utils/decode-yaml.d.ts +7 -0
- package/build/utils/decode-yaml.js +31 -0
- package/build/utils/page-summary/action-summarizer.d.ts +9 -0
- package/build/utils/page-summary/action-summarizer.js +291 -0
- package/build/utils/page-summary/formatter.d.ts +13 -0
- package/build/utils/page-summary/formatter.js +121 -0
- package/build/utils/page-summary/node-extractor.d.ts +17 -0
- package/build/utils/page-summary/node-extractor.js +207 -0
- package/build/utils/page-summary/tree-walker.d.ts +6 -0
- package/build/utils/page-summary/tree-walker.js +55 -0
- package/build/utils/page-summary/types.d.ts +56 -0
- package/build/utils/page-summary/types.js +4 -0
- package/build/utils/parse-folders.d.ts +9 -0
- package/build/utils/parse-folders.js +29 -0
- package/docs/ff-yaml/00-overview.md +137 -0
- package/docs/ff-yaml/01-project-files.md +513 -0
- package/docs/ff-yaml/02-pages.md +572 -0
- package/docs/ff-yaml/03-components.md +413 -0
- package/docs/ff-yaml/04-widgets/README.md +122 -0
- package/docs/ff-yaml/04-widgets/button.md +444 -0
- package/docs/ff-yaml/04-widgets/container.md +358 -0
- package/docs/ff-yaml/04-widgets/dropdown.md +579 -0
- package/docs/ff-yaml/04-widgets/form.md +256 -0
- package/docs/ff-yaml/04-widgets/image.md +276 -0
- package/docs/ff-yaml/04-widgets/layout.md +355 -0
- package/docs/ff-yaml/04-widgets/misc.md +553 -0
- package/docs/ff-yaml/04-widgets/text-field.md +326 -0
- package/docs/ff-yaml/04-widgets/text.md +302 -0
- package/docs/ff-yaml/05-actions.md +843 -0
- package/docs/ff-yaml/06-variables.md +834 -0
- package/docs/ff-yaml/07-data.md +591 -0
- package/docs/ff-yaml/08-custom-code.md +715 -0
- package/docs/ff-yaml/09-theming.md +592 -0
- package/docs/ff-yaml/10-editing-guide.md +454 -0
- package/docs/ff-yaml/README.md +105 -0
- package/package.json +55 -0
- package/skills/ff-widget-patterns.md +141 -0
- package/skills/ff-yaml-dev.md +58 -0
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
# 01 - FlutterFlow Project-Level YAML Files
|
|
2
|
+
|
|
3
|
+
Reference catalog of project-level YAML files returned by the FlutterFlow API. These files configure app-wide settings and are not tied to individual pages or components.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## app-details.yaml
|
|
8
|
+
|
|
9
|
+
**Purpose:** Core app identity, routing configuration, and environment-specific package names.
|
|
10
|
+
|
|
11
|
+
**Top-level keys:**
|
|
12
|
+
- `name`
|
|
13
|
+
- `authPageInfo`
|
|
14
|
+
- `appSettings`
|
|
15
|
+
- `routingSettings`
|
|
16
|
+
- `initialPageKeyRef`
|
|
17
|
+
- `allAppNames`
|
|
18
|
+
|
|
19
|
+
**Schema:**
|
|
20
|
+
```yaml
|
|
21
|
+
name: "MyApp" # App display name in FF editor
|
|
22
|
+
|
|
23
|
+
authPageInfo:
|
|
24
|
+
homePageNodeKeyRef:
|
|
25
|
+
key: Scaffold_XXXXXXXX # Scaffold ID of the post-auth landing page
|
|
26
|
+
signInPageNodeKeyRef:
|
|
27
|
+
key: Scaffold_XXXXXXXX # Scaffold ID of the sign-in page
|
|
28
|
+
|
|
29
|
+
appSettings:
|
|
30
|
+
advancedSettings:
|
|
31
|
+
webBuildSettings: {} # Web-specific build config (often empty)
|
|
32
|
+
|
|
33
|
+
routingSettings:
|
|
34
|
+
enableRouting: true # Enable named routes
|
|
35
|
+
pagesAreSubroutesOfRoot: false # If true, pages are nested under root
|
|
36
|
+
|
|
37
|
+
initialPageKeyRef:
|
|
38
|
+
key: Scaffold_XXXXXXXX # Scaffold ID of the app entry page (often same as homePage)
|
|
39
|
+
|
|
40
|
+
allAppNames:
|
|
41
|
+
appNames:
|
|
42
|
+
PROD: # Environment key (PROD, DEV, etc.)
|
|
43
|
+
packageName: com.example.app # Android package / iOS bundle ID
|
|
44
|
+
displayName: "MyApp" # App store display name
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Key fields:**
|
|
48
|
+
|
|
49
|
+
| Field | Type | Notes |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `name` | string | Required. Editor-level app name. |
|
|
52
|
+
| `authPageInfo.homePageNodeKeyRef.key` | Scaffold ID | Required when auth is active. Where users land after login. |
|
|
53
|
+
| `authPageInfo.signInPageNodeKeyRef.key` | Scaffold ID | Required when auth is active. Login/signup page. |
|
|
54
|
+
| `initialPageKeyRef.key` | Scaffold ID | Required. First page loaded on app start. |
|
|
55
|
+
| `allAppNames.appNames.<ENV>.packageName` | string | Bundle/package identifier per environment. |
|
|
56
|
+
| `routingSettings.enableRouting` | bool | Enables Flutter named routes. |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## authentication.yaml
|
|
61
|
+
|
|
62
|
+
**Purpose:** Authentication provider configuration (Firebase, Supabase) and platform credentials.
|
|
63
|
+
|
|
64
|
+
**Top-level keys:**
|
|
65
|
+
- `active`
|
|
66
|
+
- `supabase`
|
|
67
|
+
- `firebaseConfigFileInfos`
|
|
68
|
+
|
|
69
|
+
**Schema:**
|
|
70
|
+
```yaml
|
|
71
|
+
active: true # Whether auth is enabled
|
|
72
|
+
|
|
73
|
+
supabase: {} # Supabase config (empty if not used)
|
|
74
|
+
|
|
75
|
+
firebaseConfigFileInfos:
|
|
76
|
+
- androidPath: users/.../google-services.json # GCS path to Android config
|
|
77
|
+
iosPath: users/.../GoogleService-Info.plist # GCS path to iOS config
|
|
78
|
+
webConfig: "firebase.initializeApp({...});\n" # Inline JS init snippet
|
|
79
|
+
androidPackageNames:
|
|
80
|
+
- com.example.app # Registered Android packages
|
|
81
|
+
iosBundleId: com.example.app # iOS bundle identifier
|
|
82
|
+
environment:
|
|
83
|
+
name: Production # Environment label
|
|
84
|
+
key: PROD # Environment key
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Key fields:**
|
|
88
|
+
|
|
89
|
+
| Field | Type | Notes |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| `active` | bool | Required. Master toggle for auth features. |
|
|
92
|
+
| `firebaseConfigFileInfos` | list | One entry per environment. Contains platform credentials. |
|
|
93
|
+
| `firebaseConfigFileInfos[].webConfig` | string | Raw JS snippet with Firebase config object. Escaped newlines. |
|
|
94
|
+
| `firebaseConfigFileInfos[].environment.key` | string | Matches keys in `app-details.yaml > allAppNames.appNames`. |
|
|
95
|
+
| `supabase` | object | Populated when Supabase is the auth provider instead of Firebase. |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## folders.yaml
|
|
100
|
+
|
|
101
|
+
**Purpose:** Defines page/component folder structure and maps each widget class (Scaffold/Container) to its folder.
|
|
102
|
+
|
|
103
|
+
**Top-level keys:**
|
|
104
|
+
- `rootFolders`
|
|
105
|
+
- `widgetClassKeyToFolderKey`
|
|
106
|
+
|
|
107
|
+
**Schema:**
|
|
108
|
+
```yaml
|
|
109
|
+
rootFolders:
|
|
110
|
+
- key: abcd1234 # Unique folder key
|
|
111
|
+
name: auth # Human-readable folder name
|
|
112
|
+
- key: efgh5678
|
|
113
|
+
name: pages
|
|
114
|
+
|
|
115
|
+
widgetClassKeyToFolderKey:
|
|
116
|
+
Scaffold_XXXXXXXX: abcd1234 # Page scaffold -> folder key
|
|
117
|
+
Container_XXXXXXXX: efgh5678 # Component container -> folder key
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Key fields:**
|
|
121
|
+
|
|
122
|
+
| Field | Type | Notes |
|
|
123
|
+
|---|---|---|
|
|
124
|
+
| `rootFolders` | list | Required. Defines all top-level folders. |
|
|
125
|
+
| `rootFolders[].key` | string | 8-char alphanumeric key. Referenced by widget mappings. |
|
|
126
|
+
| `rootFolders[].name` | string | Folder name displayed in FF editor sidebar. |
|
|
127
|
+
| `widgetClassKeyToFolderKey` | map | Maps every `Scaffold_*` (page) and `Container_*` (component) to a folder key. |
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## permissions.yaml
|
|
132
|
+
|
|
133
|
+
**Purpose:** Platform permission declarations with user-facing explanation messages.
|
|
134
|
+
|
|
135
|
+
**Top-level keys:**
|
|
136
|
+
- `permissionMessages`
|
|
137
|
+
- `userDefinedPermissions`
|
|
138
|
+
|
|
139
|
+
**Schema:**
|
|
140
|
+
```yaml
|
|
141
|
+
permissionMessages:
|
|
142
|
+
- permissionType: CAMERA # FF built-in permission enum
|
|
143
|
+
message:
|
|
144
|
+
translationIdentifier:
|
|
145
|
+
key: k2j9ttsz # i18n key
|
|
146
|
+
textValue:
|
|
147
|
+
inputValue: "This app requires camera access..."
|
|
148
|
+
|
|
149
|
+
userDefinedPermissions:
|
|
150
|
+
- names:
|
|
151
|
+
iosName: NSCameraUsageDescription # iOS Info.plist key
|
|
152
|
+
androidName: android.permission. # Android manifest permission
|
|
153
|
+
message:
|
|
154
|
+
translationIdentifier:
|
|
155
|
+
key: 6c6yuxd5
|
|
156
|
+
textValue:
|
|
157
|
+
inputValue: "This app requires camera access..."
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Key fields:**
|
|
161
|
+
|
|
162
|
+
| Field | Type | Notes |
|
|
163
|
+
|---|---|---|
|
|
164
|
+
| `permissionMessages` | list | Built-in FF permission types: `CAMERA`, `PHOTO_LIBRARY`, `MICROPHONE`, `LOCATION`, `NOTIFICATIONS`, etc. |
|
|
165
|
+
| `permissionMessages[].permissionType` | enum string | Required. Must be a recognized FF permission type. |
|
|
166
|
+
| `userDefinedPermissions` | list | Custom platform-level permission entries. |
|
|
167
|
+
| `userDefinedPermissions[].names.iosName` | string | iOS `Info.plist` key (e.g., `NSPhotoLibraryUsageDescription`). |
|
|
168
|
+
| `userDefinedPermissions[].names.androidName` | string | Android manifest permission string. |
|
|
169
|
+
| `*.message.textValue.inputValue` | string | User-facing permission rationale string. |
|
|
170
|
+
| `*.message.translationIdentifier.key` | string | Links to `languages.yaml` translations. |
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## nav-bar.yaml
|
|
175
|
+
|
|
176
|
+
**Purpose:** Bottom navigation bar color configuration.
|
|
177
|
+
|
|
178
|
+
**Top-level keys:**
|
|
179
|
+
- `backgroundColor`
|
|
180
|
+
- `selectedIconColor`
|
|
181
|
+
- `unselectedIconColor`
|
|
182
|
+
|
|
183
|
+
**Schema:**
|
|
184
|
+
```yaml
|
|
185
|
+
backgroundColor:
|
|
186
|
+
themeColor: PRIMARY_BACKGROUND # Theme color token
|
|
187
|
+
|
|
188
|
+
selectedIconColor:
|
|
189
|
+
themeColor: PRIMARY # Active tab icon color
|
|
190
|
+
|
|
191
|
+
unselectedIconColor:
|
|
192
|
+
themeColor: SECONDARY_TEXT # Inactive tab icon color
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Key fields:**
|
|
196
|
+
|
|
197
|
+
| Field | Type | Notes |
|
|
198
|
+
|---|---|---|
|
|
199
|
+
| `backgroundColor.themeColor` | theme token | One of: `PRIMARY`, `SECONDARY`, `PRIMARY_BACKGROUND`, `SECONDARY_BACKGROUND`, `PRIMARY_TEXT`, `SECONDARY_TEXT`, `ACCENT1`-`ACCENT4`, etc. |
|
|
200
|
+
| `selectedIconColor` | color ref | Color when tab is active. |
|
|
201
|
+
| `unselectedIconColor` | color ref | Color when tab is inactive. |
|
|
202
|
+
|
|
203
|
+
> Note: Nav bar page tabs are configured per-page in the page scaffold YAML, not here. This file only controls colors.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## app-bar.yaml
|
|
208
|
+
|
|
209
|
+
**Purpose:** Default app bar template applied to new pages.
|
|
210
|
+
|
|
211
|
+
**Top-level keys:**
|
|
212
|
+
- `templateType`
|
|
213
|
+
- `backgroundColor`
|
|
214
|
+
- `elevation`
|
|
215
|
+
- `defaultIcon`
|
|
216
|
+
- `textStyle`
|
|
217
|
+
- `addOnNewPages`
|
|
218
|
+
|
|
219
|
+
**Schema:**
|
|
220
|
+
```yaml
|
|
221
|
+
templateType: LARGE_HEADER # LARGE_HEADER | SMALL_HEADER | NONE
|
|
222
|
+
|
|
223
|
+
backgroundColor:
|
|
224
|
+
value: "4930031" # Raw ARGB int as string (no 0x prefix)
|
|
225
|
+
|
|
226
|
+
elevation: 0 # Shadow elevation (0 = flat)
|
|
227
|
+
|
|
228
|
+
defaultIcon:
|
|
229
|
+
sizeValue:
|
|
230
|
+
inputValue: 30 # Icon size in logical pixels
|
|
231
|
+
colorValue:
|
|
232
|
+
inputValue:
|
|
233
|
+
themeColor: PRIMARY_TEXT # Icon color
|
|
234
|
+
iconDataValue:
|
|
235
|
+
inputValue:
|
|
236
|
+
codePoint: 62834 # Unicode code point
|
|
237
|
+
family: MaterialIcons # Icon font family
|
|
238
|
+
matchTextDirection: true
|
|
239
|
+
name: arrow_back_rounded # Icon name
|
|
240
|
+
|
|
241
|
+
textStyle:
|
|
242
|
+
themeStyle: HEADLINE_MEDIUM # Theme text style token
|
|
243
|
+
fontSizeValue:
|
|
244
|
+
inputValue: 22 # Font size override
|
|
245
|
+
colorValue:
|
|
246
|
+
inputValue:
|
|
247
|
+
themeColor: PRIMARY_TEXT
|
|
248
|
+
|
|
249
|
+
addOnNewPages: true # Auto-add this app bar to newly created pages
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Key fields:**
|
|
253
|
+
|
|
254
|
+
| Field | Type | Notes |
|
|
255
|
+
|---|---|---|
|
|
256
|
+
| `templateType` | enum | Required. `LARGE_HEADER`, `SMALL_HEADER`, or `NONE`. |
|
|
257
|
+
| `backgroundColor.value` | string | Raw ARGB integer as string (e.g., `"4930031"` = dark color). Not hex. |
|
|
258
|
+
| `elevation` | int | Material elevation. 0 = no shadow. |
|
|
259
|
+
| `defaultIcon.iconDataValue.inputValue.codePoint` | int | Material icon Unicode code point. |
|
|
260
|
+
| `defaultIcon.iconDataValue.inputValue.name` | string | Flutter icon name (e.g., `arrow_back_rounded`). |
|
|
261
|
+
| `textStyle.themeStyle` | theme token | `HEADLINE_SMALL`, `HEADLINE_MEDIUM`, `HEADLINE_LARGE`, `TITLE_SMALL`, etc. |
|
|
262
|
+
| `addOnNewPages` | bool | Whether this app bar is auto-added to new pages. |
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## miscellaneous.yaml
|
|
267
|
+
|
|
268
|
+
**Purpose:** Miscellaneous app-level settings and feature flags.
|
|
269
|
+
|
|
270
|
+
**Top-level keys:**
|
|
271
|
+
- `appSettings`
|
|
272
|
+
|
|
273
|
+
**Schema:**
|
|
274
|
+
```yaml
|
|
275
|
+
appSettings:
|
|
276
|
+
checkCustomCodeReferences: true # Validate custom code references on build
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**Key fields:**
|
|
280
|
+
|
|
281
|
+
| Field | Type | Notes |
|
|
282
|
+
|---|---|---|
|
|
283
|
+
| `appSettings.checkCustomCodeReferences` | bool | When true, FF validates that all custom code references resolve at build time. |
|
|
284
|
+
|
|
285
|
+
> Note: This file is a catch-all. Additional keys may appear depending on project features enabled.
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## revenue-cat.yaml
|
|
290
|
+
|
|
291
|
+
**Purpose:** RevenueCat in-app purchase/subscription integration configuration.
|
|
292
|
+
|
|
293
|
+
**Top-level keys:**
|
|
294
|
+
- `enabled`
|
|
295
|
+
- `appStoreKey`
|
|
296
|
+
- `playStoreKey`
|
|
297
|
+
- `debugLoggingEnabled`
|
|
298
|
+
- `loadDataAfterAppLaunch`
|
|
299
|
+
|
|
300
|
+
**Schema:**
|
|
301
|
+
```yaml
|
|
302
|
+
enabled: true # Master toggle
|
|
303
|
+
appStoreKey: appl_XXXXXXXXXXXX # RevenueCat Apple API key
|
|
304
|
+
playStoreKey: goog_XXXXXXXXXXXX # RevenueCat Google API key
|
|
305
|
+
debugLoggingEnabled: false # Enable RC debug logs
|
|
306
|
+
loadDataAfterAppLaunch: true # Fetch entitlements on app start
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
**Key fields:**
|
|
310
|
+
|
|
311
|
+
| Field | Type | Notes |
|
|
312
|
+
|---|---|---|
|
|
313
|
+
| `enabled` | bool | Required. Enables RevenueCat integration. |
|
|
314
|
+
| `appStoreKey` | string | RevenueCat public API key for Apple App Store. Prefix: `appl_`. |
|
|
315
|
+
| `playStoreKey` | string | RevenueCat public API key for Google Play. Prefix: `goog_`. |
|
|
316
|
+
| `debugLoggingEnabled` | bool | Verbose RC SDK logging. Should be `false` in production. |
|
|
317
|
+
| `loadDataAfterAppLaunch` | bool | If true, RC data is fetched immediately at app launch. |
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## languages.yaml
|
|
322
|
+
|
|
323
|
+
**Purpose:** Internationalization (i18n) configuration, supported languages, and all preset/system text strings.
|
|
324
|
+
|
|
325
|
+
**Top-level keys:**
|
|
326
|
+
- `languages`
|
|
327
|
+
- `primaryLanguage`
|
|
328
|
+
- `displayLanguage`
|
|
329
|
+
- `presetTexts`
|
|
330
|
+
- `persistLanguageSelection`
|
|
331
|
+
|
|
332
|
+
**Schema:**
|
|
333
|
+
```yaml
|
|
334
|
+
languages:
|
|
335
|
+
- language: en # ISO 639-1 language code
|
|
336
|
+
- language: es
|
|
337
|
+
|
|
338
|
+
primaryLanguage:
|
|
339
|
+
language: en # Default/fallback language
|
|
340
|
+
|
|
341
|
+
displayLanguage:
|
|
342
|
+
language: en # Language shown in FF editor
|
|
343
|
+
|
|
344
|
+
presetTexts:
|
|
345
|
+
authMessages: # Auth-related system strings
|
|
346
|
+
error:
|
|
347
|
+
translationIdentifier:
|
|
348
|
+
key: 7mu1hspb # Unique i18n key
|
|
349
|
+
textValue:
|
|
350
|
+
inputValue: "Invalid credentials!"
|
|
351
|
+
passwordResetEmailSent:
|
|
352
|
+
translationIdentifier:
|
|
353
|
+
key: 59zs8v4b
|
|
354
|
+
textValue:
|
|
355
|
+
inputValue: "Password reset email sent!"
|
|
356
|
+
emailRequired: { ... }
|
|
357
|
+
phoneNumberValidation: { ... }
|
|
358
|
+
passwordsDoNotMatch: { ... }
|
|
359
|
+
enterSmsVerificationCode: { ... }
|
|
360
|
+
reauthenticateForUserDelete: { ... }
|
|
361
|
+
reauthenticateForEmailUpdate: { ... }
|
|
362
|
+
emailChangeConfirmation: { ... }
|
|
363
|
+
emailAlreadyInUse: { ... }
|
|
364
|
+
invalidCredentials: { ... }
|
|
365
|
+
|
|
366
|
+
uploadDataMessages: # File upload system strings
|
|
367
|
+
invalidFileFormat: { ... }
|
|
368
|
+
uploadingFile: { ... }
|
|
369
|
+
success: { ... }
|
|
370
|
+
error: { ... }
|
|
371
|
+
sendingPhoto: { ... }
|
|
372
|
+
chooseSource: { ... }
|
|
373
|
+
gallery: { ... }
|
|
374
|
+
galleryPhoto: { ... }
|
|
375
|
+
galleryVideo: { ... }
|
|
376
|
+
camera: { ... }
|
|
377
|
+
empty: { ... }
|
|
378
|
+
|
|
379
|
+
paymentMessages: # Payment system strings
|
|
380
|
+
processingMessage: { ... }
|
|
381
|
+
success: { ... }
|
|
382
|
+
error: { ... }
|
|
383
|
+
|
|
384
|
+
persistLanguageSelection: true # Remember user's language choice
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
**Key fields:**
|
|
388
|
+
|
|
389
|
+
| Field | Type | Notes |
|
|
390
|
+
|---|---|---|
|
|
391
|
+
| `languages` | list | Required. All supported languages as ISO 639-1 codes. |
|
|
392
|
+
| `primaryLanguage.language` | string | Required. Fallback language code. |
|
|
393
|
+
| `displayLanguage.language` | string | Language used in the FF editor UI. |
|
|
394
|
+
| `presetTexts.authMessages` | object | System-generated auth UI strings (errors, prompts). |
|
|
395
|
+
| `presetTexts.uploadDataMessages` | object | File/media upload UI strings. |
|
|
396
|
+
| `presetTexts.paymentMessages` | object | Payment flow UI strings. |
|
|
397
|
+
| `persistLanguageSelection` | bool | If true, selected language is saved to device. |
|
|
398
|
+
|
|
399
|
+
> Translation text pattern: Every translatable string uses `{ translationIdentifier: { key }, textValue: { inputValue } }`. The `key` links to translation entries in the FF translation system.
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## app-state.yaml
|
|
404
|
+
|
|
405
|
+
**Purpose:** App-level state variables (global state accessible from any page/component).
|
|
406
|
+
|
|
407
|
+
**Top-level keys:**
|
|
408
|
+
- `fields`
|
|
409
|
+
- `securePersistedValues`
|
|
410
|
+
|
|
411
|
+
**Schema:**
|
|
412
|
+
```yaml
|
|
413
|
+
fields:
|
|
414
|
+
- parameter:
|
|
415
|
+
identifier:
|
|
416
|
+
name: email # Variable name (camelCase)
|
|
417
|
+
key: x2tvdt22 # Unique key
|
|
418
|
+
dataType:
|
|
419
|
+
scalarType: String # Scalar: String, Integer, Double, Boolean, LatLng, Enum, etc.
|
|
420
|
+
description: "" # Optional description
|
|
421
|
+
persisted: true # Survives app restart (local storage)
|
|
422
|
+
serializedDefaultValue:
|
|
423
|
+
- "" # Default value as single-element list of strings
|
|
424
|
+
|
|
425
|
+
- parameter:
|
|
426
|
+
identifier:
|
|
427
|
+
name: Favorites
|
|
428
|
+
key: noxdj87d
|
|
429
|
+
dataType:
|
|
430
|
+
listType: # List type instead of scalar
|
|
431
|
+
scalarType: String
|
|
432
|
+
persisted: true
|
|
433
|
+
# No serializedDefaultValue = empty list default
|
|
434
|
+
|
|
435
|
+
- parameter:
|
|
436
|
+
identifier:
|
|
437
|
+
name: NavBarStatus
|
|
438
|
+
key: p4n8k8yh
|
|
439
|
+
dataType:
|
|
440
|
+
scalarType: Enum
|
|
441
|
+
subType: # Required for Enum type
|
|
442
|
+
enumIdentifier:
|
|
443
|
+
name: NavBar
|
|
444
|
+
key: qik04
|
|
445
|
+
description: ""
|
|
446
|
+
persisted: false
|
|
447
|
+
serializedDefaultValue:
|
|
448
|
+
- fxjp3 # Enum value key (not label)
|
|
449
|
+
|
|
450
|
+
securePersistedValues: false # If true, persisted values use secure storage
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
**Key fields:**
|
|
454
|
+
|
|
455
|
+
| Field | Type | Notes |
|
|
456
|
+
|---|---|---|
|
|
457
|
+
| `fields` | list | Required. All app state variables. |
|
|
458
|
+
| `fields[].parameter.identifier.name` | string | Variable name. Used in code and bindings. |
|
|
459
|
+
| `fields[].parameter.identifier.key` | string | Immutable unique key. Used in YAML references. |
|
|
460
|
+
| `fields[].parameter.dataType.scalarType` | enum | `String`, `Integer`, `Double`, `Boolean`, `LatLng`, `Enum`, `DateTime`, `Color`, `JSON`, etc. |
|
|
461
|
+
| `fields[].parameter.dataType.listType` | object | Present instead of `scalarType` for list-typed variables. Contains its own `scalarType`. |
|
|
462
|
+
| `fields[].parameter.dataType.subType` | object | Required for `Enum` scalar type. References the enum definition. |
|
|
463
|
+
| `fields[].persisted` | bool | Required. If true, value is saved to local storage across app restarts. |
|
|
464
|
+
| `fields[].serializedDefaultValue` | list of strings | Default value. Always a single-element string list (even for numbers/bools). Booleans: `"true"`/`"false"`. Enums: the enum value key. |
|
|
465
|
+
| `securePersistedValues` | bool | Use platform secure storage (Keychain/Keystore) for persisted values. |
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
469
|
+
## app-constants.yaml
|
|
470
|
+
|
|
471
|
+
**Purpose:** Compile-time constants accessible app-wide. Unlike app state, these cannot be changed at runtime.
|
|
472
|
+
|
|
473
|
+
**Top-level keys:**
|
|
474
|
+
- `fields`
|
|
475
|
+
|
|
476
|
+
**Schema:**
|
|
477
|
+
```yaml
|
|
478
|
+
fields:
|
|
479
|
+
- parameter:
|
|
480
|
+
identifier:
|
|
481
|
+
name: Distances # Constant name
|
|
482
|
+
key: eghxy5 # Unique key
|
|
483
|
+
dataType:
|
|
484
|
+
listType:
|
|
485
|
+
scalarType: Integer # List of integers
|
|
486
|
+
description: ""
|
|
487
|
+
serializedValue: # Constant value (not "default" -- this IS the value)
|
|
488
|
+
- "50"
|
|
489
|
+
- "100"
|
|
490
|
+
- "200"
|
|
491
|
+
- "500"
|
|
492
|
+
|
|
493
|
+
- parameter:
|
|
494
|
+
identifier:
|
|
495
|
+
name: isLive
|
|
496
|
+
key: a0hp9r
|
|
497
|
+
dataType:
|
|
498
|
+
scalarType: Boolean
|
|
499
|
+
description: ""
|
|
500
|
+
serializedValue:
|
|
501
|
+
- "true"
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
**Key fields:**
|
|
505
|
+
|
|
506
|
+
| Field | Type | Notes |
|
|
507
|
+
|---|---|---|
|
|
508
|
+
| `fields` | list | Required. All app constants. |
|
|
509
|
+
| `fields[].parameter.identifier` | object | Same `{ name, key }` pattern as app-state. |
|
|
510
|
+
| `fields[].parameter.dataType` | object | Same type system as app-state (`scalarType` or `listType`). |
|
|
511
|
+
| `fields[].serializedValue` | list of strings | The constant value. For scalars: single-element list. For lists: one element per item. All values are strings regardless of type. |
|
|
512
|
+
|
|
513
|
+
> Key difference from `app-state.yaml`: Uses `serializedValue` (the actual value) instead of `serializedDefaultValue` (a default). No `persisted` field since constants are baked in at compile time.
|