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,141 @@
|
|
|
1
|
+
# FlutterFlow Widget Patterns Skill
|
|
2
|
+
|
|
3
|
+
Quick reference for common FlutterFlow widget YAML patterns. Use `get_yaml_docs` for full schemas.
|
|
4
|
+
|
|
5
|
+
## Value Pattern
|
|
6
|
+
|
|
7
|
+
Most FF YAML properties follow this structure:
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
propertyNameValue:
|
|
11
|
+
inputValue: "the value"
|
|
12
|
+
mostRecentInputValue: "the value" # must match inputValue
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**Exceptions** — these only accept `inputValue`:
|
|
16
|
+
- `fontWeightValue`
|
|
17
|
+
- `fontSizeValue`
|
|
18
|
+
|
|
19
|
+
## Common Widget Snippets
|
|
20
|
+
|
|
21
|
+
### Text Widget
|
|
22
|
+
```yaml
|
|
23
|
+
type: Text
|
|
24
|
+
properties:
|
|
25
|
+
textValue:
|
|
26
|
+
inputValue: "Hello World"
|
|
27
|
+
mostRecentInputValue: "Hello World"
|
|
28
|
+
textStyle:
|
|
29
|
+
fontSizeValue:
|
|
30
|
+
inputValue: 16 # no mostRecentInputValue
|
|
31
|
+
fontWeightValue:
|
|
32
|
+
inputValue: w600 # no mostRecentInputValue
|
|
33
|
+
colorValue:
|
|
34
|
+
inputValue: "ff000000"
|
|
35
|
+
mostRecentInputValue: "ff000000"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Container with Padding
|
|
39
|
+
```yaml
|
|
40
|
+
type: Container
|
|
41
|
+
properties:
|
|
42
|
+
widthValue:
|
|
43
|
+
inputValue: "double.infinity"
|
|
44
|
+
mostRecentInputValue: "double.infinity"
|
|
45
|
+
decoration:
|
|
46
|
+
colorValue:
|
|
47
|
+
inputValue: "ffFFFFFF"
|
|
48
|
+
mostRecentInputValue: "ffFFFFFF"
|
|
49
|
+
borderRadiusValue:
|
|
50
|
+
inputValue: 12
|
|
51
|
+
mostRecentInputValue: 12
|
|
52
|
+
paddingValue:
|
|
53
|
+
inputValue: "16,16,16,16"
|
|
54
|
+
mostRecentInputValue: "16,16,16,16"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Image (Network)
|
|
58
|
+
```yaml
|
|
59
|
+
type: Image
|
|
60
|
+
properties:
|
|
61
|
+
imageTypeValue:
|
|
62
|
+
inputValue: FF_IMAGE_TYPE_NETWORK
|
|
63
|
+
mostRecentInputValue: FF_IMAGE_TYPE_NETWORK
|
|
64
|
+
pathValue:
|
|
65
|
+
inputValue: "https://example.com/image.jpg"
|
|
66
|
+
mostRecentInputValue: "https://example.com/image.jpg"
|
|
67
|
+
widthValue:
|
|
68
|
+
inputValue: "double.infinity"
|
|
69
|
+
mostRecentInputValue: "double.infinity"
|
|
70
|
+
heightValue:
|
|
71
|
+
inputValue: 200
|
|
72
|
+
mostRecentInputValue: 200
|
|
73
|
+
fitValue:
|
|
74
|
+
inputValue: COVER
|
|
75
|
+
mostRecentInputValue: COVER
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Image (Asset)
|
|
79
|
+
```yaml
|
|
80
|
+
type: Image
|
|
81
|
+
properties:
|
|
82
|
+
imageTypeValue:
|
|
83
|
+
inputValue: FF_IMAGE_TYPE_ASSET
|
|
84
|
+
mostRecentInputValue: FF_IMAGE_TYPE_ASSET
|
|
85
|
+
pathValue:
|
|
86
|
+
inputValue: "assets/images/logo.svg"
|
|
87
|
+
mostRecentInputValue: "assets/images/logo.svg"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Button
|
|
91
|
+
```yaml
|
|
92
|
+
type: Button
|
|
93
|
+
properties:
|
|
94
|
+
textValue:
|
|
95
|
+
inputValue: "Click Me"
|
|
96
|
+
mostRecentInputValue: "Click Me"
|
|
97
|
+
buttonType: FILLED
|
|
98
|
+
optionsValue:
|
|
99
|
+
elevationValue:
|
|
100
|
+
inputValue: 2
|
|
101
|
+
mostRecentInputValue: 2
|
|
102
|
+
heightValue:
|
|
103
|
+
inputValue: 48
|
|
104
|
+
mostRecentInputValue: 48
|
|
105
|
+
borderRadiusValue:
|
|
106
|
+
inputValue: 8
|
|
107
|
+
mostRecentInputValue: 8
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Column (Shrink-to-Content)
|
|
111
|
+
```yaml
|
|
112
|
+
type: Column
|
|
113
|
+
properties:
|
|
114
|
+
minSizeValue:
|
|
115
|
+
inputValue: true # equivalent to MainAxisSize.min
|
|
116
|
+
crossAxisAlignmentValue:
|
|
117
|
+
inputValue: CENTER
|
|
118
|
+
mostRecentInputValue: CENTER
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### AppBar
|
|
122
|
+
```yaml
|
|
123
|
+
type: AppBar
|
|
124
|
+
properties:
|
|
125
|
+
templateType: LARGE_HEADER # only valid value
|
|
126
|
+
toolbarHeight: 60 # control actual height
|
|
127
|
+
titleValue:
|
|
128
|
+
inputValue: "Page Title"
|
|
129
|
+
mostRecentInputValue: "Page Title"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Elevation vs Shadow
|
|
133
|
+
|
|
134
|
+
Prefer `elevationValue` for Material-style card shadows:
|
|
135
|
+
```yaml
|
|
136
|
+
elevationValue:
|
|
137
|
+
inputValue: 4
|
|
138
|
+
mostRecentInputValue: 4
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
For custom shadows use `boxShadow` on the container decoration.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# FlutterFlow YAML Development Skill
|
|
2
|
+
|
|
3
|
+
You are developing a FlutterFlow app using MCP tools. This skill provides the workflow and rules for reading, editing, and creating FlutterFlow pages and components through YAML.
|
|
4
|
+
|
|
5
|
+
## Documentation
|
|
6
|
+
|
|
7
|
+
Use the `get_yaml_docs` tool to look up any schema, pattern, or convention before writing YAML:
|
|
8
|
+
|
|
9
|
+
- `get_yaml_docs(topic: "Button")` — Widget schemas (Button, Text, TextField, Container, etc.)
|
|
10
|
+
- `get_yaml_docs(topic: "actions")` — Action chains, triggers, navigation
|
|
11
|
+
- `get_yaml_docs(topic: "variables")` — Data binding, variable sources
|
|
12
|
+
- `get_yaml_docs(topic: "theming")` — Colors, typography, dimensions
|
|
13
|
+
- `get_yaml_docs(topic: "editing")` — Read/edit/add workflows and anti-patterns
|
|
14
|
+
- `get_yaml_docs()` — Full index of all available docs
|
|
15
|
+
|
|
16
|
+
Always consult the docs before writing YAML. They contain validated schemas, field references, enum values, and real examples.
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### Reading / Inspecting
|
|
21
|
+
```
|
|
22
|
+
list_projects → sync_project → get_page_summary / get_component_summary
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Editing Existing Widgets
|
|
26
|
+
```
|
|
27
|
+
list_pages → get_page_by_name → (node-level fetch) → validate_yaml → update_project_yaml
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Adding New Widgets
|
|
31
|
+
```
|
|
32
|
+
list_pages → get_page_by_name → update widget-tree-outline + push individual node files → validate_yaml → update_project_yaml
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Finding Usages
|
|
36
|
+
```
|
|
37
|
+
find_component_usages(componentName: "MyComponent") — where is a component used?
|
|
38
|
+
find_page_navigations(pageName: "MyPage") — what navigates to a page?
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Critical YAML Rules
|
|
42
|
+
|
|
43
|
+
1. **Always update both `inputValue` AND `mostRecentInputValue`** — they must stay in sync.
|
|
44
|
+
- **Exceptions:** `fontWeightValue` and `fontSizeValue` only accept `inputValue`.
|
|
45
|
+
2. **Use node-level file keys** for targeted edits, not the full page YAML.
|
|
46
|
+
3. **Always validate before pushing** — call `validate_yaml` first.
|
|
47
|
+
4. **Adding widgets requires node-level files** — push the tree outline + individual nodes together.
|
|
48
|
+
5. **Column has no `mainAxisSize`** — use `minSizeValue: { inputValue: true }` instead.
|
|
49
|
+
6. **AppBar `templateType`** — only `LARGE_HEADER` is valid. Control height via `toolbarHeight`.
|
|
50
|
+
7. **TextField keyboard types** — use `EMAIL_ADDRESS`, not `EMAIL`.
|
|
51
|
+
|
|
52
|
+
## Anti-Patterns
|
|
53
|
+
|
|
54
|
+
- Do NOT call `list_project_files` to find pages — use `list_pages` instead.
|
|
55
|
+
- Do NOT fetch pages one-by-one to browse — use `sync_project` + `get_page_summary`.
|
|
56
|
+
- Do NOT edit full page YAML for a single widget — use node-level file keys.
|
|
57
|
+
- Do NOT guess YAML field names — use `get_yaml_docs` to look them up.
|
|
58
|
+
- Do NOT embed widget children inline in the page scaffold YAML — they will be stripped.
|