@@ 33,6 33,8 @@ String _initials(String name) {
class _BufferListPageState extends State<BufferListPage> {
String? _searchQuery;
+ bool _filterUnread = false;
+
final TextEditingController _searchController = TextEditingController();
final _listKey = GlobalKey();
@@ 77,7 79,9 @@ class _BufferListPageState extends State<BufferListPage> {
}
// Re-compute hasUnreadBuffer
- setState(() {});
+ setState(() {
+ _filterUnread = false;
+ });
}
bool _shouldSuggestNewNetwork() {
@@ 103,6 107,15 @@ class _BufferListPageState extends State<BufferListPage> {
}
buffers = filtered;
}
+ if (_filterUnread) {
+ List<BufferModel> filtered = [];
+ for (var buf in buffers) {
+ if (buf.unreadCount > 0) {
+ filtered.add(buf);
+ }
+ }
+ buffers = filtered;
+ }
Map<String, int> bufferNames = {};
var hasUnreadBuffer = false;
@@ 148,6 161,7 @@ class _BufferListPageState extends State<BufferListPage> {
}
} else {
body = ListView.builder(
+ padding: _filterUnread ? EdgeInsets.only(top: 40) : null,
key: _listKey,
itemCount: buffers.length,
itemBuilder: (context, index) {
@@ 160,6 174,30 @@ class _BufferListPageState extends State<BufferListPage> {
);
}
+ if (_filterUnread) {
+ body = Stack(fit: StackFit.expand, children: [
+ body,
+ Column(children: [
+ Container(
+ padding: const EdgeInsets.all(10),
+ child: FilterChip(
+ label: Wrap(children: [
+ Text('Filtered by unread '),
+ Icon(Icons.close, size: 18),
+ ]),
+ selected: true,
+ showCheckmark: false,
+ onSelected: (value) {
+ setState(() {
+ _filterUnread = value;
+ });
+ },
+ ),
+ ),
+ ]),
+ ]);
+ }
+
return Scaffold(
appBar: AppBar(
leading: _searchQuery != null ? CloseButton() : null,
@@ 195,6 233,11 @@ class _BufferListPageState extends State<BufferListPage> {
case 'mark-all-read':
_markAllBuffersRead();
break;
+ case 'filter-unread':
+ setState(() {
+ _filterUnread = true;
+ });
+ break;
case 'settings':
Navigator.pushNamed(context, SettingsPage.routeName);
break;
@@ 204,6 247,7 @@ class _BufferListPageState extends State<BufferListPage> {
return [
PopupMenuItem(child: Text('New conversation'), value: 'join'),
if (hasUnreadBuffer) PopupMenuItem(child: Text('Mark all as read'), value: 'mark-all-read'),
+ if (hasUnreadBuffer && !_filterUnread) PopupMenuItem(child: Text('Filter unread'), value: 'filter-unread'),
PopupMenuItem(child: Text('Settings'), value: 'settings'),
];
},