Skip to content

Commit e4fecd9

Browse files
committed
channel_list: Sort channels alphabetically
1 parent 6f4e7b3 commit e4fecd9

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

lib/widgets/channel_list.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ class _ChannelListPageState extends State<ChannelListPage> with PerAccountStoreA
3131
Widget build(BuildContext context) {
3232
final store = PerAccountStoreWidget.of(context);
3333
final zulipLocalizations = ZulipLocalizations.of(context);
34-
final streams = store.streams.values.toList();
34+
final streams = store.streams.values.toList()..sort((a, b) {
35+
return a.name.toLowerCase().compareTo(b.name.toLowerCase());
36+
});
3537
return Scaffold(
3638
appBar: AppBar(title: Text(zulipLocalizations.channelListPageTitle)),
3739
body: SafeArea(

test/widgets/channel_list_test.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,29 @@ void main() {
4242
await setupChannelListPage(tester, streams: streams, subscriptions: []);
4343
check(getItemCount()).equals(3);
4444
});
45+
46+
group('list ordering', () {
47+
Iterable<String> listedStreamNames(WidgetTester tester) => tester
48+
.widgetList<ChannelItem>(find.byType(ChannelItem))
49+
.map((e) => e.stream.name);
50+
51+
List<ZulipStream> streamsFromNames(List<String> names) {
52+
return names.map((name) => eg.stream(name: name)).toList();
53+
}
54+
55+
testWidgets('is alphabetically case-insensitive', (tester) async {
56+
final streams = streamsFromNames(['b', 'C', 'A']);
57+
await setupChannelListPage(tester, streams: streams, subscriptions: []);
58+
59+
check(listedStreamNames(tester)).deepEquals(['A', 'b', 'C']);
60+
});
61+
62+
testWidgets('is insensitive of user subscription', (tester) async {
63+
final streams = streamsFromNames(['b', 'c', 'a']);
64+
await setupChannelListPage(tester, streams: streams,
65+
subscriptions: [eg.subscription(streams[0])]);
66+
67+
check(listedStreamNames(tester)).deepEquals(['a', 'b', 'c']);
68+
});
69+
});
4570
}

0 commit comments

Comments
 (0)