Initial upload: fin65-mobile

This commit is contained in:
Abderrahim-Mouhcine
2026-08-16 19:59:55 +01:00
commit 46558a5ec8
242 changed files with 16334 additions and 0 deletions
+145
View File
@@ -0,0 +1,145 @@
# 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.