herel 6395026e9b docs: Rewrite README with full project documentation
Replace the default Flutter starter README with comprehensive
documentation covering features, prerequisites, installation,
configuration, API endpoints, architecture, testing and build.
2026-07-09 16:22:58 +02:00
2026-07-06 18:23:36 +02:00
2026-07-06 18:23:36 +02:00
2026-07-06 18:23:36 +02:00
2026-07-06 18:01:38 +02:00
2026-07-06 18:01:38 +02:00
2026-07-06 18:23:36 +02:00
2026-07-06 18:01:38 +02:00
2026-07-06 18:01:38 +02:00
2026-07-06 18:01:38 +02:00
2026-07-06 18:01:38 +02:00
2026-07-06 18:01:38 +02:00
2026-07-06 18:01:38 +02:00
2026-07-06 18:01:38 +02:00
2026-07-06 18:23:36 +02:00
2026-07-06 18:23:36 +02:00

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_2 avec 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é :

  • Androidandroid/app/src/main/AndroidManifest.xml (activité CallbackActivity)
  • iOS / macOSios/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

  1. Au démarrage, AuthProvider.init() restaure le token stocké et valide la session via /userinfo.
  2. Si authentifié → ScheduleScreen : charge les comptes, puis le calendrier depuis le cache (ou rafraîchit si vide).
  3. L'utilisateur filtre par tranche d'âge et sous-groupe (persistés par compte).
  4. Un appui sur un événement ouvre EventDetailScreen qui 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

  1. Créer une branche depuis main.
  2. Respecter les conventions de code (vérifier avec flutter analyze).
  3. S'assurer que flutter test passe.
  4. Ouvrir une merge request sur Gitea.
S
Description
No description provided
Readme GPL-3.0 902 KiB
Languages
Dart 73%
CMake 16.4%
Swift 4.9%
HTML 2.8%
Ruby 2.6%
Other 0.2%