Correct unread badges for tabs; people first contacts sort option

This commit is contained in:
Serge Tarkovski
2026-02-09 12:56:38 +02:00
parent c320378be1
commit 8668564464
26 changed files with 215 additions and 22 deletions
+13
View File
@@ -99,14 +99,17 @@ const int _actionFilterRepeaters = 6;
const int _actionFilterRooms = 7;
const int _actionToggleUnreadOnly = 8;
const int _actionNewGroup = 9;
const int _actionTogglePrioritizePeople = 10;
class ContactsFilterMenu extends StatelessWidget {
final ContactSortOption sortOption;
final ContactTypeFilter typeFilter;
final bool showUnreadOnly;
final bool prioritizePeople;
final ValueChanged<ContactSortOption> onSortChanged;
final ValueChanged<ContactTypeFilter> onTypeFilterChanged;
final ValueChanged<bool> onUnreadOnlyChanged;
final ValueChanged<bool> onPrioritizePeopleChanged;
final VoidCallback onNewGroup;
const ContactsFilterMenu({
@@ -114,9 +117,11 @@ class ContactsFilterMenu extends StatelessWidget {
required this.sortOption,
required this.typeFilter,
required this.showUnreadOnly,
required this.prioritizePeople,
required this.onSortChanged,
required this.onTypeFilterChanged,
required this.onUnreadOnlyChanged,
required this.onPrioritizePeopleChanged,
required this.onNewGroup,
});
@@ -144,6 +149,11 @@ class ContactsFilterMenu extends StatelessWidget {
label: l10n.listFilter_az,
checked: sortOption == ContactSortOption.name,
),
SortFilterMenuOption(
value: _actionTogglePrioritizePeople,
label: l10n.listFilter_usersFirst,
checked: prioritizePeople,
),
],
),
SortFilterMenuSection(
@@ -192,6 +202,9 @@ class ContactsFilterMenu extends StatelessWidget {
case _actionSortLastSeen:
onSortChanged(ContactSortOption.lastSeen);
break;
case _actionTogglePrioritizePeople:
onPrioritizePeopleChanged(!prioritizePeople);
break;
case _actionFilterAll:
onTypeFilterChanged(ContactTypeFilter.all);
break;
+33 -2
View File
@@ -6,11 +6,15 @@ import '../l10n/l10n.dart';
class QuickSwitchBar extends StatelessWidget {
final int selectedIndex;
final ValueChanged<int> onDestinationSelected;
final int contactsUnreadCount;
final int channelsUnreadCount;
const QuickSwitchBar({
super.key,
required this.selectedIndex,
required this.onDestinationSelected,
this.contactsUnreadCount = 0,
this.channelsUnreadCount = 0,
});
@override
@@ -62,15 +66,30 @@ class QuickSwitchBar extends StatelessWidget {
onDestinationSelected: onDestinationSelected,
destinations: [
NavigationDestination(
icon: const Icon(Icons.people_outline),
icon: _buildIconWithBadge(
const Icon(Icons.people_outline),
contactsUnreadCount,
),
selectedIcon: _buildIconWithBadge(
const Icon(Icons.people),
contactsUnreadCount,
),
label: context.l10n.nav_contacts,
),
NavigationDestination(
icon: const Icon(Icons.tag),
icon: _buildIconWithBadge(
const Icon(Icons.tag),
channelsUnreadCount,
),
selectedIcon: _buildIconWithBadge(
const Icon(Icons.tag),
channelsUnreadCount,
),
label: context.l10n.nav_channels,
),
NavigationDestination(
icon: const Icon(Icons.map_outlined),
selectedIcon: const Icon(Icons.map),
label: context.l10n.nav_map,
),
],
@@ -81,4 +100,16 @@ class QuickSwitchBar extends StatelessWidget {
),
);
}
Widget _buildIconWithBadge(Icon icon, int count) {
if (count <= 0) return icon;
return Badge(
label: Text(
count > 99 ? '99+' : count.toString(),
style: const TextStyle(fontSize: 10),
),
child: icon,
);
}
}