diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index 7c4abab8..1944f9fa 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -34,6 +34,12 @@ class SettingsController extends State { bool crossSigningCached; Future megolmBackupCachedFuture; bool megolmBackupCached; + bool profileUpdated = false; + + void updateProfile() => setState(() { + profileUpdated = true; + profile = profileFuture = null; + }); void logoutAction() async { if (await showOkCancelAlertDialog( @@ -186,30 +192,29 @@ class SettingsController extends State { matrix.client.setDisplayName(matrix.client.userID, input.single), ); if (success.error == null) { - setState(() { - profileFuture = null; - profile = null; - }); + updateProfile(); } } void setAvatarAction() async { - final action = await showConfirmationDialog( - context: context, - title: L10n.of(context).pleaseChoose, - actions: [ - AlertDialogAction( - key: AvatarAction.change, - label: L10n.of(context).changeYourAvatar, - isDefaultAction: true, - ), - AlertDialogAction( - key: AvatarAction.remove, - label: L10n.of(context).removeYourAvatar, - isDestructiveAction: true, - ), - ], - ); + final action = profile?.avatar == null + ? AvatarAction.change + : await showConfirmationDialog( + context: context, + title: L10n.of(context).pleaseChoose, + actions: [ + AlertDialogAction( + key: AvatarAction.change, + label: L10n.of(context).changeYourAvatar, + isDefaultAction: true, + ), + AlertDialogAction( + key: AvatarAction.remove, + label: L10n.of(context).removeYourAvatar, + isDestructiveAction: true, + ), + ], + ); if (action == null) return; final matrix = Matrix.of(context); if (action == AvatarAction.remove) { @@ -218,10 +223,7 @@ class SettingsController extends State { future: () => matrix.client.setAvatarUrl(matrix.client.userID, null), ); if (success.error == null) { - setState(() { - profileFuture = null; - profile = null; - }); + updateProfile(); } return; } @@ -251,10 +253,7 @@ class SettingsController extends State { future: () => matrix.client.setAvatar(file), ); if (success.error == null) { - setState(() { - profileFuture = null; - profile = null; - }); + updateProfile(); } } @@ -391,8 +390,8 @@ class SettingsController extends State { profileFuture ??= client .getProfileFromUserId( client.userID, - cache: false, - getFromRooms: false, + cache: !profileUpdated, + getFromRooms: !profileUpdated, ) .then((p) { if (mounted) setState(() => profile = p);