diff --git a/lib/pangea/spaces/space_navigation_column.dart b/lib/pangea/spaces/space_navigation_column.dart index 3c04607d7..b6d630870 100644 --- a/lib/pangea/spaces/space_navigation_column.dart +++ b/lib/pangea/spaces/space_navigation_column.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; @@ -16,6 +17,7 @@ import 'package:fluffychat/pangea/analytics_summary/level_analytics_details_cont import 'package:fluffychat/pangea/spaces/space_constants.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/navigation_rail.dart'; +import '../../widgets/matrix.dart'; class SpaceNavigationColumn extends StatefulWidget { final GoRouterState state; @@ -34,6 +36,27 @@ class SpaceNavigationColumnState extends State { bool _hovered = false; bool _expanded = false; Timer? _timer; + Profile? _profile; + + @override + void initState() { + super.initState(); + Matrix.of(context).client.fetchOwnProfile().then((profile) { + if (mounted) { + setState(() { + _profile = profile; + }); + } + }); + } + + void _updateProfile(Profile profile) { + if (mounted) { + setState(() { + _profile = profile; + }); + } + } void _onHoverUpdate(bool hovered) { if (hovered == _hovered) return; @@ -130,6 +153,8 @@ class SpaceNavigationColumnState extends State { _cancelTimer(); setState(() => _expanded = false); }, + profile: _profile, + onProfileUpdate: _updateProfile, ), Container( width: 1, diff --git a/lib/widgets/navigation_rail.dart b/lib/widgets/navigation_rail.dart index cb8b08b6c..3fc977dee 100644 --- a/lib/widgets/navigation_rail.dart +++ b/lib/widgets/navigation_rail.dart @@ -25,6 +25,8 @@ class SpacesNavigationRail extends StatelessWidget { final double railWidth; final bool expanded; final VoidCallback collapse; + final Profile? profile; + final Function(Profile) onProfileUpdate; // Pangea# const SpacesNavigationRail({ @@ -35,7 +37,9 @@ class SpacesNavigationRail extends StatelessWidget { required this.path, required this.railWidth, required this.collapse, + required this.onProfileUpdate, this.expanded = false, + this.profile, // Pangea# super.key, }); @@ -111,23 +115,38 @@ class SpacesNavigationRail extends StatelessWidget { }, backgroundColor: Colors.transparent, icon: FutureBuilder( + // #Pangea + initialData: profile, + // Pangea# future: client.fetchOwnProfile(), - builder: (context, snapshot) => Stack( - alignment: Alignment.center, - children: [ - Material( - color: Colors.transparent, - borderRadius: BorderRadius.circular(99), - child: Avatar( - mxContent: snapshot.data?.avatarUrl, - name: snapshot.data?.displayName ?? - client.userID!.localpart, - size: - width - (isColumnMode ? 32.0 : 24.0), + // #Pangea + // builder: (context, snapshot) => Stack( + builder: (context, snapshot) { + if (snapshot.data?.avatarUrl != null && + snapshot.data?.avatarUrl != + profile?.avatarUrl) { + WidgetsBinding.instance.addPostFrameCallback( + (_) => onProfileUpdate(snapshot.data!), + ); + } + return Stack( + // Pangea# + alignment: Alignment.center, + children: [ + Material( + color: Colors.transparent, + borderRadius: BorderRadius.circular(99), + child: Avatar( + mxContent: snapshot.data?.avatarUrl, + name: snapshot.data?.displayName ?? + client.userID!.localpart, + size: width - + (isColumnMode ? 32.0 : 24.0), + ), ), - ), - ], - ), + ], + ); + }, ), toolTip: L10n.of(context).home, // #Pangea