Files
fin65-mobile/README_MOBILE_OFFLINE_SQLITE.md

4.6 KiB
Raw Permalink Blame History

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 :

D:\07-Logiciels\20-FIN65\fin65_mobile

Copie/remplace depuis ce ZIP :

pubspec.yaml
lib\
README_MOBILE_OFFLINE_SQLITE.md

Puis lance :

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.

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 :

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 :

LocaleDataException: Locale data has not been initialized

Le fichier lib/main.dart initialise maintenant les données de formatage :

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.