# FIN65 Mobile V2 - Offline-first SQLite Cette version ajoute une vraie base locale SQLite côté mobile. ## Ce que ça change - L'app affiche les dernières données connues même si le backend PC est éteint. - L'app garde localement : - les comptes ; - les catégories ; - le dashboard ; - les dernières transactions ; - les opérations en attente. - Si le backend est indisponible, une nouvelle dépense/recette/transfert est placée dans une file d'attente locale. - Quand le backend revient, le bouton "Synchroniser" envoie les opérations en attente, puis recharge les données fraîches. ## Installation dans le projet Flutter existant Depuis : ```powershell D:\07-Logiciels\20-FIN65\fin65_mobile ``` Copie/remplace depuis ce ZIP : ```text pubspec.yaml lib\ README_MOBILE_OFFLINE_SQLITE.md ``` Puis lance : ```powershell cd D:\07-Logiciels\20-FIN65\fin65_mobile $env:PUB_CACHE = "D:\07-Logiciels\20-FIN65\.pub-cache" flutter clean Remove-Item -Recurse -Force .\.dart_tool -ErrorAction SilentlyContinue Remove-Item -Recurse -Force .\build -ErrorAction SilentlyContinue Remove-Item -Force .\pubspec.lock -ErrorAction SilentlyContinue flutter pub get flutter run ``` ## Backend Le backend reste la source officielle des données. ```powershell cd D:\07-Logiciels\20-FIN65\finance_app_backend py -m uvicorn main:app --host 0.0.0.0 --port 8000 --reload ``` Dans l'app mobile, configurer l'URL : ```text http://IP_DU_PC:8000 ``` ## Règles de synchronisation - Les créations mobiles sont synchronisées plus tard. - Les modifications/suppressions hors ligne ne sont pas encore activées pour éviter les conflits. - Les soldes affichés hors ligne sont des soldes estimés quand il existe des opérations en attente. ## V2.1 - Correctif locale FR Correction de l'erreur Flutter : ```text LocaleDataException: Locale data has not been initialized ``` Le fichier `lib/main.dart` initialise maintenant les données de formatage : ```dart WidgetsFlutterBinding.ensureInitialized(); await initializeDateFormatting('fr_FR', null); ``` ## V2.2 - Correctif sauvegarde hors ligne Correction du problème observé lors de l'enregistrement d'une dépense avec le backend éteint. Changements : - le formulaire attend maintenant le rechargement SQLite local avant de fermer l'écran ; - les erreurs de rechargement/synchronisation sont affichées au lieu de produire un écran noir ; - `ErrorWidget` affiche une erreur lisible si un widget Flutter échoue ; - validation plus stricte des comptes source/cible. ## V2.3 - Boutons rapides Ajout de raccourcis dans l'écran d'ajout rapide : - dépenses rapides : Courses, Essence, Restaurant, Café, Transport, Santé, Abonnement, Retrait cash ; - recettes rapides : Salaire, Remboursement, Prime, Vente ; - transferts rapides : Épargne, Provision, Banque → Cash, Cash → Banque ; - montants rapides : 10, 20, 50, 100, 200, 500, 1000. Les boutons pré-remplissent le libellé et essaient d'associer automatiquement une catégorie existante quand le nom est proche. ## V2.4.1 - Correctif build bouton fixe Correction de compilation : le bouton `Enregistrer` fixe est maintenant déclaré dans l'écran principal d'ajout rapide, pas dans le composant interne des boutons rapides. ## V2.5 - Page Synchronisation + verrouillage PIN Ajouts : - vraie page `Synchronisation` avec statut backend, URL API, dernière synchro, file d'attente locale et bouton de synchronisation ; - accès à la page depuis l’icône nuage dans la barre du haut ; - badge avec le nombre d’opérations en attente ; - écran `Sécurité` dans les paramètres ; - activation/changement/désactivation du PIN ; - verrouillage automatique de l’app quand elle passe en arrière-plan ; - demande du PIN au prochain retour dans l’app. Note : - Le PIN protège l’accès local à l’app. - Si le backend est exposé sur Internet, il faudra aussi ajouter une vraie authentification serveur. ## V2.6 - Déverrouillage par empreinte Ajouts : - dépendance Flutter `local_auth` ; - activation/désactivation de l'empreinte dans `Paramètres > Sécurité` ; - déverrouillage par empreinte sur l'écran de verrouillage ; - le PIN reste toujours disponible en secours ; - patch Android inclus dans `android_biometrics_patch`. Installation : 1. Remplacer `lib`, `pubspec.yaml` et `README_MOBILE_OFFLINE_SQLITE.md`. 2. Lancer `flutter pub get`. 3. Lancer le patch Android : `android_biometrics_patch\apply_android_biometrics_patch.bat` 4. Relancer `flutter run`. Important : - Active d’abord le PIN dans l’app. - Ensuite seulement active l’empreinte. - L’empreinte dépend des empreintes déjà configurées dans Android.