Application mobile
Le parcours apprenant en application Flutter, pour Android, iOS et Linux. Le studio reste sur le web.
Périmètre#
| Inclus | Hors périmètre |
|---|---|
| Connexion par email et mot de passe, session conservée | Studio : création, téléversement, réordonnancement, comptes |
| Catalogue, détail formation, progressions | Lecture hors ligne |
| Lecteur vidéo et audio, reprise, vitesse, ±10 s, précédent / suivant | Notifications |
| Notes horodatées : création, édition, suppression, seek au tap | Changement de mot de passe (depuis le web) |
| Lecture des résumés ; transcription, génération et édition du résumé pour les administrateurs | |
| Documents de la leçon, assistant de formation | |
| Consommation IA : tokens sur 7, 30 ou 90 jours, par jour et par usage | |
| Thème clair, sombre ou système |
La position de lecture est sauvegardée avec un anti-rebond de 500 ms, et forcée à la pause, au passage en arrière-plan et en quittant l'écran. Un apprenant qui commence sur le web reprend sur son téléphone en se connectant avec le même compte.
Connexion et session#
- L'écran de connexion demande l'email et le mot de passe du compte, créé par un administrateur depuis le studio web.
- Le jeton est rangé dans le stockage sécurisé du système
(
flutter_secure_storage) et envoyé enAuthorization: Bearer, y compris par le lecteur vidéo. Au lancement, l'application le vérifie auprès de l'API. - Session expirée, compte désactivé ou supprimé : retour à l'écran de connexion. Si l'API est simplement injoignable, le jeton est gardé pour réessayer.
- Les documents sont téléchargés par l'application, avec le jeton, puis ouverts par l'application du système. Télécharger garde une copie dans le dossier de téléchargement de l'application.
- Les boutons de transcription, de génération ou d'édition du résumé et de relance de conversion ne s'affichent que pour un administrateur : ce sont des routes réservées côté API.
Si la connexion affiche « Cette API ne gère pas la connexion par compte », l'URL vise une API d'une version antérieure : vérifiez l'adresse dans les Paramètres.
Lecture : video_player et chewie pour la vidéo,
just_audio pour l'audio sur mobile ; media_kit (libmpv)
sur desktop.
Configuration de l'API#
cd e-learning-mobile
cp .env.template .env # obligatoire : le fichier est embarqué comme asset| Cible | API_URL |
|---|---|
| Émulateur Android | http://10.0.2.2:8000 |
| Simulateur iOS | http://localhost:8000 |
| Téléphone réel | http://<IP-LAN>:8000 |
| Desktop Linux sur la machine de l'API | http://localhost:8000 |
| Production | HTTPS, via --dart-define=API_URL=https://… |
Ordre de priorité, du plus fort au plus faible :
- le panneau Paramètres de l'application (icône engrenage,
présente dès l'écran de connexion) : saisie, test de
/health, enregistrement ; --dart-define=API_URL=…;- le fichier
.env; http://10.0.2.2:8000.
.env est lu au lancement
Embarqué comme asset, il n'est pas rechargé par le hot reload. Relancez
l'application, ou changez l'URL depuis le panneau Paramètres.
Lancer#
Flutter 3.47+ et Dart 3.13+. Sur Linux desktop, installez aussi
libsecret-1-dev, libmpv-dev et mpv.
flutter pub get
flutter run -d android
flutter run -d linuxSur Linux, le runner force l'ancien moteur de rendu à la place d'Impeller : avec Impeller, quitter le lecteur vidéo fait planter le moteur Flutter. Rien à faire de votre côté.
Construire pour Android#
La compilation demande l'Android SDK API 37 (exigence de
flutter_secure_storage 11+). Le pas-à-pas complet — détection
du téléphone, APK, installation par adb — est dans
e-learning-mobile/docs/how-to-build-android.md.
flutter build apk --release --dart-define=API_URL=http://192.168.1.20:8000
adb install -r build/app/outputs/flutter-apk/app-release.apklocalhost sur le téléphone désigne le téléphone. Utilisez l'IP LAN
de la machine qui fait tourner l'API, et vérifiez que le port 8000
est joignable.
Cladèse