Communitygithub.com

flcker/figma-ui-desktop

使用 Figma 設計稿開發桌面端 UI(Qt Widget / QML / WinUI / Flutter 等非 Web 框架)時,解決「直接照抄畫布數據導致還原度差」的問題。核心是「框架無關的數據→目標框架翻譯方法論」。

figma-ui-desktop 是什麼?

此技能專為使用 Framelink `figma-developer-mcp` 開發桌面端 UI 的場景設計,解決從 Figma 設計稿直接複製畫布數據(如絕對座標、內聯色值)導致還原度差的根本問題。不同於官方 Figma MCP 僅輸出 Web 程式碼的限制,Framelink 提供框架無關的原始數據,讓模型能靈活翻譯成 Qt Widget、QML、WinUI 3、Flutter 等任意桌面框架。此技能強制執行「雙通道並行」原則:同時呼叫 `get_figma_data`(精確取得座標、色值、字體大小等數據)和 `download_figma_images`(導出視覺截圖)來閱讀設計稿,並嚴格禁止僅依賴單一通道(如只看截圖)就撰寫程式碼。工作流程包含粗讀理解結構、精讀取得精確值、依據「畫布概念→目標框架」映射表進行翻譯實作,以及最終透過實際編譯執行的螢幕截圖與設計稿進行比對驗證,確保 UI 還原度。技能還定義了「防偷懶鐵律」與「還原度自檢清單」,明確要求 AI 必須使用確切數值、避免視覺估算,並將重複模式抽象為目標框架的自訂元件,從而實現高品質的桌面端 UI 開發。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/flcker/agents-skills/tree/HEAD/skills/dev/figma-ui-desktop

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Figma 桌面端 UI 開發規範(Framelink MCP 版)

解決用 Figma 設計稿開發桌面端 UI 時還原度差的問題。根因是:把 Figma 的「畫布數據」(絕對座標、內聯色值、像素圖層堆疊)當成了「實現數據」,直接照抄導致佈局僵死、顏色字體不準、資源缺失。

為什麼桌面端用 Framelink 而非官方 Figma MCP Server:官方 MCP 的核心工具 get_design_context 默認只產 Web 程式碼(React/Tailwind,可切 Vue/HTML/iOS),不支援 Qt Widget / QML / WinUI / Flutter,且需付費。Framelink 定位「只餵框架無關的 Figma 數據、翻譯交給模型」——這個「短板」在桌面端多框架場景下恰是優勢:模型拿到畫布數據後可翻譯成任意目標框架,而不是被鎖死在 Web。

本 skill 面向 Framelink figma-developer-mcp 的兩個工具:

工具通道作用
get_figma_data精確通道按 fileKey + nodeId 拉畫布數據:佈局、內容、視覺、元件資訊
download_figma_images視覺通道按節點 ID 導出 SVG/PNG/GIF 到本地目錄

若目標是 Web 前端(React/Vue/HTML),用 figma-ui-web 而非本 skill。

核心原則

  1. 雙通道並行,禁止單通道寫碼。精確通道給確切數值,視覺通道給整體佈局與文案。只用其一必然還原失真。
  2. 用確切值,不做視覺估算。顏色、字型大小、字重、間距、圓角、邊框、陰影,一律取設計稿確切值。
  3. 先索要設計稿,不自發寫 UI。
  4. 實現後必須驗證閉環:實際執行程式截圖對比設計稿 → 發現缺陷自動修 → 人工挑刺再迭代。

工作流

階段一:粗讀(理解需求與結構)

設計稿過大時先粗讀,避免一次拉全量導致上下文過載:

  1. 用 get_figma_data 拉頂層結構(depth 控制遍歷層級,先從淺層開始),搞清有哪些頁面/區塊/控制項。
  2. 用 download_figma_images 導出整體介面圖,理解佈局與文案。

階段二:精讀(實現前拿精確數據)

針對具體要實現的區塊/控制項,同時呼叫:

  • get_figma_data(帶 nodeId,逐節點讀座標、色值、字型大小、間距、圓角、邊框)
  • download_figma_images(導出該區塊圖,確認控制項相對位置關係)

拿到後先做結構分析再寫碼:

  • 哪些節點是重複模式(列表項、卡片、按鈕)→ 抽成目標框架的自訂控制項/元件
  • 哪些絕對定位其實是佈局(橫向排列、居中、兩端對齊、網格)→ 按下方映射表轉成對應框架的佈局
  • 哪些是語義角色(導航/表單/列表)→ 映射目標框架已有控制項庫
  • 圖片/圖示節點 → 用 download_figma_images 下載原檔案落地到資源目錄,不手繪

階段三:實現(框架無關翻譯)

顏色/字型大小/間距用設計稿確切值。翻譯時查下面的「畫布概念 → 目標框架」映射表,不要臆造控制項——目標框架有標準佈局/控制項就用標準的,絕對座標只在「確實需要精確像素定位」時才保留。

階段四:驗證閉環

桌面端無 Playwright 這類瀏覽器自動化,驗證方式:實際編譯執行程式截圖,與設計稿截圖並排對比,發現明顯缺陷自動修;人工挑刺識別更細問題(間距、字重、顏色微差),主動拋給 AI 精準修復,進入下一輪迭代。

畫布概念 → 目標框架映射表

Figma 畫布是絕對座標 + 像素圖層,實現要翻譯成各框架的佈局語義。翻譯時查此表:

畫布/設計概念Qt WidgetQML (Qt Quick)WinUI 3 (XAML)Flutter
橫向排列QHBoxLayoutRowStackPanel (Orientation=Horizontal)Row
縱向排列QVBoxLayoutColumnStackPanel (Orientation=Vertical)Column
網格佈局QGridLayoutGrid / GridLayoutGridGridView / Table
絕對定位setGeometry / moveItem + x/yCanvas + Canvas.Left/TopStack + Positioned
層疊/覆蓋子 widget 疊加 / raise()z 屬性 / StackCanvas.ZIndexStack
居中addStretch / setAlignmentanchors.centerInHorizontalAlignment/VerticalAlignment=CenterCenter / Align
兩端對齊兩側 addStretchanchors.left/right + margins邊距分配MainAxisAlignment.spaceBetween
間距QSpacerItem / layout spacingspacing 屬性Margin / PaddingSizedBox / Padding / Spacer
顏色QPalette / stylesheetTheme / 屬性綁定資源字典 ResourceDictionaryThemeData / ColorScheme
字型大小/字型QFontfont.pixelSizeFontSizeTextStyle.fontSize
圓角stylesheet border-radiusRectangle radiusCornerRadiusBorderRadius
陰影QGraphicsDropShadowEffectDropShadowThemeShadow / DropShadowBoxShadow
圖示QIcon / 資源Image / 圖示字型FontIcon / SymbolIconIcon
元件複用自訂 QWidget 子類別自訂 QML ComponentUserControl / 自訂控制項Widget
狀態/變體列舉 + update()State / 屬性驅動VisualStateManagersetState / AnimatedWidget

防偷懶鐵律

AI 會傾向只用一種通道就寫碼,必須明確要求:

  • 「同時呼叫 get_figma_data 和 download_figma_images 閱讀設計稿」
  • 「不允許只用圖片/截圖閱讀設計稿就寫程式碼」
  • 「逐行讀 get_figma_data 的確切值,對比顏色/字型大小/間距,不做視覺估算」
  • 「按映射表翻譯到目標框架的標準佈局/控制項,不臆造」

還原度自檢清單

生成後逐項核對(比「整體像不像」可靠):

  • 顏色(是否用了確切值,而非近似)
  • 字型大小 / 字重
  • 間距 / 邊距 / 內邊距
  • 圓角 / 邊框 / 陰影
  • 佈局(是否翻譯成目標框架標準佈局,而非照抄絕對座標)
  • 層級 / 層疊順序
  • 圖示/圖片是否用原檔案,而非手繪
  • 重複模式是否抽成了元件/自訂控制項

參考來源

方法論借鑒自官方 Figma MCP + Playwright 的 UI 開發流程(見「使用 Figma mcp 和 Playwright mcp 提升 UI 開發與調試效率」),核心思想「雙通道 + 驗證閉環 + 防偷懶明確要求」保留,工具名適配 Framelink figma-developer-mcp,映射表擴展覆蓋桌面端多框架。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能