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,413 @@
|
|
|
1
|
+
# Components
|
|
2
|
+
|
|
3
|
+
A component in FlutterFlow is a reusable `Container`-rooted widget tree. Components are structurally identical to pages but use `Container` instead of `Scaffold` as the root and support being embedded inside other pages or components via `componentClassKeyRef`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Component Metadata
|
|
8
|
+
|
|
9
|
+
**File key:** `component/id-Container_XXX`
|
|
10
|
+
|
|
11
|
+
### Component with string parameters
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
name: PremuimContentWall
|
|
15
|
+
description: "this would be a widget that acts as a blocked content behind pay button, maybe blurred view being a subscripe button\n"
|
|
16
|
+
params:
|
|
17
|
+
kw4qti:
|
|
18
|
+
identifier:
|
|
19
|
+
name: title
|
|
20
|
+
key: kw4qti
|
|
21
|
+
dataType:
|
|
22
|
+
scalarType: String
|
|
23
|
+
nonNullable: false
|
|
24
|
+
psru0e:
|
|
25
|
+
identifier:
|
|
26
|
+
name: subtitle
|
|
27
|
+
key: psru0e
|
|
28
|
+
dataType:
|
|
29
|
+
scalarType: String
|
|
30
|
+
nonNullable: false
|
|
31
|
+
node:
|
|
32
|
+
key: Container_ffzg5wc5
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Component with Action (callback) parameters
|
|
36
|
+
|
|
37
|
+
```yaml
|
|
38
|
+
name: ExtendAnalysisComponent
|
|
39
|
+
description: ""
|
|
40
|
+
params:
|
|
41
|
+
0qlpdk:
|
|
42
|
+
identifier:
|
|
43
|
+
name: foodId
|
|
44
|
+
key: 0qlpdk
|
|
45
|
+
dataType:
|
|
46
|
+
scalarType: String
|
|
47
|
+
nonNullable: true
|
|
48
|
+
326n4o:
|
|
49
|
+
identifier:
|
|
50
|
+
name: extendAnalysis
|
|
51
|
+
key: 326n4o
|
|
52
|
+
dataType:
|
|
53
|
+
scalarType: Action
|
|
54
|
+
nonNullable: true
|
|
55
|
+
y3mj9l:
|
|
56
|
+
identifier:
|
|
57
|
+
name: deleteFood
|
|
58
|
+
key: y3mj9l
|
|
59
|
+
dataType:
|
|
60
|
+
scalarType: Action
|
|
61
|
+
nonNullable: true
|
|
62
|
+
node:
|
|
63
|
+
key: Container_9jc8lryj
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Component with state fields
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
name: EditProfile
|
|
70
|
+
description: ""
|
|
71
|
+
node:
|
|
72
|
+
key: Container_w4a9oyew
|
|
73
|
+
classModel:
|
|
74
|
+
stateFields:
|
|
75
|
+
- parameter:
|
|
76
|
+
identifier:
|
|
77
|
+
name: indexAnalysisSelect
|
|
78
|
+
key: ctls8
|
|
79
|
+
dataType:
|
|
80
|
+
scalarType: Integer
|
|
81
|
+
- parameter:
|
|
82
|
+
identifier:
|
|
83
|
+
name: valueAnalysisSelected
|
|
84
|
+
key: o29r4
|
|
85
|
+
dataType:
|
|
86
|
+
scalarType: String
|
|
87
|
+
nonNullable: false
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Schema reference
|
|
91
|
+
|
|
92
|
+
| Field | Type | Required | Description |
|
|
93
|
+
|---|---|---|---|
|
|
94
|
+
| `name` | string | yes | Human-readable component name |
|
|
95
|
+
| `description` | string | no | Component description |
|
|
96
|
+
| `params` | map | no | Component parameters keyed by param key hash |
|
|
97
|
+
| `node.key` | string | yes | Root Container key (format: `Container_XXXXXXXX`) |
|
|
98
|
+
| `classModel` | object | no | State fields (same structure as pages) |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 2. How Components Differ from Pages
|
|
103
|
+
|
|
104
|
+
| Aspect | Page | Component |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| Root widget type | `Scaffold` | `Container` |
|
|
107
|
+
| Root key format | `Scaffold_XXXXXXXX` | `Container_XXXXXXXX` |
|
|
108
|
+
| Tree outline file key | `page-widget-tree-outline` | `component-widget-tree-outline` |
|
|
109
|
+
| File key prefix | `page/id-Scaffold_XXX` | `component/id-Container_XXX` |
|
|
110
|
+
| Can be embedded in other widgets | No | Yes (via `componentClassKeyRef`) |
|
|
111
|
+
| Supports route params (`params`) | Yes (passed via navigation) | Yes (passed via `parameterValues`) |
|
|
112
|
+
| Supports state fields | Yes (`classModel.stateFields`) | Yes (`classModel.stateFields`) |
|
|
113
|
+
| Has `isDummyRoot` | No | Yes (root container is a transparent wrapper) |
|
|
114
|
+
| Navigation target | Yes | No |
|
|
115
|
+
| `body` in tree outline | Yes (`node.body`) | No (`node.children` directly) |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 3. Component Parameters
|
|
120
|
+
|
|
121
|
+
Parameters are defined in `params` at the top level of the component metadata file.
|
|
122
|
+
|
|
123
|
+
### Parameter definition schema
|
|
124
|
+
|
|
125
|
+
```yaml
|
|
126
|
+
params:
|
|
127
|
+
<paramKey>:
|
|
128
|
+
identifier:
|
|
129
|
+
name: <paramName>
|
|
130
|
+
key: <paramKey>
|
|
131
|
+
defaultValue: # optional
|
|
132
|
+
serializedValue: <value>
|
|
133
|
+
dataType:
|
|
134
|
+
scalarType: <type>
|
|
135
|
+
nonNullable: <bool>
|
|
136
|
+
subType: # for Document/DataStruct types
|
|
137
|
+
collectionIdentifier:
|
|
138
|
+
name: <name>
|
|
139
|
+
key: <key>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 4. Parameter Types
|
|
145
|
+
|
|
146
|
+
| scalarType | Description | Extra fields |
|
|
147
|
+
|---|---|---|
|
|
148
|
+
| `String` | Text value | -- |
|
|
149
|
+
| `Integer` | Integer number | -- |
|
|
150
|
+
| `Double` | Floating-point number | -- |
|
|
151
|
+
| `Boolean` | True/false | -- |
|
|
152
|
+
| `Color` | ARGB color value | -- |
|
|
153
|
+
| `Action` | Callback function passed from parent. Triggers appear as `CALLBACK-<key>`. | -- |
|
|
154
|
+
| `Document` | Firestore document reference | `subType.collectionIdentifier` required |
|
|
155
|
+
| `DataStruct` | Custom data type | `subType` with struct definition |
|
|
156
|
+
|
|
157
|
+
### Action parameter example
|
|
158
|
+
|
|
159
|
+
When a component defines an Action parameter:
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
params:
|
|
163
|
+
326n4o:
|
|
164
|
+
identifier:
|
|
165
|
+
name: extendAnalysis
|
|
166
|
+
key: 326n4o
|
|
167
|
+
dataType:
|
|
168
|
+
scalarType: Action
|
|
169
|
+
nonNullable: true
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
It is invoked inside the component via `executeCallbackAction`:
|
|
173
|
+
|
|
174
|
+
```yaml
|
|
175
|
+
key: gt91qt34
|
|
176
|
+
executeCallbackAction:
|
|
177
|
+
parameterIdentifier:
|
|
178
|
+
name: extendAnalysis
|
|
179
|
+
key: 326n4o
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
The trigger type for callbacks is `CALLBACK-<paramKey>` (e.g., `id-CALLBACK-bins86`).
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 5. Component State
|
|
187
|
+
|
|
188
|
+
State fields work identically to page state fields. Defined in `classModel.stateFields`:
|
|
189
|
+
|
|
190
|
+
```yaml
|
|
191
|
+
classModel:
|
|
192
|
+
stateFields:
|
|
193
|
+
- parameter:
|
|
194
|
+
identifier:
|
|
195
|
+
name: indexAnalysisSelect
|
|
196
|
+
key: ctls8
|
|
197
|
+
dataType:
|
|
198
|
+
scalarType: Integer
|
|
199
|
+
- parameter:
|
|
200
|
+
identifier:
|
|
201
|
+
name: valueAnalysisSelected
|
|
202
|
+
key: o29r4
|
|
203
|
+
dataType:
|
|
204
|
+
scalarType: String
|
|
205
|
+
nonNullable: false
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
State updates from actions use `stateVariableType: WIDGET_CLASS_STATE`:
|
|
209
|
+
|
|
210
|
+
```yaml
|
|
211
|
+
localStateUpdate:
|
|
212
|
+
updates:
|
|
213
|
+
- fieldIdentifier:
|
|
214
|
+
key: o29r4
|
|
215
|
+
setValue:
|
|
216
|
+
variable:
|
|
217
|
+
source: LOCAL_STATE
|
|
218
|
+
baseVariable:
|
|
219
|
+
localState:
|
|
220
|
+
fieldIdentifier:
|
|
221
|
+
name: user
|
|
222
|
+
key: cxensw6z
|
|
223
|
+
stateVariableType: APP_STATE
|
|
224
|
+
updateType: WIDGET
|
|
225
|
+
stateVariableType: WIDGET_CLASS_STATE
|
|
226
|
+
key: qe82s7k1
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 6. Referencing a Component from Another Widget
|
|
232
|
+
|
|
233
|
+
To embed a component inside a page or another component, the host widget uses `componentClassKeyRef` and `parameterValues`.
|
|
234
|
+
|
|
235
|
+
### Minimal reference (no params passed)
|
|
236
|
+
|
|
237
|
+
```yaml
|
|
238
|
+
key: Container_jdtt4zdw
|
|
239
|
+
type: Container
|
|
240
|
+
props: {}
|
|
241
|
+
parameterValues:
|
|
242
|
+
widgetClassNodeKeyRef:
|
|
243
|
+
key: Container_qtmqdlq9
|
|
244
|
+
componentClassKeyRef:
|
|
245
|
+
key: Container_qtmqdlq9
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Reference with parameter passes
|
|
249
|
+
|
|
250
|
+
```yaml
|
|
251
|
+
key: Container_h7c8oc57
|
|
252
|
+
type: Container
|
|
253
|
+
props:
|
|
254
|
+
expanded:
|
|
255
|
+
expandedType: EXPANDED
|
|
256
|
+
parameterValues:
|
|
257
|
+
parameterPasses:
|
|
258
|
+
w2td86:
|
|
259
|
+
paramIdentifier:
|
|
260
|
+
name: isPage
|
|
261
|
+
key: w2td86
|
|
262
|
+
inputValue:
|
|
263
|
+
serializedValue: "true"
|
|
264
|
+
widgetClassNodeKeyRef:
|
|
265
|
+
key: Container_od80u8ml
|
|
266
|
+
componentClassKeyRef:
|
|
267
|
+
key: Container_od80u8ml
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Reference with `updateContainingClassOnSetState`
|
|
271
|
+
|
|
272
|
+
When the component's state changes should trigger a rebuild of the parent:
|
|
273
|
+
|
|
274
|
+
```yaml
|
|
275
|
+
key: Container_j48t6fjy
|
|
276
|
+
type: Container
|
|
277
|
+
props:
|
|
278
|
+
expanded:
|
|
279
|
+
expandedType: UNEXPANDED
|
|
280
|
+
responsiveVisibility: {}
|
|
281
|
+
parameterValues:
|
|
282
|
+
updateContainingClassOnSetState: true
|
|
283
|
+
widgetClassNodeKeyRef:
|
|
284
|
+
key: Container_ngmk9lon
|
|
285
|
+
componentClassKeyRef:
|
|
286
|
+
key: Container_ngmk9lon
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Required fields for component references
|
|
290
|
+
|
|
291
|
+
| Field | Description |
|
|
292
|
+
|---|---|
|
|
293
|
+
| `componentClassKeyRef.key` | The root Container key of the referenced component |
|
|
294
|
+
| `parameterValues.widgetClassNodeKeyRef.key` | Must match `componentClassKeyRef.key` |
|
|
295
|
+
| `parameterValues.parameterPasses` | Map of parameter values to pass (optional) |
|
|
296
|
+
| `parameterValues.updateContainingClassOnSetState` | Whether parent rebuilds on component state change (optional) |
|
|
297
|
+
|
|
298
|
+
### Parameter pass value sources
|
|
299
|
+
|
|
300
|
+
Parameter values can come from multiple sources:
|
|
301
|
+
|
|
302
|
+
**Static value:**
|
|
303
|
+
```yaml
|
|
304
|
+
paramIdentifier:
|
|
305
|
+
name: isPage
|
|
306
|
+
key: w2td86
|
|
307
|
+
inputValue:
|
|
308
|
+
serializedValue: "true"
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**Variable reference:**
|
|
312
|
+
```yaml
|
|
313
|
+
paramIdentifier:
|
|
314
|
+
name: endDate
|
|
315
|
+
key: 0u8o42
|
|
316
|
+
variable:
|
|
317
|
+
source: GLOBAL_PROPERTIES
|
|
318
|
+
baseVariable:
|
|
319
|
+
globalProperties:
|
|
320
|
+
property: CURRENT_TIMESTAMP
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**Widget property pass-through:**
|
|
324
|
+
```yaml
|
|
325
|
+
paramIdentifier:
|
|
326
|
+
name: dimensions
|
|
327
|
+
key: 5f7c90
|
|
328
|
+
widgetProperty:
|
|
329
|
+
dimensions:
|
|
330
|
+
width:
|
|
331
|
+
pixelsValue:
|
|
332
|
+
inputValue: Infinity
|
|
333
|
+
height:
|
|
334
|
+
pixelsValue:
|
|
335
|
+
inputValue: 460
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## 7. isDummyRoot
|
|
341
|
+
|
|
342
|
+
Every component's root Container node has `isDummyRoot: true`. This marks it as a transparent wrapper that FlutterFlow uses internally. The root container typically has minimal styling (transparent background, no dimensions).
|
|
343
|
+
|
|
344
|
+
```yaml
|
|
345
|
+
key: Container_ffzg5wc5
|
|
346
|
+
type: Container
|
|
347
|
+
props:
|
|
348
|
+
container:
|
|
349
|
+
boxDecoration:
|
|
350
|
+
colorValue:
|
|
351
|
+
inputValue:
|
|
352
|
+
value: "0" # fully transparent
|
|
353
|
+
name: PremuimContentWall
|
|
354
|
+
isDummyRoot: true
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
The `isDummyRoot` flag tells FlutterFlow to treat this Container as the component boundary, not as a visible widget. The actual visual content starts with the first child.
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## 8. Component Widget Tree Outline
|
|
362
|
+
|
|
363
|
+
**File key:** `component/id-Container_XXX/component-widget-tree-outline`
|
|
364
|
+
|
|
365
|
+
Structurally similar to page tree outlines, but uses `children` directly under the root node instead of `body`:
|
|
366
|
+
|
|
367
|
+
```yaml
|
|
368
|
+
node:
|
|
369
|
+
key: Container_ffzg5wc5
|
|
370
|
+
children:
|
|
371
|
+
- key: Container_tfliyp8f
|
|
372
|
+
children:
|
|
373
|
+
- key: Stack_xkb3xt70
|
|
374
|
+
children:
|
|
375
|
+
- key: Container_bwqw67by
|
|
376
|
+
children:
|
|
377
|
+
- key: Column_413255jc
|
|
378
|
+
children:
|
|
379
|
+
- key: Container_yl6sd9jh
|
|
380
|
+
- key: Container_2txrctco
|
|
381
|
+
- key: Container_056rmdev
|
|
382
|
+
- key: Container_dxsdiyyn
|
|
383
|
+
- key: Blur_1c9k5x0n
|
|
384
|
+
children:
|
|
385
|
+
- key: Container_q7m3k7c9
|
|
386
|
+
- key: Container_1k4ettsz
|
|
387
|
+
children:
|
|
388
|
+
- key: Column_ue835m8w
|
|
389
|
+
children:
|
|
390
|
+
- key: Icon_28qttdd5
|
|
391
|
+
- key: Text_vo3w8rsz
|
|
392
|
+
- key: Text_tg7gbbph
|
|
393
|
+
- key: Button_drlhww71
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## 9. File Key Patterns
|
|
399
|
+
|
|
400
|
+
| Pattern | Purpose |
|
|
401
|
+
|---|---|
|
|
402
|
+
| `component/id-Container_XXX` | Component metadata (name, params, classModel) |
|
|
403
|
+
| `component/id-Container_XXX/component-widget-tree-outline` | Widget tree hierarchy (keys only) |
|
|
404
|
+
| `component/id-Container_XXX/component-widget-tree-outline/node/id-Widget_YYY` | Individual widget definition |
|
|
405
|
+
| `component/id-Container_XXX/component-widget-tree-outline/node/id-Widget_YYY/trigger_actions/id-ON_TAP` | Action trigger |
|
|
406
|
+
| `component/id-Container_XXX/component-widget-tree-outline/node/id-Widget_YYY/trigger_actions/id-ON_TAP/action/id-ACTIONKEY` | Individual action |
|
|
407
|
+
| `component/id-Container_XXX/component-widget-tree-outline/node/id-Widget_YYY/trigger_actions/id-CALLBACK-<paramKey>/action/id-ACTIONKEY` | Callback action (for Action-type params) |
|
|
408
|
+
|
|
409
|
+
### Notes
|
|
410
|
+
|
|
411
|
+
- **Component node files** follow the exact same structure as page node files. The only difference is the file key prefix (`component/` vs `page/`).
|
|
412
|
+
- **The tree outline key** is `component-widget-tree-outline` (not `page-widget-tree-outline`).
|
|
413
|
+
- **CALLBACK triggers** appear when an Action parameter is executed from a child widget that is itself a component reference. The trigger key includes the param key (e.g., `CALLBACK-bins86`).
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Widget YAML Reference
|
|
2
|
+
|
|
3
|
+
This directory documents every FlutterFlow widget type's YAML schema, extracted from real cached project files.
|
|
4
|
+
|
|
5
|
+
## Widget Type Index
|
|
6
|
+
|
|
7
|
+
| Type | File | Description |
|
|
8
|
+
|------|------|-------------|
|
|
9
|
+
| Text, RichTextSpan | [text.md](text.md) | Static text display and rich text spans |
|
|
10
|
+
| Button, IconButton | [button.md](button.md) | Tappable buttons with text/icon |
|
|
11
|
+
| TextField | [text-field.md](text-field.md) | Text input fields with decoration |
|
|
12
|
+
| Container | [container.md](container.md) | Box decoration, backgrounds, sizing |
|
|
13
|
+
| Column, Row, Stack, Wrap | [layout.md](layout.md) | Layout containers |
|
|
14
|
+
| Image | [image.md](image.md) | Asset and network images |
|
|
15
|
+
| Form | [form.md](form.md) | Form validation wrapper |
|
|
16
|
+
| DropDown, ChoiceChips | [dropdown.md](dropdown.md) | Selection widgets |
|
|
17
|
+
| Icon, ProgressBar, AppBar, ConditionalBuilder | [misc.md](misc.md) | Other widget types |
|
|
18
|
+
|
|
19
|
+
## Common Props
|
|
20
|
+
|
|
21
|
+
Every widget node has a top-level structure with these fields:
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
key: WidgetType_xxxxxxxx # Unique widget ID
|
|
25
|
+
type: WidgetType # Widget type enum (Text, Button, Container, etc.)
|
|
26
|
+
props:
|
|
27
|
+
# Widget-specific props wrapper (text:, button:, container:, etc.)
|
|
28
|
+
# Plus common props listed below
|
|
29
|
+
name: OptionalHumanName # Optional human-readable name
|
|
30
|
+
isDummyRoot: true # Only on component root containers
|
|
31
|
+
parameterValues: {} # Parameter pass-through bindings
|
|
32
|
+
valueKey: {} # Key for state preservation
|
|
33
|
+
aiGeneratedNodeInfo: # Present if AI-generated
|
|
34
|
+
isAiGenerated: true
|
|
35
|
+
requestPath: ai_component_gen_requests/xxxxx
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Common Props (under `props:`)
|
|
39
|
+
|
|
40
|
+
These props can appear on **any** widget type:
|
|
41
|
+
|
|
42
|
+
| Prop | Type | Description |
|
|
43
|
+
|------|------|-------------|
|
|
44
|
+
| `padding` | object | Padding around the widget. See padding format below. |
|
|
45
|
+
| `expanded` | object | `expandedType: EXPANDED`, `FLEXIBLE`, or `UNEXPANDED` |
|
|
46
|
+
| `responsiveVisibility` | object | Hide on breakpoints: `phoneHidden`, `tabletHidden`, `tabletLandscapeHidden`, `desktopHidden` |
|
|
47
|
+
| `opacity` | object | `opacityValue.inputValue: 0..1` and optional `animatedOpacity: {}` |
|
|
48
|
+
| `alignment` | object | Position within parent: `xValue.inputValue` (-1 to 1), `yValue.inputValue` (-1 to 1) |
|
|
49
|
+
| `visibility` | object | Conditional visibility via `visibleValue` (literal bool or variable binding) |
|
|
50
|
+
|
|
51
|
+
### Padding Format
|
|
52
|
+
|
|
53
|
+
```yaml
|
|
54
|
+
# All sides equal
|
|
55
|
+
padding:
|
|
56
|
+
type: FF_PADDING_ALL
|
|
57
|
+
allValue:
|
|
58
|
+
inputValue: 16
|
|
59
|
+
|
|
60
|
+
# Individual sides
|
|
61
|
+
padding:
|
|
62
|
+
type: FF_PADDING_ONLY
|
|
63
|
+
leftValue:
|
|
64
|
+
inputValue: 16
|
|
65
|
+
topValue:
|
|
66
|
+
inputValue: 8
|
|
67
|
+
rightValue:
|
|
68
|
+
inputValue: 16
|
|
69
|
+
bottomValue:
|
|
70
|
+
inputValue: 8
|
|
71
|
+
|
|
72
|
+
# Empty (no padding)
|
|
73
|
+
padding: {}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Color Patterns
|
|
77
|
+
|
|
78
|
+
Colors appear throughout widget props in two forms:
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
# Theme color reference
|
|
82
|
+
colorValue:
|
|
83
|
+
inputValue:
|
|
84
|
+
themeColor: PRIMARY_TEXT
|
|
85
|
+
|
|
86
|
+
# ARGB integer value (as string)
|
|
87
|
+
colorValue:
|
|
88
|
+
inputValue:
|
|
89
|
+
value: "4287097512"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Theme color enum values: `PRIMARY`, `SECONDARY`, `TERTIARY`, `ALTERNATE`, `PRIMARY_TEXT`, `SECONDARY_TEXT`, `PRIMARY_BACKGROUND`, `SECONDARY_BACKGROUND`, `SUCCESS`, `WARNING`, `ERROR`, `INFO`.
|
|
93
|
+
|
|
94
|
+
### Value Patterns
|
|
95
|
+
|
|
96
|
+
All values follow the `inputValue` / `mostRecentInputValue` pattern:
|
|
97
|
+
|
|
98
|
+
```yaml
|
|
99
|
+
# Literal value
|
|
100
|
+
someValue:
|
|
101
|
+
inputValue: 42
|
|
102
|
+
|
|
103
|
+
# With sync tracking (both must match when editing)
|
|
104
|
+
someValue:
|
|
105
|
+
inputValue: 42
|
|
106
|
+
mostRecentInputValue: 42
|
|
107
|
+
|
|
108
|
+
# Variable binding
|
|
109
|
+
someValue:
|
|
110
|
+
variable:
|
|
111
|
+
source: WIDGET_CLASS_PARAMETER
|
|
112
|
+
baseVariable:
|
|
113
|
+
widgetClass:
|
|
114
|
+
paramIdentifier:
|
|
115
|
+
name: paramName
|
|
116
|
+
key: abc123
|
|
117
|
+
nodeKeyRef:
|
|
118
|
+
key: Scaffold_xxxxxxxx
|
|
119
|
+
mostRecentInputValue: fallback_value
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Variable sources: `WIDGET_CLASS_PARAMETER`, `LOCAL_STATE`, `ACTION_OUTPUTS`, `GLOBAL_PROPERTIES`, `FIRESTORE_REQUEST`, `POSTGRES_QUERY`, `CONSTANTS`, `FUNCTION_CALL`, `ENUMS`.
|