用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/tomevault-io/skills-registry --skill flutter-pro-polish命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | flutter-pro-polish |
| description | >- Use when this capability is needed. |
Voce vai levar um app Flutter de "defaults + palpites" para "tokens + decisoes" — detectando, nomeando e corrigindo os sinais ("tells") que dao "cara de Flutter de fabrica" e "cara de vibecoding", substituindo defaults crus e numeros magicos por um sistema de design tokens centralizado (cor, tipografia, espaco, raio, elevacao, movimento) e re-tema dos poucos widgets cujos defaults entregam o jogo — produzindo, para cada problema, localizacao arquivo:linha + por que entrega o default + correcao concreta + exemplo antes/depois + como verificar, e um veredito de "tem sistema e intencao" ou "ainda parece template/vibecoded".
App profissional nao e "UI chamativa". E intencionalidade e consistencia: cada valor visivel na tela veio de uma decisao, nao de um chute. Beleza pontual sem sistema ainda recria o problema na proxima tela.
ThemeData, ColorScheme, TextTheme, ThemeExtension, component themes, WidgetStateProperty, PageTransitionsTheme e os defaults exatos de cada widget. Sabe que estilizar no tema escala de graca; estilizar por instancia e remendo.textScaler, testa fonte grande, RTL, leitores de tela. Profissional inclui acessivel — nao e opcional.flutter analyze, sugere golden tests, testa light e dark, multiplos tamanhos de tela, com/sem notch. Nunca afirma "ficou profissional" sem o usuario ver.Voce e exigente com o sistema e implacavel com o default cru. Nunca diz "fica a seu criterio" — aponta o tell, prova que e default/vibecoding, e entrega a saida concreta consumivel.
Um app Flutter tem "cara de Flutter" e "cara de vibecoding" pela mesma causa raiz: ele usa os defaults do framework e valores ad-hoc espalhados, em vez de um sistema de design intencional.
ColorScheme.fromSeed, a fonte Roboto, a sombra/elevacao padrao dos Card, o AppBar central com sombra, o ripple em tudo, e a transicao de pagina deslizante padrao.EdgeInsets.all(13), SizedBox(height: 17), BorderRadius.circular(7)), cores soltas dentro dos widgets (Color(0xFF3A86FF) no meio da tela), espacamento inconsistente, e zero hierarquia tipografica.A correcao e uma so: substituir defaults e valores soltos por design tokens (cor, tipografia, espaco, raio, elevacao, movimento) centralizados, e entao re-estilizar o punhado de widgets cujos defaults entregam o jogo. Cada valor visivel na tela deve ter vindo de uma decisao, nao de um palpite.
Quando este skill e acionado, o trabalho e levar o app de "defaults + palpites" para "tokens + decisoes". Nunca produza outra tela com numeros magicos — isso so recria o problema.
assets/app_theme.dart. Toda cor, espaco, raio e duracao sai de la — nao de literais no widget.elevatedButtonTheme no ThemeData deixa o app inteiro consistente de graça. Prefira component themes a estilizar instancias.textScaler respeitado, dark mode desenhado, RTL testado. Um default "bonito" que falha contraste e um defeito, nao polish.Ative esta skill quando:
ThemeData custom, ou ajustar cor, tipografia, espaco, raio, elevacao/sombra, ripple, transicoes e motion para sensacao premium e bespoke.Quando NAO usar (use a complementar):
frontend-design-distinctiveness (a sibling). Esta skill aqui e o executor Flutter: monta o sistema e troca defaults por tokens; a sibling impoe rigor de distintividade sobre o conceito. As duas se complementam — esta nao duplica a taxonomia de "AI slop" da outra; usa-a quando o problema for "generico", nao so "default cru".frontend-design.Regra de fronteira: se o app esta cheio de defaults Flutter -> aqui. Se o app ja fugiu dos defaults mas ainda e esquecivel/parece IA ->
frontend-design-distinctiveness. Frequentemente roda-se esta primeiro (instalar o sistema) e a sibling depois (afiar a identidade).
Antes de redesenhar, identifique quais destes sinais o app tem. Cada um tem um destino claro neste skill. Rode scripts/scan_default_flutter.py para automatizar (veja Secao 8) e cruze com esta tabela.
| Tell (sinal de default / vibecoding) | Por que entrega | Para onde ir |
|---|---|---|
ColorScheme.fromSeed com seed de cor stock (Colors.blue, deepPurple) | E o lavanda generico que todo tutorial usa | references/typography-color.md |
| Fonte Roboto (nenhuma fonte definida no tema) | Roboto cru grita "Flutter de fabrica" | references/typography-color.md |
MaterialApp sem theme: / ThemeData() vazio | Sem tema = 100% defaults | references/design-tokens.md |
Color(0xFF...) / Colors.X dentro dos widgets | Cor descentralizada = sem sistema | references/design-tokens.md |
Raios inconsistentes (circular(7), (12), (20) na mesma tela) | Falta de escala = vibecoding | references/design-tokens.md |
| Numeros magicos de espaco (13, 17, 23...) | Espacamento "no olho" | references/design-tokens.md |
Card / AppBar com elevacao e sombra padrao | A sombra Material padrao e reconhecivel | references/components.md |
Ripple (InkWell) em tudo, inclusive cards | O splash padrao data o app | references/components.md |
Icons. (Material Icons) em todo lugar | O icon set padrao tem cara de Google | references/components.md |
| Transicao de pagina deslizante padrao | A PageTransitionsTheme default entrega na navegacao | references/motion-and-detail.md |
centerTitle: true + cor primaria preenchendo a AppBar | Layout default absoluto de tutorial | references/components.md |
| centralizado como unico loading |
Nao trate o scanner como verdade absoluta — ele e o despertador, nao o juiz. Polish final e decisao humana: produza, mostre, itere.
Trabalhe em fases. Nao pule para "corrigir" sem diagnosticar. Cada gate e um ponto de parada onde voce confirma com o usuario antes de avancar.
flutter --version) e dependencias (pubspec.yaml). Os nomes de theme data mudaram (CardTheme -> CardThemeData, DialogTheme -> DialogThemeData); withOpacity -> withValues(alpha:); MaterialStateProperty -> WidgetStateProperty. Material 3 e default desde Flutter 3.16.frontend-design-distinctiveness antes — caso contrario voce instala um sistema bonito porem generico.python scripts/scan_default_flutter.py lib/ e leia o relatorio.assets/app_theme.dart e adapte paleta/fonte (references/design-tokens.md, references/typography-color.md). Conecte theme: + darkTheme: no MaterialApp.references/components.md (o asset ja traz; confirme).colorScheme.*/token; SizedBox(height: 16) -> gap.md; BorderRadius.circular(12) -> radii.md; TextStyle(fontSize: 18) -> text.titleMedium.references/motion-and-detail.md + assets/motion.dart.python scripts/scan_default_flutter.py lib/ — o numero de warn deve cair.flutter analyze (pega nomes de API errados da sua versao).textScaler, dark mode, RTL, SafeArea, estados.main.dart de exemplo para o usuario rodar e julgar — polish e empirico.Para auditoria, classifique cada achado em quatro eixos. Isso ordena o trabalho por impacto visual — a ordem que mais entrega: tipografia > cor > espacamento/consistencia > sombra/elevacao > movimento > detalhes.
P0 Critico — grita "Flutter de fabrica/IA" no primeiro segundo (Roboto cru, lavanda fromSeed, sem tema).P1 Alto — visivel e cumulativo (numeros magicos, cor descentralizada, sombra default, ripple em tudo).P2 Medio — percebido por olhos treinados (transicao default, loading generico, divisoria grossa).P3 Polimento — refino fino (status bar, stagger de entrada, empty states).confirmado (vi no arquivo:linha) / provavel (padrao da stack, nao verifiquei a linha exata) / suspeita (precisa rodar para ver). Nunca apresente provavel/suspeita como confirmado.trivial (1 linha no tema), pequeno (1 component theme), medio (re-skin de tela), grande (instalar sistema + migrar app).Marque explicitamente. Um item nao verificado vale como falha ate prova empirica.
ColorScheme light e dark desenhados (nao fromSeed generico).ThemeExtension (AppTokens) com escalas de espaco/raio, sombras e cores semanticas (success/warning/info) — com copyWith e lerp implementados.Color(0x...)/Colors.X) so no arquivo de tema/paleta; widgets usam colorScheme/tokens.style: solto).TextTheme com hierarquia real (pesos 400 corpo vs 600/700 titulo; letterSpacing e height ajustados).MediaQuery.textScaler respeitado. Testado com fonte grande (sistema em 1.5x–2x) — nada de overflow.onSurface sobre surface, onPrimary sobre primary).#121212–#1A1A1A), nao #000 puro.surfaceContainer*, nao por sombra.themeMode configurado; ambos os modos testados visualmente.SafeArea/viewPadding respeitam notch, status bar e barra de gestos; nada colado/cortado.systemOverlayStyle faz os icones da status bar contrastarem com o fundo.Directionality / locale ar/he) — paddings direcionais (EdgeInsetsDirectional), nada espelhado errado.resizeToAvoidBottomInset).overflow, maxLines, Flexible/Expanded).scripts/scan_default_flutter.py rodado de novo — warn caiu.flutter analyze limpo (nomes de API corretos para a versao).scripts/scan_default_flutter.py e um analisador estatico em Python puro — nao precisa de Flutter instalado. Ele detecta os tells de default/vibecoding e os agrega por diretorio (consistencia de raio, contagem de icones Material, cores descentralizadas).
python scripts/scan_default_flutter.py lib/ # relatorio legivel
python scripts/scan_default_flutter.py lib/ --json # saida para CI/ferramentas
python scripts/scan_default_flutter.py lib/ --exit-zero # nunca falha (so reporta)
Saida padrao: lista cada achado com arquivo:linha, severidade (warn/info) e uma dica de correcao; mais um resumo no fim (ex.: "3 raios distintos demais", "47 usos de Icons."). Sai com codigo 1 se houver warn (a menos que --exit-zero), entao serve de gate leve em CI. info nunca falha o build.
Combine com flutter analyze (correcao de API por versao) e, idealmente, golden tests (visual regression) para travar o resultado. Nao trate o scanner como verdade absoluta — ele e o despertador, nao o juiz.
assets/app_theme.dart para lib/theme/ (ou equivalente) e adapte a paleta/fonte ao cliente. Leia references/typography-color.md para escolher cor e tipografia que nao sejam o default.MaterialApp (theme: + darkTheme:). Leia references/design-tokens.md para entender o ThemeExtension de tokens (espaco/raio/duracoes) e como consumi-lo via Theme.of(context).extension<AppTokens>().colorScheme/tokens; SizedBox(height: 16) -> gap.md; etc.).references/components.md (ja vem pre-configurado no asset, mas confirme botoes, inputs, cards, app bar).references/motion-and-detail.md + assets/motion.dart.flutter analyze + exemplo rodavel.references/components.md para os widgets daquela tela.Use esta estrutura sempre que auditar ou redesenhar (adapte o tamanho ao escopo, mas mantenha as secoes):
[P1 · confirmado · esforco pequeno] Sombra default em todos os Card
Local: lib/widgets/product_card.dart:42 (e cardTheme ausente em lib/theme/…)
Causa: usa elevation padrao do Card -> sombra cinza M3 reconhecivel.
Correcao: zerar elevation no cardTheme + sombra desenhada (token shadowSoft) OU borda fina.
Antes: Card(child: …) // elevation default
Depois: // cardTheme: elevation:0, shape com radii.md, side outlineVariant
Verificar: scanner nao reporta mais "elevacao default"; ver light+dark.
Tell | Local | Severidade | Confianca | Esforco | Destino (reference).[x]/[ ] e o veredito honesto. Marque o que e regra (ex.: "usa Roboto cru = default") vs julgamento ("esta paleta me parece datada, considere...").Regras: sempre arquivo:linha quando possivel; sempre antes/depois consumivel; nunca aponte um tell sem entregar a saida; nunca mostre codigo so do device/tela atual quando o problema e sistemico (mostre a correcao no tema).
O principio sob esta skill nao e do Flutter — e universal: substitua defaults e valores soltos por um sistema de design tokens centralizado e re-tema os pontos que entregam o default. O Flutter e o exemplo-ancora; aqui esta o mapa para outras stacks (um engenheiro de qualquer stack extrai valor; o usuario Flutter continua com a skill afiada).
| Conceito (ancora Flutter) | CSS / Web | React Native | SwiftUI / iOS | Android Views / Compose |
|---|---|---|---|---|
ThemeExtension/AppTokens (escalas) | CSS custom properties (--space-md), Style Dictionary | objeto theme + StyleSheet | Asset Catalog + Environment/tokens em struct | theme.xml / MaterialTheme tokens |
ColorScheme (papeis semanticos) | tokens --color-surface, Tailwind theme.colors | tema do React Navigation / lib | Color no Asset Catalog (any/dark) | colorScheme (Material3 Compose) |
| Escala de espaco 4/8/12/16... | --space-*, Tailwind spacing scale | constantes de spacing | Spacing enum/const | dimens.xml / Dp consts |
Component themes (elevatedButtonTheme) | classes utilitarias / @layer components, shadcn variants | componentes wrapper temados | ButtonStyle / ViewModifier | Button style / @Composable defaults |
| Sombra desenhada (token) | box-shadow multicamada como var | shadow* props / lib | .shadow(...) modifier | Modifier.shadow / elevation tokens |
Anti-padrao universal (o equivalente da "cara de Flutter"): aceitar os defaults do framework sem decisao — Tailwind/shadcn crus, Material/Chakra/MUI com tema default, SwiftUI com Color.accentColor padrao, Bootstrap intacto. Um design system nao garante distintividade; usado cru, e o maior gerador de "slop". O cliche e o inimigo, nao a ferramenta.
references/typography-color.md): Roboto no Flutter <-> system-ui/Inter/Arial na web, SF Pro cru no iOS, Roboto cru no Android. Em qualquer stack: carregue uma display com carater + corpo legivel, defina como token, no maximo 2 familias.fromSeed do Flutter e primo do gradiente indigo->violet->fuchsia do Tailwind e do "blurple" generico. Comprometa-se com paleta nao-default derivada da marca.references/motion-and-detail.md): Motion.base = 250ms <-> CSS --dur-base + cubic-bezier, withAnimation/Animation no SwiftUI, AnimationSpec/tween no Compose. Maioria 150–250ms; curva com desaceleracao; nunca linear.PageTransitionsTheme <-> View Transitions API / Framer Motion na web, NavigationTransition no SwiftUI, shared element no Compose.O modelo de constraints do Flutter ("constraints descem, tamanhos sobem, pai posiciona") tem analogos diretos — e a fonte de "texto longo quebra o layout" em qualquer stack:
Flexible/Expanded, overflow: TextOverflow.ellipsis, maxLines.min-width: 0 (o classico item flex que nao encolhe), overflow, text-overflow: ellipsis.flex, numberOfLines.layoutPriority, lineLimit, fixedSize.weight, Modifier.widthIn, maxLines/overflow.Mantenha o Flutter como referencia primaria. As tabelas acima existem para o engenheiro traduzir o principio — nao para diluir o foco. Para auditoria de identidade visual cross-stack aprofundada, encaminhe a
frontend-design-distinctiveness.
style: em cada botao e o oposto de sistema. Use os component themes do ThemeData. Se voce esta editando a mesma propriedade em 3 telas, ela pertence ao tema.ColorScheme.dark de proposito (fundo #121212, primaria desaturada, profundidade por superficie).textScaler, RTL. Profissional inclui acessivel — sempre.ThemeExtension exige copyWith e lerp. Sem isso, troca de tema e animacao de tema quebram. O asset ja implementa — nao remova.rounded no mesmo raio sem nenhum canto vivo intencional e tao sem decisao quanto raios aleatorios. Escolha 2-3 e seja fiel.Card, a correcao e no cardTheme, nao na instancia. Mostrar so a instancia recria o problema.flutter analyze — os nomes de theme data e APIs (withValues, WidgetStateProperty) mudam por versao.Antes de fechar a resposta, confirme:
confirmado esta marcado como tal (com arquivo:linha).textScaler, RTL, dark mode, SafeArea, teclado, estados.references/*.md, assets/* e scripts/* corretos para cada area; rodei (ou instrui rodar) o scanner e flutter analyze.references/design-tokens.md — como montar o sistema de tokens (escalas de espaco/raio, ThemeExtension, montagem do ThemeData, como consumir nos widgets, centralizacao de cor).references/typography-color.md — como fugir do Roboto e do lavanda padrao: escolher e aplicar fonte (com google_fonts ou fonte empacotada), montar uma escala tipografica com pesos/letter-spacing reais, construir uma paleta intencional e um dark mode de verdade.references/components.md — re-estilizar os widgets que entregam o default: botoes, inputs, cards, app bar, dialogs, snackbars, chips; domar o ripple/splash; sombras desenhadas; trocar o icon set.references/motion-and-detail.md — transicoes de pagina customizadas, curvas e duracoes como tokens, micro-interacoes, e os detalhes pequenos (status bar, SafeArea, estados de toque) que separam amador de profissional.assets/app_theme.dart — tema drop-in baseado em tokens: ColorScheme desenhado a mao (nao fromSeed generico), TextTheme com hierarquia, todos os component themes, ThemeExtension AppTokens, sombras desenhadas, splash domado e PageTransitionsTheme custom. Zero dependencias externas (linha de fonte do google_fonts vem comentada e pronta).assets/motion.dart — tokens de duracao/curva, PageTransitionsBuilder custom (fade-through, no lugar do slide padrao) e helpers de entrada (fade+slide) sem dependencia externa.scripts/scan_default_flutter.py — scanner estatico (Python puro, sem Flutter) que detecta os tells e agrega por diretorio; usavel como gate leve de CI (--json, --exit-zero).Skill complementar:
frontend-design-distinctiveness(rigor de identidade visual cross-stack) e a skill oficialfrontend-design(geracao de UI nova). Esta skill e o executor Flutter do sistema de tokens; nao duplica a taxonomia de "AI slop" da sibling — encaminha quando o problema for "generico", nao "default cru".
Source: evertonfernandes3321-wq/mythos-skills — distributed by TomeVault.
CircularProgressIndicator| Loading generico; falta skeleton/shimmer |
references/motion-and-detail.md |
| Dark mode ausente ou invertido automaticamente | Dark invertido vibra/quebra hierarquia | references/typography-color.md |
| Empty/error states so com texto cru | Tela "Nenhum item" parece inacabada | references/motion-and-detail.md |
Texto trava com fonte grande / overflow com textScaler | Amador e cruza acessibilidade | references/typography-color.md |