Fix: Profile Picture Mechanics
Branch: fix/pfp-mechanics
Data: 2026-03-19
Cosa cambia
1. Profilo proprio — avatar tappabile con azioni
File modificato: lib/features/profile/screens/profile_screen.dart
- L’avatar nella schermata profilo è ora separato dal
GestureDetectordella card - Tap sull’avatar →
_AvatarOptionsSheet(bottom sheet) con:- Anteprima della foto (se presente)
- “Cambia foto” → image picker (galleria) + upload su Supabase Storage (
avatars/<userId>) - “Rimuovi foto” →
updateProfilePicture(null)(mostrato solo se la pfp è impostata)
- Badge camera sull’avatar per suggerire l’interazione
- Overlay di loading durante l’upload
2. Profilo altrui — long-press fullscreen
File modificato: lib/features/profile/screens/public_profile_screen.dart
- Long-press sull’avatar →
showDialogfullscreen con sfondo nero - Tap ovunque chiude il dialog
- Attivo solo se l’utente ha una pfp (altrimenti nessuna reazione al long-press)
3. Stats row — amici-only
File modificato: lib/features/profile/screens/profile_screen.dart
_buildSocialStatsora mostra solo “Amici” (rimossi Follower/Seguiti)- Coerente con la rimozione già fatta su
public_profile_screen
Architettura
profile_screen.dart
→ GestureDetector(onTap) su avatar
→ showModalBottomSheet(_AvatarOptionsSheet)
→ ImagePicker → Supabase.storage.uploadBinary()
→ authNotifierProvider.updateProfilePicture(url | null)
public_profile_screen.dart
→ GestureDetector(onLongPress) su avatar
→ showDialog(fullscreen Image.network)
Note
- L’upload usa
upsert: truequindi sovrascrive silenziosamente la versione precedente - Il file in Storage ha nome
avatars/<userId>.<ext>— path stabile, URL non cambia - La rimozione chiama solo il DB (
profile_picture = null), non elimina il file da Storage