From 773cf17da0a51931067b9f2b734a50835e57e002 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Mon, 11 May 2020 13:50:13 +0200 Subject: [PATCH] Highlight active user / group in memberships panel --- lib/ui/routes/main_route/main_route.dart | 4 +- lib/ui/routes/main_route/tablet_route.dart | 10 ++--- .../tablet_mode/memberships_panel.dart | 45 ++++++++++++++----- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/lib/ui/routes/main_route/main_route.dart b/lib/ui/routes/main_route/main_route.dart index 16a64d6..3cfd891 100644 --- a/lib/ui/routes/main_route/main_route.dart +++ b/lib/ui/routes/main_route/main_route.dart @@ -99,7 +99,9 @@ abstract class MainController extends State { /// Open a specific group page specified by its [groupID] void openGroup(int groupID) => pushPage(PageInfo( - type: PageType.GROUP_PAGE, child: GroupPageScreen(groupID: groupID))); + type: PageType.GROUP_PAGE, + child: GroupPageScreen(groupID: groupID), + id: groupID)); /// Display the list of friends of current user void openFriendsList() => pushPage( diff --git a/lib/ui/routes/main_route/tablet_route.dart b/lib/ui/routes/main_route/tablet_route.dart index 4fa9186..2031bf9 100644 --- a/lib/ui/routes/main_route/tablet_route.dart +++ b/lib/ui/routes/main_route/tablet_route.dart @@ -66,17 +66,17 @@ class _TabletRouteState extends MainController { Container(height: 10), GlobalSearchField(), Container(height: 10), - Expanded(child: MembershipsPanel()) + Expanded(child: MembershipsPanel(currentPage: currentPage)) ], ), ), ); Widget _buildRightPane() => Container( - key: currentPage.key, - width: MediaQuery.of(context).size.width - _SideBarSize, - child: currentPage.child, - ); + key: currentPage.key, + width: MediaQuery.of(context).size.width - _SideBarSize, + child: currentPage.child, + ); @override void pushPage(PageInfo page) { diff --git a/lib/ui/widgets/tablet_mode/memberships_panel.dart b/lib/ui/widgets/tablet_mode/memberships_panel.dart index 50d12c0..27c4236 100644 --- a/lib/ui/widgets/tablet_mode/memberships_panel.dart +++ b/lib/ui/widgets/tablet_mode/memberships_panel.dart @@ -9,6 +9,7 @@ import 'package:comunic/lists/users_list.dart'; import 'package:comunic/models/friend.dart'; import 'package:comunic/models/membership.dart'; import 'package:comunic/ui/routes/main_route/main_route.dart'; +import 'package:comunic/ui/routes/main_route/page_info.dart'; import 'package:comunic/ui/widgets/account_image_widget.dart'; import 'package:comunic/ui/widgets/group_icon_widget.dart'; import 'package:comunic/ui/widgets/group_membership_widget.dart'; @@ -23,6 +24,14 @@ import 'package:flutter/material.dart'; /// @author Pierre Hubert class MembershipsPanel extends StatefulWidget { + final PageInfo currentPage; + + const MembershipsPanel({ + Key key, + @required this.currentPage, + }) : assert(currentPage != null), + super(key: key); + @override _MembershipsPanelState createState() => _MembershipsPanelState(); } @@ -127,11 +136,17 @@ class _MembershipsPanelState extends SafeState { style: TextStyle(color: connected ? Colors.green : null), ); - return ListTile( - leading: AccountImageWidget(user: user, width: _MembershipIconsWidth), - title: Text(user.displayName), - subtitle: subtitle, - onTap: () => MainController.of(context).openUserPage(user.id), + return Container( + color: widget.currentPage.type == PageType.USER_PAGE && + widget.currentPage.id == user.id + ? Colors.grey.shade800 + : null, + child: ListTile( + leading: AccountImageWidget(user: user, width: _MembershipIconsWidth), + title: Text(user.displayName), + subtitle: subtitle, + onTap: () => MainController.of(context).openUserPage(user.id), + ), ); } @@ -150,14 +165,20 @@ class _MembershipsPanelState extends SafeState { subtitle = Text(diffTimeFromNowToStr(membership.lastActive)); } - return ListTile( - leading: GroupIcon( - group: group, - width: _MembershipIconsWidth, + return Container( + color: widget.currentPage.type == PageType.GROUP_PAGE && + widget.currentPage.id == group.id + ? Colors.grey.shade800 + : null, + child: ListTile( + leading: GroupIcon( + group: group, + width: _MembershipIconsWidth, + ), + title: Text(group.displayName), + subtitle: subtitle, + onTap: () => MainController.of(context).openGroup(group.id), ), - title: Text(group.displayName), - subtitle: subtitle, - onTap: () => MainController.of(context).openGroup(group.id), ); }