Skip to content

Commit d105fd6

Browse files
authored
Merge pull request #38 from mhmzdev/minor-updates
Minor updates
2 parents 5907212 + 33d7ffd commit d105fd6

File tree

9 files changed

+37
-12
lines changed

9 files changed

+37
-12
lines changed

.changeset/curvy-zebras-hope.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"figma-flutter-mcp": patch
3+
---
4+
5+
Docs updated with more understanding

README.md

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<div align="center">
22
<img src="docs/images/figma-flutter-mcp.png" alt="Theme Setup Example" style="max-width: 100%; height: auto;">
3-
43
<br>
54

65
<h1>Figma to Flutter MCP Server</h1>
@@ -45,6 +44,12 @@ Use [Cursor](https://cursor.sh) or other AI-powered tools to access Figma's rich
4544
- [🙋‍♂️ Author](#-author)
4645
- [Muhammad Hamza](#muhammad-hamza)
4746

47+
## 🦋 Observable<Flutter> #70
48+
Featured on Observable<Flutter> with enhanced explanation and demo:
49+
50+
<a href="https://www.youtube.com/live/d7qrvytOxSA?si=ESY8hPJpQm_OY4Ye">
51+
<img src="https://i.ytimg.com/vi/d7qrvytOxSA/hq720.jpg?sqp=-oaymwEnCNAFEJQDSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLAtjlrlbNDcV_MQ-_MHJN3KAgwpKw" alt="Observable Flutter Figma to Flutter MCP" style="max-width: 100%; height: 300px;">
52+
</a>
4853

4954
## 🎥 Video Demo
5055
Showcased almost all the features of Figma Flutter MCP with real figma design.
@@ -174,32 +179,47 @@ This way your AI agent will use the MCP's output and ensure the flutter code is
174179

175180
![Button](docs/images/button.png)
176181

177-
This one has 8 variants, you may prompt whether you want to have variants or not.
182+
This one has 2 variants with enabled and disabled states.
178183
```
179-
"Create this widget in flutter <figma_link>, setup only 2 variants for now and break the files in smaller parts for code readability.
184+
"Create this widget in flutter from figma COMPONENT link: <figma_link>, use named constructors for variants and break the files in smaller parts for code readability."
180185
```
181186
If you **do not** have COMPONENTS in figma, you can use FRAME just prompt the AI that you want this to be a widget and it will handle the rest.
182187

183-
3. **Full Screen Generation**: If there are any IMAGE ASSETS available, it will export them and put them in `assets/` along with `pubspec.yaml`
188+
3. **Full Screen Generation**: If there are any IMAGE ASSETS (.png, .jpeg, .jpg etc.) available, it will export them and put them in `assets/` along with `pubspec.yaml`
189+
190+
<img src="docs/images/screen.png" alt="Screen" height="500" width="auto">
191+
184192
```
185-
"Create full screen from this figma link <figma_link>, ensure the code is readable by having smaller files
193+
"Design this intro screen from the figma link <figma_link>, ensure the code is readable by having smaller files."
186194
```
187195
4. **Assets Export**:
188196
- Image Assets: Will work automatically when generating screens
189197
```
190-
"Export this image asset from figma <figma_link>
198+
"Export this image asset from figma link: <figma_link>
191199
```
192-
- SVG Assets: Will NOT work automatically, explained below.
200+
- SVG Assets: Will NOT work automatically if they are scrambled or are ungrouped, explained below.
193201
```
194-
"Export this as an SVG asset from Figma: <figma_link>
202+
"Export this as an SVG asset from Figma link: <figma_link>"
195203
```
196-
#### ⚠️ Why SVG assets don’t work with screen generation
197-
In Figma vectors include icons and pen-tool shapes, so bulk exports may grab unintended nodes; recommend exporting SVGs separately. This process still saves you a lot of time by exporting them in your `assets/svg/` directory and updating your `pubspec.yaml`.
204+
#### ⚠️ If SVG assets don’t work with screen generation
205+
* In Figma vectors include icons and pen-tool shapes, so bulk exports may grab unintended nodes;
206+
* Recommend exporting SVGs **separately** i.e. to take them out an an independent FRAME or GROUP
207+
* Here's how the separation of SVGs looks like:
208+
209+
<img src="docs/images/svgs_clean.gif" alt="Screen" height="500" width="auto">
210+
211+
<br>
212+
213+
* Here's an example of identifying a GOOD vs BAD svg while exporting them:
214+
215+
<br>
216+
217+
<img src="docs/images/svg.gif" alt="Screen" height="500" width="auto">
198218

199219
## ⚠️ Disclaimers
200220

201-
- **Figma Design**: Since we're using Figma's API to fetch the node and its details, so the better design you have the more better it will interpret for the AI to consume i.e. auto layouts, frame usage over group usage, consistently aligned across the board.
202221
- **Use Case**: At this stage, its highly recommend to NOT use it to develop scalable apps rather try and play it with MVPs, smaller and explanatory tasks.
222+
- **Figma Design**: Since we're using Figma's API to fetch the node and its details, so the better design you have the more better it will interpret for the AI to consume i.e. auto layouts, frame usage over group usage, consistently aligned across the board.
203223
- **Rate limiting**: Heavy usage may trigger Figma rate limits (e.g., HTTP 429). The server includes retry with backoff, but it does not bypass Figma limits. If you encounter rate limits, wait a few minutes and reduce the request volume.
204224

205225
## 🙌🏼 Acknowledgments

docs/images/button.png

-36.2 KB
Loading

docs/images/screen.png

24.4 KB
Loading

docs/images/svg.gif

4.62 MB
Loading

docs/images/svgs_clean.gif

5.16 MB
Loading

docs/images/text-style-frame.png

131 Bytes
Loading

docs/images/theme-frame.png

-5.29 KB
Loading

src/tools/flutter/screens/helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ export function generateFlutterScreenGuidance(analysis: ScreenAnalysis): string
276276
// Widget composition best practices
277277
guidance += `🏗️ Widget Composition Best Practices:\n`;
278278
guidance += `- Start by building the complete screen widget tree in a single build() method\n`;
279-
guidance += `- Keep composing widgets inline until you reach ~200 lines of code\n`;
279+
guidance += `- Keep composing widgets inline until you reach ~250 lines of code\n`;
280280
guidance += `- Only then break down into private StatelessWidget classes for sections\n`;
281281
guidance += `- Use private widgets (prefix with _) for internal screen component breakdown\n`;
282282
guidance += `- Avoid functional widgets - always use StatelessWidget classes\n\n`;

0 commit comments

Comments
 (0)