Files
fin65-mobile/README_MOBILE_OFFLINE_SQLITE.md
T

146 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.