lucid_core_flutter 0.2.0
lucid_core_flutter: ^0.2.0 copied to clipboard
Socle Flutter de LucidForge Africa : client API, authentification Firebase/Supabase, stockage chiffré, thème et widgets réutilisables.
Changelog #
0.2.0 - 2026-09-19 #
0.1.0 - 2026-09-15 #
0.0.1 #
- Client API HTTP (
LucidApiClient) : GET/POST/PUT/PATCH/DELETE, upload multipart, cache-first sur les GET (viaLucidStorageManager), retry automatique sur erreurs transitoires, mapping des erreurs vers la taxonomieLucidAbstractException. - Authentification : implémentations Firebase (
LucidFirebaseAuthService) et Supabase (LucidSupabaseAuthService) deLucidAbstractAuthService. La connexion sociale (Google/Apple) est découplée de tout SDK tiers : l'app hôte fournit les jetons via un callback (LucidOAuthTokens), ce qui garde le plugin léger pour les projets sans connexion sociale. - Correction :
LucidSecureStorage.deleteeffaçait tout le stockage sécurisé au lieu d'une seule clé ; le refresh token partageait la même clé que le token d'accès. - Mise à jour des dépendances majeures (
flutter_secure_storage,local_auth,connectivity_plus,package_info_plus,device_info_plus,permission_handler,share_plus,flutter_local_notifications). - Correction majeure de compatibilité multi-plateforme :
lib.dartexportait inconditionnellement l'implémentation web (dart:js_interop), ce qui cassait la compilation du plugin sur toute plateforme non-web (dont les tests).LucidLogger(fichier + envoi distant) etLucidCacheStorage(persistance disque) utilisaientdart:iosans garde de plateforme ; extraits derrière des implémentations conditionnelles (LucidLogFileSink,LucidFileStore) qui se dégradent proprement sur le web.LucidDeviceInfoUtilsne reconnaissait que Android/iOS (tout le reste retournait "Unknown") ; il reconnaît maintenant aussi Web, Windows, Linux et macOS viadevice_info_plus, sans dépendre dedart:io. - Correction de
LucidConfigHelpers/LucidOverrideConfig: les overrides dynamiques ne s'appliquaient qu'aux clés inconnues (lenoSuchMethodn'était jamais atteint pour une propriété réelle commeappName, déjà définie par les mixins). Introduction deLucidAbstractConfigResolver(core/abstracts/), point d'indirection unique utilisé par tous les mixins de config, queLucidOverrideConfigredéfinit pour donner la priorité aux overrides — sans dupliquer la logique sur chacune des 70+ propriétés.LucidConfigHelpersretourne aussinullproprement (au lieu de lever une exception) pour une propriété dynamique inconnue. - Thème par défaut (
LucidThemes.defaultLight/defaultDark) aligné sur la charte graphique LucidForge Africa (navy#020617, or#D4A017, textes/gris de la palette officielle). LucidCacheStoragechiffre (AES-256-GCM) et compresse (gzip) réellement les entrées persistées sur disque quandLucidCacheConfig.encryptionEnabled/compressionEnabledsont actifs (nouveauLucidCacheCodec, clé générée une fois puis conservée dans le stockage sécurisé). Ces flags étaient déclarés mais totalement ignorés auparavant.- Correction critique :
LucidCacheItem.toMap()plaçait desDateTime/Duration/enum bruts dans la map avantjsonEncode, ce qui faisait plantertoJson()/exportToFile()à chaque appel (persistance disque et export du cache étaient donc cassés). - Correction :
LucidConstants.defaultCountryCodevalait"FR"alors que le reste des valeurs par défaut (localefr_BJ, deviseXOF/F CFA) cible le Bénin ; corrigé en"BJ". - Correction :
LucidEnvironmentConfig.currentvérifiaitkDebugModeavantFLUTTER_ENV=staging, rendant le mode staging inatteignable en debug. - Nettoyage des extensions (
lucid_extensions.dart) : plusieurs méthodes (List.take/skip,num.clamp,TextEditingController.clear) étaient totalement inaccessibles car masquées par des méthodes du même nom déjà déclarées par le type de base — supprimées.num.formatted(séparateur de milliers) pouvait insérer un espace au milieu de la partie décimale pour les nombres à 6+ décimales — corrigé. - Dédoublonnage :
num.lerp/LucidMathUtils.lerpetnum.roundToDecimals/LucidMathUtils.roundToDecimalsétaient deux implémentations indépendantes (avec un comportement différent pourlerp: clampée vs non-clampée) ;num.*délègue maintenant àLucidMathUtils.context.isDarkThemelisaitTheme.of(context)alors quecontext.currentTheme(même extension) litLucidThemeNotifier— deux sources de vérité pouvant diverger ; unifié surcurrentTheme. LucidCacheMixin/LucidServiceCacheMixin:clearClassCache()etdefaultServiceTagsne servaient à rien carcacheValue/cacheOrGetValuene posaient jamais de tag — corrigé, les valeurs sont maintenant taguées.- Première série de widgets (
lib/src/widgets/), tous branchés sur le thème etLucidL10n(pas de texte dupliqué) :LucidApp(câble thème + l10n en un point d'entrée),LucidListManager(liste/grille/carrousel, pull-to-refresh, pagination infinie, un seul widget selonLucidListMode),LucidNavigationManager(bottom bar/rail/drawer permanent/onglets d'app bar/menu déroulant, adaptatif selon la taille d'écran viaLucidNavMode.auto),LucidButton(primaire/secondaire/contour/texte, état de chargement),LucidTextField/.email/.password(validation via les extensionsStringdéjà existantes),LucidEmptyState/LucidErrorState(texte par défaut tiré deLucidL10n, définition unique réutilisée partout, y compris parLucidListManager). - TODO: gestion du cache/storage (migration inter-versions, listing des clés API), reste des widgets (dropdown/sélecteur/popup, cartes).