@the-bearded-bear/claude-craft 8.8.1 → 8.8.2
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/Dev/i18n/de/Angular/commands/check-compliance.md +218 -168
- package/Dev/i18n/de/Common/agents/refactoring-specialist.md +146 -69
- package/Dev/i18n/de/Common/commands/add-technology.md +166 -68
- package/Dev/i18n/de/Common/commands/setup-ci.md +216 -33
- package/Dev/i18n/de/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/de/Python/checklists/new-feature.md +319 -44
- package/Dev/i18n/de/React/rules/02-architecture.md +483 -322
- package/Dev/i18n/de/React/rules/03-coding-standards.md +584 -368
- package/Dev/i18n/de/Symfony/commands/check-compliance.md +186 -114
- package/Dev/i18n/de/Symfony/rules/07-testing-symfony.md +679 -10
- package/Dev/i18n/de/UIUX/commands/a11y-component.md +284 -26
- package/Dev/i18n/de/UIUX/commands/design-tokens.md +199 -35
- package/Dev/i18n/de/UIUX/commands/user-flow.md +179 -16
- package/Dev/i18n/de/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/es/Angular/commands/check-compliance.md +217 -167
- package/Dev/i18n/es/Common/commands/add-technology.md +158 -60
- package/Dev/i18n/es/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/es/React/commands/check-testing.md +263 -169
- package/Dev/i18n/es/ReactNative/commands/check-testing.md +256 -198
- package/Dev/i18n/es/Symfony/commands/check-compliance.md +189 -117
- package/Dev/i18n/es/Symfony/commands/check-testing.md +301 -102
- package/Dev/i18n/es/Symfony/commands/migration-plan.md +267 -34
- package/Dev/i18n/es/UIUX/commands/a11y-component.md +274 -16
- package/Dev/i18n/es/UIUX/commands/design-tokens.md +186 -22
- package/Dev/i18n/es/UIUX/commands/user-flow.md +173 -10
- package/Dev/i18n/es/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/fr/Angular/commands/check-compliance.md +217 -167
- package/Dev/i18n/fr/Common/commands/ralph-run.md +138 -60
- package/Dev/i18n/fr/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/fr/React/commands/check-architecture.md +370 -53
- package/Dev/i18n/fr/React/commands/check-code-quality.md +454 -64
- package/Dev/i18n/fr/React/commands/check-testing.md +476 -102
- package/Dev/i18n/fr/Symfony/commands/check-compliance.md +188 -116
- package/Dev/i18n/fr/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/pt/Angular/commands/check-compliance.md +225 -175
- package/Dev/i18n/pt/Common/agents/ralph-conductor.md +211 -30
- package/Dev/i18n/pt/Common/commands/add-technology.md +149 -51
- package/Dev/i18n/pt/Common/commands/ralph-run.md +239 -35
- package/Dev/i18n/pt/Flutter/commands/analyze-performance.md +331 -46
- package/Dev/i18n/pt/Flutter/commands/check-compliance.md +234 -29
- package/Dev/i18n/pt/Flutter/commands/generate-feature.md +526 -51
- package/Dev/i18n/pt/Flutter/commands/generate-widget.md +515 -27
- package/Dev/i18n/pt/Flutter/commands/golden-update.md +322 -46
- package/Dev/i18n/pt/Flutter/commands/localization-check.md +278 -37
- package/Dev/i18n/pt/Laravel/commands/check-compliance.md +212 -104
- package/Dev/i18n/pt/React/commands/accessibility-check.md +151 -42
- package/Dev/i18n/pt/React/commands/bundle-analyze.md +300 -25
- package/Dev/i18n/pt/React/commands/check-architecture.md +369 -34
- package/Dev/i18n/pt/React/commands/check-code-quality.md +440 -34
- package/Dev/i18n/pt/React/commands/check-compliance.md +232 -62
- package/Dev/i18n/pt/React/commands/check-security.md +370 -31
- package/Dev/i18n/pt/React/commands/check-testing.md +473 -43
- package/Dev/i18n/pt/React/commands/generate-component.md +454 -19
- package/Dev/i18n/pt/React/commands/generate-hook.md +425 -24
- package/Dev/i18n/pt/React/commands/storybook-story.md +520 -35
- package/Dev/i18n/pt/ReactNative/commands/app-size.md +358 -387
- package/Dev/i18n/pt/ReactNative/commands/check-code-quality.md +246 -75
- package/Dev/i18n/pt/ReactNative/commands/check-compliance.md +191 -85
- package/Dev/i18n/pt/ReactNative/commands/check-security.md +363 -115
- package/Dev/i18n/pt/ReactNative/commands/check-testing.md +269 -79
- package/Dev/i18n/pt/ReactNative/commands/generate-screen.md +491 -324
- package/Dev/i18n/pt/ReactNative/commands/native-module.md +539 -82
- package/Dev/i18n/pt/ReactNative/commands/store-prepare.md +429 -185
- package/Dev/i18n/pt/ReactNative/rules/02-architecture.md +1084 -31
- package/Dev/i18n/pt/Symfony/commands/check-compliance.md +195 -123
- package/Dev/i18n/pt/UIUX/commands/a11y-audit.md +208 -24
- package/Dev/i18n/pt/UIUX/commands/a11y-component.md +281 -23
- package/Dev/i18n/pt/UIUX/commands/design-tokens.md +197 -33
- package/Dev/i18n/pt/UIUX/commands/user-flow.md +183 -20
- package/Dev/i18n/pt/VueJS/commands/check-compliance.md +228 -103
- package/Dev/i18n/pt/Workflow/commands/analyze.md +147 -146
- package/Dev/i18n/pt/Workflow/commands/design.md +205 -204
- package/Dev/i18n/pt/Workflow/commands/implement.md +184 -184
- package/Project/i18n/de/Sprint/commands/dev.md +339 -86
- package/Project/i18n/es/Sprint/commands/dev.md +342 -91
- package/Project/i18n/pt/Sprint/commands/dev.md +343 -92
- package/bundles/cursor/.cursorrules +1 -1
- package/bundles/windsurf/.windsurfrules +1 -1
- package/package.json +1 -1
|
@@ -1,76 +1,361 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Análise de Performance Flutter
|
|
3
|
+
argument-hint: [arguments]
|
|
3
4
|
---
|
|
4
5
|
|
|
5
|
-
#
|
|
6
|
+
# Análise de Performance Flutter
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
Você é um especialista em performance Flutter. Você deve analisar o desempenho da aplicação, identificar problemas (jank, vazamentos de memória, rebuilds desnecessários) e propor otimizações.
|
|
8
9
|
|
|
9
|
-
##
|
|
10
|
+
## Argumentos
|
|
11
|
+
$ARGUMENTS
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
Argumentos:
|
|
14
|
+
- (Opcional) Foco: rendering, memory, network, all
|
|
15
|
+
|
|
16
|
+
Exemplo: `/flutter:analyze-performance rendering`
|
|
17
|
+
|
|
18
|
+
## Plan Mode
|
|
19
|
+
|
|
20
|
+
> O modo de planejamento é ativado automaticamente quando o escopo abrange múltiplos módulos ou requer uma investigação transversal.
|
|
21
|
+
|
|
22
|
+
## MISSÃO
|
|
23
|
+
|
|
24
|
+
### Etapa 1: Coleta de Métricas
|
|
12
25
|
|
|
13
26
|
```bash
|
|
14
27
|
# Executar em modo profile
|
|
15
28
|
flutter run --profile
|
|
16
29
|
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
# DevTools
|
|
31
|
+
flutter pub global activate devtools
|
|
32
|
+
dart devtools
|
|
33
|
+
|
|
34
|
+
# Analisar o código
|
|
35
|
+
dart analyze --fatal-infos
|
|
21
36
|
```
|
|
22
37
|
|
|
23
|
-
### 2
|
|
38
|
+
### Etapa 2: Análise de Renderização
|
|
24
39
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
#### Identificar Rebuilds Desnecessários
|
|
41
|
+
|
|
42
|
+
```dart
|
|
43
|
+
// Adicionar no main.dart para debug
|
|
44
|
+
import 'package:flutter/rendering.dart';
|
|
45
|
+
|
|
46
|
+
void main() {
|
|
47
|
+
debugProfileBuildsEnabled = true; // Log dos builds
|
|
48
|
+
debugPrintRebuildDirtyWidgets = true; // Log dos rebuilds
|
|
49
|
+
runApp(const MyApp());
|
|
50
|
+
}
|
|
31
51
|
```
|
|
32
52
|
|
|
33
|
-
|
|
53
|
+
#### Problemas Comuns e Soluções
|
|
34
54
|
|
|
35
|
-
|
|
36
|
-
# Buscar widgets sem const
|
|
37
|
-
grep -r "Widget build" lib/ | grep -v "const"
|
|
55
|
+
##### 1. Rebuilds em Cascata
|
|
38
56
|
|
|
39
|
-
|
|
40
|
-
|
|
57
|
+
```dart
|
|
58
|
+
// ❌ BAD - Tudo reconstrói a cada mudança
|
|
59
|
+
class ParentWidget extends StatelessWidget {
|
|
60
|
+
@override
|
|
61
|
+
Widget build(BuildContext context) {
|
|
62
|
+
return Consumer<MyModel>(
|
|
63
|
+
builder: (context, model, _) => Column(
|
|
64
|
+
children: [
|
|
65
|
+
HeaderWidget(title: model.title),
|
|
66
|
+
BodyWidget(items: model.items),
|
|
67
|
+
FooterWidget(), // Rebuild desnecessário!
|
|
68
|
+
],
|
|
69
|
+
),
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ✅ GOOD - Granularidade fina
|
|
75
|
+
class ParentWidget extends StatelessWidget {
|
|
76
|
+
@override
|
|
77
|
+
Widget build(BuildContext context) {
|
|
78
|
+
return Column(
|
|
79
|
+
children: [
|
|
80
|
+
Selector<MyModel, String>(
|
|
81
|
+
selector: (_, model) => model.title,
|
|
82
|
+
builder: (_, title, __) => HeaderWidget(title: title),
|
|
83
|
+
),
|
|
84
|
+
Selector<MyModel, List<Item>>(
|
|
85
|
+
selector: (_, model) => model.items,
|
|
86
|
+
builder: (_, items, __) => BodyWidget(items: items),
|
|
87
|
+
),
|
|
88
|
+
const FooterWidget(), // const = sem rebuild
|
|
89
|
+
],
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
41
93
|
```
|
|
42
94
|
|
|
43
|
-
|
|
95
|
+
##### 2. ListView Não Otimizada
|
|
44
96
|
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
97
|
+
```dart
|
|
98
|
+
// ❌ BAD - Cria todos os widgets de uma vez
|
|
99
|
+
ListView(
|
|
100
|
+
children: items.map((item) => ItemWidget(item: item)).toList(),
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
// ✅ GOOD - Lazy loading
|
|
104
|
+
ListView.builder(
|
|
105
|
+
itemCount: items.length,
|
|
106
|
+
itemBuilder: (context, index) => ItemWidget(item: items[index]),
|
|
107
|
+
// Otimizações adicionais
|
|
108
|
+
cacheExtent: 500, // Pré-renderização
|
|
109
|
+
addAutomaticKeepAlives: false, // Se não precisar manter o estado
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
// ✅ AINDA MELHOR - Com tamanho fixo
|
|
113
|
+
ListView.builder(
|
|
114
|
+
itemCount: items.length,
|
|
115
|
+
itemExtent: 80, // Altura fixa = cálculo otimizado
|
|
116
|
+
itemBuilder: (context, index) => ItemWidget(item: items[index]),
|
|
117
|
+
)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
##### 3. Imagens Não Otimizadas
|
|
121
|
+
|
|
122
|
+
```dart
|
|
123
|
+
// ❌ BAD
|
|
124
|
+
Image.network(
|
|
125
|
+
'https://example.com/large_image.jpg',
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
// ✅ GOOD - Com cache e redimensionamento
|
|
129
|
+
CachedNetworkImage(
|
|
130
|
+
imageUrl: 'https://example.com/large_image.jpg',
|
|
131
|
+
cacheWidth: 300, // Redimensionamento em memória
|
|
132
|
+
cacheHeight: 300,
|
|
133
|
+
memCacheWidth: 300,
|
|
134
|
+
placeholder: (context, url) => const Shimmer(),
|
|
135
|
+
errorWidget: (context, url, error) => const Icon(Icons.error),
|
|
136
|
+
)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Etapa 3: Análise de Memória
|
|
140
|
+
|
|
141
|
+
#### Detectar Vazamentos de Memória
|
|
142
|
+
|
|
143
|
+
```dart
|
|
144
|
+
// Verificar os dispose() ausentes
|
|
145
|
+
class _MyWidgetState extends State<MyWidget> {
|
|
146
|
+
late StreamSubscription _subscription;
|
|
147
|
+
late AnimationController _controller;
|
|
148
|
+
Timer? _timer;
|
|
149
|
+
|
|
150
|
+
@override
|
|
151
|
+
void initState() {
|
|
152
|
+
super.initState();
|
|
153
|
+
_subscription = stream.listen((_) {});
|
|
154
|
+
_controller = AnimationController(vsync: this);
|
|
155
|
+
_timer = Timer.periodic(Duration(seconds: 1), (_) {});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@override
|
|
159
|
+
void dispose() {
|
|
160
|
+
_subscription.cancel(); // ✅ Importante!
|
|
161
|
+
_controller.dispose(); // ✅ Importante!
|
|
162
|
+
_timer?.cancel(); // ✅ Importante!
|
|
163
|
+
super.dispose();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
#### Padrões Problemáticos
|
|
169
|
+
|
|
170
|
+
```dart
|
|
171
|
+
// ❌ BAD - Closure captura o context
|
|
172
|
+
onPressed: () async {
|
|
173
|
+
await longOperation();
|
|
174
|
+
Navigator.of(context).pop(); // context pode ser inválido!
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ✅ GOOD - Verificar o mounted
|
|
178
|
+
onPressed: () async {
|
|
179
|
+
await longOperation();
|
|
180
|
+
if (mounted) {
|
|
181
|
+
Navigator.of(context).pop();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Etapa 4: Otimizações Recomendadas
|
|
49
187
|
|
|
50
|
-
|
|
51
|
-
|
|
188
|
+
#### Checklist de Otimização de Widgets
|
|
189
|
+
|
|
190
|
+
```dart
|
|
191
|
+
// 1. Usar const sempre que possível
|
|
192
|
+
const MyWidget(); // ✅
|
|
193
|
+
|
|
194
|
+
// 2. RepaintBoundary para partes custosas
|
|
195
|
+
RepaintBoundary(
|
|
196
|
+
child: ExpensiveWidget(),
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
// 3. Separar os widgets que mudam com frequência
|
|
200
|
+
class OptimizedWidget extends StatelessWidget {
|
|
201
|
+
@override
|
|
202
|
+
Widget build(BuildContext context) {
|
|
203
|
+
return Column(
|
|
204
|
+
children: [
|
|
205
|
+
const StaticHeader(), // Nunca reconstrói
|
|
206
|
+
const AnimatedCounter(), // Isolado
|
|
207
|
+
const StaticFooter(), // Nunca reconstrói
|
|
208
|
+
],
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// 4. Evitar builds dentro de builds
|
|
214
|
+
// ❌ BAD
|
|
215
|
+
build(context) {
|
|
216
|
+
final items = generateItems(); // Chamado a cada build!
|
|
217
|
+
return ListView.builder(...);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// ✅ GOOD
|
|
221
|
+
late final items = generateItems(); // Apenas uma vez
|
|
222
|
+
|
|
223
|
+
// 5. Usar Keys corretamente
|
|
224
|
+
ListView.builder(
|
|
225
|
+
itemBuilder: (context, index) => ItemWidget(
|
|
226
|
+
key: ValueKey(items[index].id), // Key estável
|
|
227
|
+
item: items[index],
|
|
228
|
+
),
|
|
229
|
+
)
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Etapa 5: Gerar o Relatório
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
══════════════════════════════════════════════════════════════
|
|
236
|
+
📊 RELATÓRIO DE PERFORMANCE FLUTTER
|
|
237
|
+
══════════════════════════════════════════════════════════════
|
|
238
|
+
|
|
239
|
+
──────────────────────────────────────────────────────────────
|
|
240
|
+
🎯 MÉTRICAS DE RENDERIZAÇÃO
|
|
241
|
+
──────────────────────────────────────────────────────────────
|
|
242
|
+
|
|
243
|
+
| Página | Build Time | Raster Time | FPS | Status |
|
|
244
|
+
|---------|------------|-------------|-----|--------|
|
|
245
|
+
| Home | 8ms | 12ms | 60 | ✅ |
|
|
246
|
+
| List | 45ms | 35ms | 45 | ⚠️ |
|
|
247
|
+
| Detail | 15ms | 18ms | 58 | ✅ |
|
|
248
|
+
|
|
249
|
+
Limites:
|
|
250
|
+
- Build < 16ms : ✅
|
|
251
|
+
- Build > 16ms : ⚠️ Jank possível
|
|
252
|
+
- Build > 32ms : ❌ Jank visível
|
|
253
|
+
|
|
254
|
+
──────────────────────────────────────────────────────────────
|
|
255
|
+
🧠 MÉTRICAS DE MEMÓRIA
|
|
256
|
+
──────────────────────────────────────────────────────────────
|
|
257
|
+
|
|
258
|
+
| Métrica | Valor | Limite | Status |
|
|
259
|
+
|----------------|--------|----------|--------|
|
|
260
|
+
| Heap Used | 85MB | < 150MB | ✅ |
|
|
261
|
+
| Heap Capacity | 120MB | < 200MB | ✅ |
|
|
262
|
+
| External | 25MB | < 50MB | ✅ |
|
|
263
|
+
| RSS | 180MB | < 300MB | ✅ |
|
|
264
|
+
|
|
265
|
+
──────────────────────────────────────────────────────────────
|
|
266
|
+
⚠️ PROBLEMAS DETECTADOS
|
|
267
|
+
──────────────────────────────────────────────────────────────
|
|
268
|
+
|
|
269
|
+
### Crítico
|
|
270
|
+
1. **Rebuilds excessivos** - ProductListPage
|
|
271
|
+
- 150 rebuilds/seg detectados
|
|
272
|
+
- Causa: Provider no nível errado
|
|
273
|
+
- Correção: Usar Selector ou Consumer granular
|
|
274
|
+
|
|
275
|
+
### Importante
|
|
276
|
+
2. **ListView não otimizada** - OrderHistoryPage
|
|
277
|
+
- Sem itemExtent definido
|
|
278
|
+
- 500+ itens sem lazy loading
|
|
279
|
+
- Correção: ListView.builder com itemExtent
|
|
280
|
+
|
|
281
|
+
3. **Imagens sem cache** - ProductCard
|
|
282
|
+
- Image.network sem cache
|
|
283
|
+
- Correção: Usar cached_network_image
|
|
284
|
+
|
|
285
|
+
### Menor
|
|
286
|
+
4. **Widgets não const** - AppBar customizada
|
|
287
|
+
- 5 widgets podem ser const
|
|
288
|
+
- Correção: Adicionar a palavra-chave const
|
|
289
|
+
|
|
290
|
+
──────────────────────────────────────────────────────────────
|
|
291
|
+
🔧 OTIMIZAÇÕES SUGERIDAS
|
|
292
|
+
──────────────────────────────────────────────────────────────
|
|
293
|
+
|
|
294
|
+
### 1. ProductListPage - Rebuilds (Impacto: Alto)
|
|
295
|
+
```dart
|
|
296
|
+
// Antes
|
|
297
|
+
Consumer<CartModel>(
|
|
298
|
+
builder: (_, cart, __) => ProductList(cart: cart),
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
// Depois
|
|
302
|
+
Selector<CartModel, int>(
|
|
303
|
+
selector: (_, cart) => cart.itemCount,
|
|
304
|
+
builder: (_, count, child) => child!,
|
|
305
|
+
child: const ProductList(),
|
|
306
|
+
)
|
|
52
307
|
```
|
|
53
308
|
|
|
54
|
-
|
|
309
|
+
### 2. OrderHistoryPage - ListView (Impacto: Alto)
|
|
310
|
+
```dart
|
|
311
|
+
// Antes
|
|
312
|
+
ListView(children: orders.map((o) => OrderTile(o)).toList())
|
|
55
313
|
|
|
56
|
-
|
|
314
|
+
// Depois
|
|
315
|
+
ListView.builder(
|
|
316
|
+
itemCount: orders.length,
|
|
317
|
+
itemExtent: 72,
|
|
318
|
+
itemBuilder: (_, i) => OrderTile(orders[i]),
|
|
319
|
+
)
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### 3. ProductCard - Imagens (Impacto: Médio)
|
|
323
|
+
```dart
|
|
324
|
+
// Antes
|
|
325
|
+
Image.network(product.imageUrl)
|
|
57
326
|
|
|
58
|
-
|
|
327
|
+
// Depois
|
|
328
|
+
CachedNetworkImage(
|
|
329
|
+
imageUrl: product.imageUrl,
|
|
330
|
+
cacheWidth: 200,
|
|
331
|
+
memCacheWidth: 200,
|
|
332
|
+
)
|
|
333
|
+
```
|
|
59
334
|
|
|
60
|
-
|
|
335
|
+
──────────────────────────────────────────────────────────────
|
|
336
|
+
📈 IMPACTO ESTIMADO
|
|
337
|
+
──────────────────────────────────────────────────────────────
|
|
61
338
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
339
|
+
| Otimização | Antes | Depois | Ganho |
|
|
340
|
+
|--------------------------|-------|--------|-------|
|
|
341
|
+
| ProductListPage FPS | 45 | 60 | +33% |
|
|
342
|
+
| Memória de imagens | 85MB | 45MB | -47% |
|
|
343
|
+
| Time to interactive | 2.5s | 1.8s | -28% |
|
|
66
344
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
- Tamanho do app
|
|
345
|
+
──────────────────────────────────────────────────────────────
|
|
346
|
+
📋 COMANDOS ÚTEIS
|
|
347
|
+
──────────────────────────────────────────────────────────────
|
|
71
348
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
349
|
+
# Profiling
|
|
350
|
+
flutter run --profile
|
|
351
|
+
flutter analyze
|
|
352
|
+
|
|
353
|
+
# DevTools
|
|
354
|
+
flutter pub global activate devtools
|
|
355
|
+
dart devtools
|
|
356
|
+
|
|
357
|
+
# Performance overlay
|
|
358
|
+
MaterialApp(
|
|
359
|
+
showPerformanceOverlay: true,
|
|
360
|
+
)
|
|
361
|
+
```
|
|
@@ -1,48 +1,253 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Verificar Conformidade
|
|
2
|
+
description: Verificar Conformidade Completa do Flutter
|
|
3
|
+
argument-hint: [arguments]
|
|
3
4
|
---
|
|
4
5
|
|
|
5
|
-
# Verificar Conformidade
|
|
6
|
+
# Verificar Conformidade Completa do Flutter
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
## Argumentos
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
$ARGUMENTS (opcional: caminho para o projeto a analisar)
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
## Modo de Planejamento
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
- [ ] Documentation presente
|
|
15
|
-
- [ ] Usage guidelines respeitados
|
|
16
|
-
- [ ] Design patterns apropriados
|
|
14
|
+
> O modo de planejamento é ativado automaticamente quando o escopo abrange múltiplos módulos ou requer investigação transversal.
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
## MISSÃO
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
- [ ] Estado gerenciado corretamente
|
|
22
|
-
- [ ] BuildContext usado apropriadamente
|
|
23
|
-
- [ ] Keys usadas quando necessário
|
|
18
|
+
Realizar uma auditoria de conformidade completa do projeto Flutter orquestrando as 4 verificações principais: Arquitetura, Qualidade de Código, Testes e Segurança. Produzir um relatório consolidado com uma pontuação geral de 100 pontos.
|
|
24
19
|
|
|
25
|
-
###
|
|
20
|
+
### Etapa 1: Preparação da Auditoria
|
|
26
21
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
Preparar o ambiente de auditoria:
|
|
23
|
+
- [ ] Identificar o caminho do projeto a auditar
|
|
24
|
+
- [ ] Verificar a presença dos arquivos de configuração (pubspec.yaml, analysis_options.yaml)
|
|
25
|
+
- [ ] Listar os diretórios principais (lib/, test/, android/, ios/, etc.)
|
|
26
|
+
- [ ] Identificar a estrutura do projeto e a versão do Flutter
|
|
27
|
+
|
|
28
|
+
**Nota**: Se $ARGUMENTS for fornecido, usá-lo como caminho do projeto; caso contrário, usar o diretório atual.
|
|
29
|
+
|
|
30
|
+
### Etapa 2: Auditoria de Arquitetura (25 pontos)
|
|
31
|
+
|
|
32
|
+
Executar a verificação completa de arquitetura:
|
|
33
|
+
|
|
34
|
+
**Comando**: Usar o slash command `/flutter:check-architecture` ou seguir manualmente as etapas em `check-architecture.md`
|
|
35
|
+
|
|
36
|
+
**Critérios Avaliados**:
|
|
37
|
+
- Organização das camadas de Clean Architecture (6 pts)
|
|
38
|
+
- Separação Domain/Data/Presentation (6 pts)
|
|
39
|
+
- Injeção de dependências (get_it, injectable, riverpod) (4 pts)
|
|
40
|
+
- Estrutura modular baseada em features (4 pts)
|
|
41
|
+
- Princípios SOLID na arquitetura (3 pts)
|
|
42
|
+
- Utilitários Core/Shared (2 pts)
|
|
43
|
+
|
|
44
|
+
**Referência**: `check-architecture.md`
|
|
45
|
+
|
|
46
|
+
### Etapa 3: Auditoria de Qualidade de Código (25 pontos)
|
|
47
|
+
|
|
48
|
+
Executar a verificação de qualidade de código:
|
|
49
|
+
|
|
50
|
+
**Comando**: Usar o slash command `/flutter:check-code-quality` ou seguir manualmente as etapas em `check-code-quality.md`
|
|
51
|
+
|
|
52
|
+
**Critérios Avaliados**:
|
|
53
|
+
- Convenções Effective Dart (5 pts)
|
|
54
|
+
- Flutter analyze (zero avisos) (5 pts)
|
|
55
|
+
- Rigor de linting e analysis_options (4 pts)
|
|
56
|
+
- Princípios KISS/DRY/YAGNI (4 pts)
|
|
57
|
+
- Documentação com comentários /// (4 pts)
|
|
58
|
+
- Tratamento de erros (3 pts)
|
|
59
|
+
|
|
60
|
+
**Referência**: `check-code-quality.md`
|
|
61
|
+
|
|
62
|
+
### Etapa 4: Auditoria de Testes (25 pontos)
|
|
63
|
+
|
|
64
|
+
Executar a verificação de testes:
|
|
65
|
+
|
|
66
|
+
**Comando**: Usar o slash command `/flutter:check-testing` ou seguir manualmente as etapas em `check-testing.md`
|
|
67
|
+
|
|
68
|
+
**Critérios Avaliados**:
|
|
69
|
+
- Cobertura de código (7 pts)
|
|
70
|
+
- Testes unitários para domain e data (6 pts)
|
|
71
|
+
- Testes de widget para UI (4 pts)
|
|
72
|
+
- Testes de integração (3 pts)
|
|
73
|
+
- Qualidade dos testes e padrão AAA (3 pts)
|
|
74
|
+
- Mocks (mockito/mocktail) e fixtures (2 pts)
|
|
75
|
+
|
|
76
|
+
**Referência**: `check-testing.md`
|
|
77
|
+
|
|
78
|
+
### Etapa 5: Auditoria de Segurança (25 pontos)
|
|
79
|
+
|
|
80
|
+
Executar a verificação de segurança:
|
|
81
|
+
|
|
82
|
+
**Comando**: Usar o slash command `/flutter:check-security` ou seguir manualmente as etapas em `check-security.md`
|
|
83
|
+
|
|
84
|
+
**Critérios Avaliados**:
|
|
85
|
+
- Segredos e credenciais hardcoded (6 pts)
|
|
86
|
+
- Segurança de rede (HTTPS, SSL/TLS) (5 pts)
|
|
87
|
+
- Armazenamento de dados sensíveis (flutter_secure_storage) (4 pts)
|
|
88
|
+
- Vulnerabilidades de dependências (4 pts)
|
|
89
|
+
- Permissões de plataforma (Android/iOS) (3 pts)
|
|
90
|
+
- Validação de entrada (2 pts)
|
|
91
|
+
- Ofuscação no release (1 pt)
|
|
92
|
+
|
|
93
|
+
**Referência**: `check-security.md`
|
|
94
|
+
|
|
95
|
+
### Etapa 6: Consolidação e Pontuação Global
|
|
96
|
+
|
|
97
|
+
Calcular a pontuação geral e produzir o relatório consolidado:
|
|
98
|
+
- [ ] Somar as 4 pontuações (máximo 100 pontos)
|
|
99
|
+
- [ ] Identificar categorias críticas (<50%)
|
|
100
|
+
- [ ] Listar todos os problemas transversais críticos
|
|
101
|
+
- [ ] Priorizar ações por impacto/esforço
|
|
102
|
+
- [ ] Produzir o relatório final consolidado
|
|
103
|
+
|
|
104
|
+
**Escala de Avaliação**:
|
|
105
|
+
- 90-100: Excelente - Projeto de referência
|
|
106
|
+
- 75-89: Muito Bom - Pequenas melhorias necessárias
|
|
107
|
+
- 60-74: Aceitável - Requer melhorias
|
|
108
|
+
- 40-59: Insuficiente - Refatoração significativa necessária
|
|
109
|
+
- 0-39: Crítico - Reformulação completa necessária
|
|
110
|
+
|
|
111
|
+
### Etapa 7: Recomendações e Plano de Ação
|
|
112
|
+
|
|
113
|
+
Produzir recomendações finais:
|
|
114
|
+
- [ ] Identificar as 3 ações prioritárias em todas as categorias
|
|
115
|
+
- [ ] Estimar esforço (Baixo/Médio/Alto) para cada ação
|
|
116
|
+
- [ ] Estimar impacto (Baixo/Médio/Alto) para cada ação
|
|
117
|
+
- [ ] Propor ordem de implementação
|
|
118
|
+
- [ ] Sugerir quick wins (alta relação impacto/esforço)
|
|
119
|
+
|
|
120
|
+
## FORMATO DE SAÍDA
|
|
30
121
|
|
|
31
|
-
# Verificar licenças
|
|
32
|
-
flutter pub deps --json | jq '.packages[].license'
|
|
33
122
|
```
|
|
123
|
+
AUDITORIA DE CONFORMIDADE FLUTTER - RELATÓRIO COMPLETO
|
|
124
|
+
=============================================
|
|
125
|
+
|
|
126
|
+
PONTUAÇÃO GERAL: XX/100
|
|
127
|
+
|
|
128
|
+
NÍVEL DE CONFORMIDADE: [Excelente/Muito Bom/Aceitável/Insuficiente/Crítico]
|
|
129
|
+
|
|
130
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
131
|
+
|
|
132
|
+
PONTUAÇÕES POR CATEGORIA:
|
|
34
133
|
|
|
35
|
-
|
|
134
|
+
ARQUITETURA : XX/25 [██████████░░░░░░░░░░] XX%
|
|
135
|
+
QUALIDADE DE CÓDIGO: XX/25 [██████████░░░░░░░░░░] XX%
|
|
136
|
+
TESTES : XX/25 [██████████░░░░░░░░░░] XX%
|
|
137
|
+
SEGURANÇA : XX/25 [██████████░░░░░░░░░░] XX%
|
|
36
138
|
|
|
37
|
-
|
|
38
|
-
- [ ] pubspec.yaml bem estruturado
|
|
39
|
-
- [ ] README.md completo
|
|
40
|
-
- [ ] CHANGELOG.md atualizado
|
|
139
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
41
140
|
|
|
42
|
-
|
|
141
|
+
PONTOS FORTES GERAIS:
|
|
142
|
+
1. [Ponto forte identificado em múltiplas categorias]
|
|
143
|
+
2. [Outro ponto forte importante]
|
|
144
|
+
3. [Terceiro ponto forte]
|
|
43
145
|
|
|
44
|
-
|
|
146
|
+
MELHORIAS GERAIS:
|
|
147
|
+
1. [Melhoria transversal menor]
|
|
148
|
+
2. [Outra melhoria recomendada]
|
|
149
|
+
3. [Terceira melhoria]
|
|
150
|
+
|
|
151
|
+
PROBLEMAS CRÍTICOS:
|
|
152
|
+
1. [Problema crítico #1 - categoria afetada]
|
|
153
|
+
2. [Problema crítico #2 - categoria afetada]
|
|
154
|
+
3. [Problema crítico #3 - categoria afetada]
|
|
155
|
+
|
|
156
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
157
|
+
|
|
158
|
+
DETALHES POR CATEGORIA:
|
|
159
|
+
|
|
160
|
+
┌─────────────────────────────────────────────┐
|
|
161
|
+
│ ARQUITETURA (XX/25) │
|
|
162
|
+
└─────────────────────────────────────────────┘
|
|
163
|
+
|
|
164
|
+
Sub-pontuações:
|
|
165
|
+
• Camadas Clean Architecture : XX/6
|
|
166
|
+
• Separação de camadas : XX/6
|
|
167
|
+
• Injeção de dependências : XX/4
|
|
168
|
+
• Módulos baseados em features : XX/4
|
|
169
|
+
• Princípios SOLID : XX/3
|
|
170
|
+
• Utilitários Core/Shared : XX/2
|
|
171
|
+
|
|
172
|
+
Pontos Fortes:
|
|
173
|
+
- [Pontos fortes de arquitetura]
|
|
174
|
+
|
|
175
|
+
Problemas:
|
|
176
|
+
- [Problemas de arquitetura]
|
|
177
|
+
|
|
178
|
+
[Seções similares para Qualidade de Código, Testes e Segurança...]
|
|
179
|
+
|
|
180
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
181
|
+
|
|
182
|
+
TOP 3 AÇÕES PRIORITÁRIAS (TODAS AS CATEGORIAS):
|
|
183
|
+
|
|
184
|
+
1. CRÍTICO - [Ação #1]
|
|
185
|
+
Categoria : [Arquitetura/Qualidade/Testes/Segurança]
|
|
186
|
+
Impacto : [Alto/Médio/Baixo]
|
|
187
|
+
Esforço : [Alto/Médio/Baixo]
|
|
188
|
+
Prioridade: IMEDIATA
|
|
189
|
+
|
|
190
|
+
Descrição detalhada:
|
|
191
|
+
[Explicação do problema e solução proposta]
|
|
192
|
+
|
|
193
|
+
Arquivos afetados:
|
|
194
|
+
- [arquivo:linha]
|
|
195
|
+
|
|
196
|
+
Exemplo de correção:
|
|
197
|
+
[Código ou comando de correção]
|
|
198
|
+
|
|
199
|
+
2. IMPORTANTE - [Ação #2]
|
|
200
|
+
[Mesmo formato...]
|
|
201
|
+
|
|
202
|
+
3. RECOMENDADO - [Ação #3]
|
|
203
|
+
[Mesmo formato...]
|
|
204
|
+
|
|
205
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
206
|
+
|
|
207
|
+
QUICK WINS (Alto Impacto / Baixo Esforço):
|
|
208
|
+
|
|
209
|
+
- [Quick win #1] - Categoria: [X] - Impacto: [X] - Esforço: [X]
|
|
210
|
+
- [Quick win #2] - Categoria: [X] - Impacto: [X] - Esforço: [X]
|
|
211
|
+
- [Quick win #3] - Categoria: [X] - Impacto: [X] - Esforço: [X]
|
|
212
|
+
|
|
213
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
214
|
+
|
|
215
|
+
PLANO DE AÇÃO RECOMENDADO:
|
|
216
|
+
|
|
217
|
+
SEMANA 1 (Imediato):
|
|
218
|
+
- [ ] [Ação crítica #1]
|
|
219
|
+
- [ ] [Quick win prioritário]
|
|
220
|
+
|
|
221
|
+
SEMANAS 2-4 (Curto prazo):
|
|
222
|
+
- [ ] [Ação importante #2]
|
|
223
|
+
- [ ] [Outros quick wins]
|
|
224
|
+
|
|
225
|
+
MESES 2-3 (Médio prazo):
|
|
226
|
+
- [ ] [Ação recomendada #3]
|
|
227
|
+
- [ ] [Melhorias progressivas]
|
|
228
|
+
|
|
229
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
230
|
+
|
|
231
|
+
RESUMO EXECUTIVO:
|
|
232
|
+
|
|
233
|
+
[Parágrafo de resumo sobre o estado geral do projeto, pontos fortes
|
|
234
|
+
principais, principais fraquezas e trajetória recomendada para melhorar
|
|
235
|
+
a conformidade. Indicar se o projeto está pronto para produção,
|
|
236
|
+
requer correções ou precisa de refatoração.]
|
|
237
|
+
|
|
238
|
+
Recomendação Geral: [Pronto para produção / Correções menores /
|
|
239
|
+
Refatoração significativa / Reformulação necessária]
|
|
240
|
+
|
|
241
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
242
|
+
```
|
|
45
243
|
|
|
46
|
-
##
|
|
244
|
+
## NOTAS IMPORTANTES
|
|
47
245
|
|
|
48
|
-
|
|
246
|
+
- Este comando orquestra as 4 auditorias especializadas
|
|
247
|
+
- Usar Docker para todas as ferramentas de análise
|
|
248
|
+
- Fornecer exemplos concretos com arquivo:linha para cada problema
|
|
249
|
+
- Priorizar ações com base na matriz de Impacto/Esforço
|
|
250
|
+
- Problemas de segurança são SEMPRE a prioridade máxima
|
|
251
|
+
- Propor correções automatizáveis (scripts, pre-commit hooks)
|
|
252
|
+
- O relatório deve ser acionável, não apenas descritivo
|
|
253
|
+
- Adaptar as recomendações ao contexto de negócio do projeto
|