49 lines
1.8 KiB
Markdown
49 lines
1.8 KiB
Markdown
# Tirage Classes — application mobile (Expo / React Native)
|
|
|
|
tirage aléatoire avec pondération par l'ancienneté du dernier tirage
|
|
|
|
Application 100% locale et hors-ligne (aucun compte, aucun serveur) : les classes
|
|
et l'historique des tirages sont stockés sur l'appareil via AsyncStorage.
|
|
|
|
> **Prérequis :** Node.js ≥ 20.19 (requis par Expo SDK 54).
|
|
|
|
## Installation rapide (test avec Expo Go)
|
|
|
|
```bash
|
|
npm install
|
|
npx expo install --fix # aligne les versions des dépendances avec le SDK Expo
|
|
npx expo start
|
|
```
|
|
|
|
Scannez le QR code avec l'app **Expo Go** (iOS ou Android) : l'appli se lance
|
|
instantanément sur votre téléphone, sans Xcode ni Android Studio.
|
|
|
|
## Générer une appli installable (sans Expo Go), pour iOS et Android
|
|
|
|
Utilisez EAS Build (gratuit, nécessite un compte Expo) :
|
|
|
|
```bash
|
|
npm install -g eas-cli
|
|
eas login
|
|
eas build:configure
|
|
eas build --profile preview --platform all
|
|
```
|
|
|
|
Vous obtenez un lien de téléchargement direct (.apk pour Android à installer
|
|
directement, .ipa pour iOS via TestFlight ou un profil ad-hoc).
|
|
|
|
## Fonctionnalités
|
|
|
|
- Créer / modifier / supprimer des classes (nom, nombre d'élèves, pondération max)
|
|
- Tirer un élève au sort, pondéré par l'ancienneté du dernier tirage
|
|
- Bouton **Re-tirer** : annule le dernier tirage et en refait un immédiatement
|
|
- Historique complet des tirages par classe
|
|
- Aucune authentification, aucun réseau requis après installation
|
|
|
|
## Structure
|
|
|
|
- `src/models.js` — classes `Classe` et `Tirage` (POO) : logique du tirage pondéré encapsulée en méthodes (`classe.tirer()`, `classe.reTirer()`, `classe.calculerPoids()`), sérialisation JSON (`toJSON()`/`fromJSON()`). Testable indépendamment de React Native.
|
|
- `src/storage.js` — persistance locale (AsyncStorage), manipule des instances `Classe`
|
|
- `src/screens/` — écrans (liste, formulaire, détail/tirage)
|
|
- `App.js` — navigation
|