- getAllSessions : élimine le N+1 (une requête par session + par analyse) au profit de 3 requêtes groupées (sessions, analyses IN, shots IN), découpées en paquets de 500 pour rester sous la limite SQLite. Assemblage en mémoire via maps — accueil/historique/stats ne ralentiront plus au fil des mois - flutter analyze : 28 -> 0 problème. APIs dépréciées migrées (withOpacity -> withValues, scale -> scaleByDouble, DropdownButtonFormField.value -> initialValue, dialogBackgroundColor -> dialogTheme, activeColor -> activeThumbColor), use_build_context_synchronously corrigés dans l'armurerie (repository capturé avant await + gardes mounted), print -> debugPrint, identifiants TopLeft/... -> lowerCamelCase, blocs if, champ final - _showShotDetails dédupliqué : bottom sheet extraite dans le widget partagé shot_details_sheet.dart, utilisée par l'écran d'analyse et l'éditeur d'impacts - CLAUDE.md : sections Features réécrites (retrait détection auto/références, ajout capture/plotting manuel) ; description pubspec renseignée Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
122 lines
4.5 KiB
Markdown
122 lines
4.5 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
This is a Flutter application called "bully" targeting multiple platforms (Android, iOS, Linux, macOS, Web, Windows).
|
|
|
|
## Build Commands
|
|
|
|
```bash
|
|
# Get dependencies
|
|
flutter pub get
|
|
|
|
# Run the app (debug mode)
|
|
flutter run
|
|
|
|
# Run on a specific device
|
|
flutter run -d <device_id>
|
|
|
|
# Build for release
|
|
flutter build apk # Android
|
|
flutter build ios # iOS
|
|
flutter build web # Web
|
|
flutter build windows # Windows
|
|
flutter build macos # macOS
|
|
flutter build linux # Linux
|
|
|
|
# Analyze code for issues
|
|
flutter analyze
|
|
|
|
# Run all tests
|
|
flutter test
|
|
|
|
# Run a single test file
|
|
flutter test test/widget_test.dart
|
|
|
|
# Run tests with coverage
|
|
flutter test --coverage
|
|
```
|
|
|
|
## Features
|
|
|
|
### Capture de cibles de tir
|
|
- Support de cibles concentriques (anneaux) et silhouettes
|
|
- Chargement d'images de cibles depuis la galerie ou la caméra
|
|
- Aperçu caméra avec aide au cadrage : détection OpenCV de la cible (mire)
|
|
et indicateur de parallélisme par accéléromètre (pitch/roll)
|
|
- Écran de centrage/recadrage : rotation fine, déplacement pixel par pixel
|
|
|
|
### Calibration des cibles
|
|
- Ajustement manuel du centre, du rayon et du nombre d'anneaux (1-10)
|
|
- **Calibration individuelle des anneaux** : cliquer sur un anneau pour l'ajuster indépendamment
|
|
- Slider global pour redimensionner tous les anneaux proportionnellement
|
|
- Visualisation en temps réel des zones de score
|
|
|
|
### Placement des impacts
|
|
- **Éditeur d'impacts plein écran** : tap pour ajouter, tap sur un impact pour
|
|
l'éditer (score/suppression), appui long pour déplacer, pincer pour zoomer
|
|
- Le placement est entièrement manuel ; le bouton ↻ de l'écran de plotting
|
|
efface tous les impacts sans toucher à la calibration
|
|
|
|
### Calcul des scores
|
|
- Score automatique basé sur la position de l'impact dans les zones
|
|
- Cibles concentriques : score de 10 (centre) à 1 (bord externe)
|
|
- Support des anneaux calibrés individuellement pour un calcul précis
|
|
- Affichage du score total et de la distribution
|
|
|
|
### Analyse de groupement
|
|
- Calcul du diamètre de groupement
|
|
- Visualisation du cercle de groupement
|
|
- Centre de groupement affiché
|
|
|
|
### Statistiques
|
|
- **Zones chaudes (Heat Map)** : visualisation en brouillard avec gradient bleu (froid) à rouge (chaud)
|
|
- **Précision** : pourcentage de précision, score moyen
|
|
- **Écart-type** : dispersion horizontale et verticale
|
|
- **Distribution régionale** : répartition des tirs par quadrant
|
|
- Filtrage par période : session, semaine, mois, toutes les sessions
|
|
|
|
### Historique des sessions
|
|
- Sauvegarde des sessions avec date, score, notes
|
|
- Visualisation des sessions passées
|
|
- Suppression de sessions
|
|
|
|
### Interface utilisateur
|
|
- Thème sombre adapté au tir
|
|
- Support multilingue (Français)
|
|
- Interface responsive pour mobile et desktop
|
|
|
|
## Architecture
|
|
|
|
Standard Flutter project structure:
|
|
- `lib/` - Dart source code (entry point: `lib/main.dart`)
|
|
- `test/` - Widget and unit tests
|
|
- Platform directories: `android/`, `ios/`, `linux/`, `macos/`, `web/`, `windows/`
|
|
|
|
The app uses `flutter_lints` for static analysis (configured in `analysis_options.yaml`).
|
|
|
|
|
|
# description des pages
|
|
|
|
En-têtes ajoutés
|
|
Fichier En-tête
|
|
home_screen.dart Écran d'accueil - Dashboard principal avec stats et navigation
|
|
stats_card.dart Widget carte réutilisable pour afficher une statistique
|
|
capture_screen.dart Écran de capture - Sélection type cible et source image
|
|
target_type_selector.dart Sélecteur de type de cible (concentrique/silhouette)
|
|
image_source_button.dart Bouton pour choisir caméra ou galerie
|
|
analysis_screen.dart Écran principal d'analyse avec overlay et scores
|
|
analysis_provider.dart Gestionnaire d'état (ChangeNotifier) pour l'analyse
|
|
target_overlay.dart Overlay visuel avec anneaux, impacts et groupement
|
|
target_calibration.dart Outil de calibration du centre, rayon et anneaux
|
|
score_card.dart Carte d'affichage des scores et distribution
|
|
grouping_stats.dart Statistiques de groupement avec indicateur qualité
|
|
history_screen.dart Écran historique avec liste et graphique d'évolution
|
|
session_detail_screen.dart Détail d'une session avec visualisation complète
|
|
session_list_item.dart Item de liste représentant une session
|
|
history_chart.dart Graphique d'évolution des 10 dernières sessions
|
|
statistics_screen.dart Écran statistiques avec filtrage par période
|
|
heat_map_widget.dart Heat map avec gradient bleu→rouge
|