AgentSkillsCN

sameva-architecture

运用 Sameva 项目的 Clean 架构与 Provider 模式。在新增功能、重构代码、创建页面或 Provider 时使用,亦可在用户询问代码应放置何处、如何组织某一功能时派上用场。

SKILL.md
--- frontmatter
name: sameva-architecture
description: Applique l'architecture Clean et Provider du projet Sameva. Utiliser lors de l'ajout de fonctionnalités, du refactoring, de la création de pages ou providers, ou quand l'utilisateur demande où placer du code ou comment structurer une feature.

Architecture Sameva

Structure des couches

code
lib/
├── config/          # Configuration (Supabase, .env)
├── data/            # Implémentations repositories, models, datasources (Supabase + Hive)
├── domain/          # Entities, repositories abstraits, services métier
├── presentation/    # Providers (ChangeNotifier)
├── ui/
│   ├── pages/       # Écrans par feature (auth/, home/, quest/, etc.)
│   ├── theme/       # AppTheme, AppColors, AppStyles
│   └── widgets/     # minimalist/, magical/, fantasy/, common/
└── utils/           # Helpers (SVG, Figma)

Règles : Les pages dans ui/pages/ n'appellent pas directement les couches data. Elles utilisent Provider.of<T>(context) ou context.watch<T>() / context.read<T>().

Point d'entrée et navigation

  • main.dart : initialise dotenv, Supabase, Hive (boxes quests, playerStats, inventory, equipment), enregistre les 6 providers, lance SamevaApp.
  • app_new.dart : Stack + AnimatedSwitcher + barre dock flottante. 8 pages principales (Sanctuaire, Quêtes, Inventaire, Avatar, Marché, Invocation, Minijeux, Profil). FAB flottant pour création de quête.

Providers (état)

ProviderStockageRôle
AuthProviderSupabase AuthConnexion email/mdp et anonyme, écoute auth
QuestProviderSupabase DBCRUD quêtes, filtres (actives/terminées/aujourd'hui/ratées), récompenses
PlayerProviderHiveNiveau, XP, or, cristaux, HP, moral, streak
InventoryProviderHive50 emplacements, stack d'items
EquipmentProviderHiveSlots d'équipement et items équipés
ThemeProviderHiveThème sombre/clair/système

Nouveau provider : le créer dans presentation/providers/, l'enregistrer dans main.dart avec MultiProvider, et utiliser les boxes Hive ou Supabase selon le besoin.

Où placer le code

  • Nouvelle entité métierdomain/entities/
  • Règle métier / calculdomain/services/
  • Repository abstraitdomain/ (interface)
  • Implémentation repo + modelsdata/
  • État partagé (UI)presentation/providers/
  • Nouvelle pageui/pages/<feature>/
  • Widget réutilisableui/widgets/ (minimalist, magical, fantasy ou common selon le style)

Commandes utiles

bash
flutter pub get
flutter run
flutter analyze
dart run build_runner build   # Après modification de modèles @HiveType