Résumé du correctif inter-appareils
Avatar (avatar_providers.dart) :
- re-validation auprès de Cesium+ une fois par session (au lieu d’attendre 24 h) ;
- re-validation au (re)passage online ;
- compare-and-swap → aucun clignotement, et une erreur réseau n’efface jamais une photo.
Profil (description, ville, réseaux, tags, nom) :
- nouveau onlineReconnectCountProvider (compteur qui s’incrémente seulement à la reconnexion) ;
- cesiumProfileProvider le surveille → re-récupération à chaque reconnexion, sans vider l’affichage hors-ligne. Le
badge « profil existe » et le nom Cesium+ se rafraîchissent en cascade.
Les deux suivent la même philosophie (« re-vérifier à la reconnexion, sans clignotement »), avec le mécanisme adapté à
chaque provider.
Limite connue (à garder en tête pour le test)
Pour un portefeuille possédé qui a une image locale sur l’appareil B, DatapodAvatar affiche toujours le fichier local
en priorité. La sync d’avatar marche donc pour le cas courant : appareil B = wallet importé sans avatar local.
**
L’app tourne et reçoit les blocs — et tu as déjà testé un changement d’avatar ! Les logs révèlent un bug réel
(préexistant, hérité de la MR #68) directement dans ce flux :
Avatar successfully uploaded to Cesium+ pod ← l’upload a réussi
Error updating wallet avatar: Bad state: Using “ref” when a widget
is about to or has been unmounted is unsafe. ← puis crash
Ce qui se passe : pendant l’upload réseau (plusieurs secondes), le widget de l’avatar se fait unmount, puis
changeAvatar réutilise le ref du widget (ligne 109, ref.read(avatarCacheProvider.notifier)) → exception. Résultat : le
clearAvatar(forceReload) — c’est-à-dire le rafraîchissement inter-appareils côté émetteur — ne s’exécute jamais, et
la fonction renvoie ‘’.
C’est exactement le genre de bug que le CLAUDE.md demande de corriger à la racine (capturer les dépendances avant les
await, pas de rustine mounted). Je regarde les appelants avant de corriger proprement :
test avec changement d’avatar sur le telephone android
j’ai toujours l’ancienne photo pas celle que je viens de changer
● Information clé dans les logs : ce portefeuille (g1NPyQDAR…) a un avatar local sur le PC
(.gecko/avatars/…png), et en plus ce fichier n’arrive pas à se charger (Unable to load asset).
Deux choses se confirment :
- C’est exactement la limite connue : quand un avatar local existe sur le PC, DatapodAvatar
l’affiche en priorité et ne consulte jamais Cesium+ → ta photo changée sur le téléphone n’apparaît
pas. Mon correctif actuel ne couvre que le cas « pas d’avatar local ».
- Il y a en plus une erreur de chargement du fichier local à élucider.
Laisse-moi investiguer avant de revoir l’approche :
Read 1 file, listed 1 directory (ctrl+o to expand)
● Le fichier local existe bien (664 Ko, modifié aujourd’hui 13:41 — c’est l’avatar que tu as défini
lors de mon premier test sur PC, avant le crash). Donc pour le portefeuille g1NPyQDAR…, le PC a
une image locale → il l’affiche en priorité, jamais Cesium+. C’est la limite connue, confirmée.
Mais l’erreur « Unable to load asset » sur un fichier qui existe est suspecte. Je lis
CachedAvatarImage et le contexte complet de l’erreur :
Read 1 file (ctrl+o to expand)
● CachedAvatarImage charge bien les fichiers via Image.memory (jamais Image.asset). Donc l’erreur «
Unable to load asset: » vient d’ailleurs — quelqu’un passe le chemin du fichier
local à un Image.asset/AssetImage. Je regarde le contexte brut complet de l’erreur et je cherche le
coupable 