feat: sort folders and bold unread in mailbox list

INBOX sorts first, Drafts second, remaining folders alphabetically.
Folder names with unread messages are shown in bold.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Thomas Güttler
2026-04-21 17:01:43 +02:00
co-authored by Claude Sonnet 4.6
parent bdc9d3cd5a
commit edd10201f1
+24 -3
View File
@@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import '../../core/models/email.dart';
import '../../core/models/mailbox.dart';
import '../../core/repositories/email_repository.dart';
import '../../di.dart';
@@ -38,15 +39,21 @@ class MailboxListScreen extends ConsumerWidget {
if (!snap.hasData) {
return const Center(child: CircularProgressIndicator());
}
final mailboxes = snap.data!;
final mailboxes = List.of(snap.data!)..sort(_compareMailboxes);
return ListView.builder(
itemCount: mailboxes.length,
itemBuilder: (ctx, i) {
final mb = mailboxes[i];
final hasUnread = mb.unreadCount > 0;
return ListTile(
leading: const Icon(Icons.folder),
title: Text(mb.name),
trailing: mb.unreadCount > 0
title: Text(
mb.name,
style: hasUnread
? const TextStyle(fontWeight: FontWeight.bold)
: null,
),
trailing: hasUnread
? Badge(label: Text('${mb.unreadCount}'))
: null,
onTap: () => context.push(
@@ -137,3 +144,17 @@ class _FailedMutationBanner extends StatelessWidget {
);
}
}
int _mailboxPriority(Mailbox mb) {
final upper = mb.path.toUpperCase();
if (upper == 'INBOX') return 0;
if (upper.contains('DRAFT')) return 1;
return 2;
}
int _compareMailboxes(Mailbox a, Mailbox b) {
final pa = _mailboxPriority(a);
final pb = _mailboxPriority(b);
if (pa != pb) return pa.compareTo(pb);
return a.name.toLowerCase().compareTo(b.name.toLowerCase());
}