a0112d696e
Add the full GNU General Public License v3 text as LICENSE, declare the license in pubspec.yaml, and document it in README and AGENTS.md.
6.0 KiB
6.0 KiB
MyIce Mobile
Application mobile Flutter pour MyIce, la plateforme de gestion du club de hockey sur glace. Elle permet aux membres de consulter les calendriers de matchs, les convocations (joueurs et staff) et les détails des événements.
Fonctionnalités
- Connexion via Infomaniak — authentification OAuth via
flutter_web_auth_2avec redirection sur le schéma personnalisémyice://. - Multi-comptes — bascule entre plusieurs comptes/équipes, le compte sélectionné est persisté.
- Calendrier des matchs — liste les événements de type « Jeu » avec filtrage par tranche d'âge (
agegroup) et sous-groupe. - Détail d'un match — récapitulatif (type, lieu, horaires) et convocation : joueurs disponibles (poste, numéro, date de naissance) et personnel (rôle, nom).
- Cache hors-ligne — les événements et les filtres sont mis en cache par compte via
SharedPreferences; rafraîchissement manuel disponible. - Interface Material 3 en français.
Pré-requis
- Flutter >= 3.1.0 (Dart SDK
>=3.1.0 <4.0.0) - Un éditeur compatible Dart (liste des IDE)
- Accès au backend MyIce (
https://myice.parano.ch)
Installation
git clone git@gitea.parano.ch:herel/myice_mobile.git
cd myice_mobile
flutter pub get
Génération des icônes de lancement
dart run flutter_launcher_icons
L'icône source est assets/icon/logo.png (configurée dans pubspec.yaml).
Exécution
flutter run # appareil par défaut
flutter run -d chrome # navigateur web
flutter run -d macos # macOS
Configuration
URL du backend
L'adresse de l'API est définie dans lib/config/api_config.dart :
class ApiConfig {
static const String baseUrl = 'https://myice.parano.ch';
}
Schéma d'authentification
L'authentification OAuth utilise le schéma d'URL personnalisé myice://callback. Il est déjà configuré :
- Android —
android/app/src/main/AndroidManifest.xml(activitéCallbackActivity) - iOS / macOS —
ios/Runner/Info.plist(CFBundleURLSchemes)
Endpoints API consommés
| Méthode | Route | Description |
|---|---|---|
| GET | /login?redirect_uri=... |
Déclenche le flux OAuth Infomaniak |
| GET | /userinfo |
Informations de l'utilisateur connecté |
| GET | /accounts |
Liste des comptes/équipes accessibles |
| GET | /schedule?account= |
Calendrier des événements d'un compte |
| GET | /game/{gameId}?account= |
Détail d'un match et sa convocation |
Architecture
Le projet suit une architecture en couches avec le pattern Provider pour la gestion d'état :
lib/
├── main.dart # Point d'entrée, MultiProvider, routage racine
├── config/
│ └── api_config.dart # Configuration de l'API (baseUrl)
├── models/ # Modèles de données (fromJson / toJson)
│ ├── account.dart
│ ├── event.dart
│ ├── event_detail.dart
│ ├── convocation.dart
│ ├── player.dart
│ ├── staff.dart
│ └── user_info.dart
├── services/ # Logique d'accès aux données
│ ├── api_service.dart # Client HTTP (Dio) + bearer token
│ ├── auth_service.dart # OAuth + stockage du token/compte
│ └── schedule_cache_service.dart # Cache des événements et filtres
├── providers/ # ChangeNotifiers (état réactif)
│ ├── auth_provider.dart
│ ├── schedule_provider.dart
│ └── event_detail_provider.dart
├── screens/ # Pages de l'application
│ ├── login_screen.dart
│ ├── schedule_screen.dart
│ └── event_detail_screen.dart
└── widgets/ # Composants UI réutilisables
├── event_card.dart
├── filter_dropdown.dart
└── loading_indicator.dart
Flux de l'application
- Au démarrage,
AuthProvider.init()restaure le token stocké et valide la session via/userinfo. - Si authentifié →
ScheduleScreen: charge les comptes, puis le calendrier depuis le cache (ou rafraîchit si vide). - L'utilisateur filtre par tranche d'âge et sous-groupe (persistés par compte).
- Un appui sur un événement ouvre
EventDetailScreenqui charge/game/{id}.
Tests
flutter test # suite de tests widget
flutter analyze # analyse statique (lints flutter_lints)
La configuration des lints se trouve dans analysis_options.yaml.
Build de production
flutter build apk --release # Android
flutter build ios --release # iOS
flutter build macos --release # macOS
flutter build web --release # Web
Dépendances principales
| Package | Rôle |
|---|---|
dio |
Client HTTP |
provider |
Gestion d'état réactive |
shared_preferences |
Stockage local (token, cache, filtres) |
flutter_web_auth_2 |
Flux d'authentification OAuth (navigateur) |
intl |
Internationalisation |
flutter_launcher_icons |
Génération des icônes de lancement (dev) |
Contribuer
- Créer une branche depuis
main. - Respecter les conventions de code (vérifier avec
flutter analyze). - S'assurer que
flutter testpasse. - Ouvrir une merge request sur Gitea.
Licence
Ce projet est distribué sous licence GNU General Public License v3.0 ou ultérieure.