Skip to content

Commit 1738b33

Browse files
committed
msglist: Show stream privacy icon in app bar
This serves as a demo of our custom icon font #200.
1 parent 736993f commit 1738b33

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

lib/widgets/message_list.dart

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import '../model/store.dart';
99
import 'action_sheet.dart';
1010
import 'compose_box.dart';
1111
import 'content.dart';
12+
import 'icons.dart';
1213
import 'page.dart';
1314
import 'sticky_header.dart';
1415
import 'store.dart';
@@ -69,6 +70,26 @@ class MessageListAppBarTitle extends StatelessWidget {
6970

7071
final Narrow narrow;
7172

73+
Widget _buildStreamRow(ZulipStream? stream, String text) {
74+
final icon = switch (stream) {
75+
ZulipStream(isWebPublic: true) => ZulipIcons.globe,
76+
ZulipStream(inviteOnly: true) => ZulipIcons.lock,
77+
ZulipStream() => ZulipIcons.hash_sign,
78+
null => null, // A null [Icon.icon] makes a blank space.
79+
};
80+
return Row(
81+
crossAxisAlignment: CrossAxisAlignment.baseline,
82+
textBaseline: TextBaseline.alphabetic,
83+
children: [
84+
Padding(
85+
// TODO(design): The vertical alignment of the stream privacy icon is ad hoc and eyeballed.
86+
padding: const EdgeInsets.only(bottom: 4),
87+
child: Icon(size: 16, icon)),
88+
const SizedBox(width: 8),
89+
Text(text),
90+
]);
91+
}
92+
7293
@override
7394
Widget build(BuildContext context) {
7495
switch (narrow) {
@@ -77,13 +98,15 @@ class MessageListAppBarTitle extends StatelessWidget {
7798

7899
case StreamNarrow(:var streamId):
79100
final store = PerAccountStoreWidget.of(context);
80-
final streamName = store.streams[streamId]?.name ?? '(unknown stream)';
81-
return Text("#$streamName"); // TODO show stream privacy icon
101+
final stream = store.streams[streamId];
102+
final streamName = stream?.name ?? '(unknown stream)';
103+
return _buildStreamRow(stream, streamName);
82104

83105
case TopicNarrow(:var streamId, :var topic):
84106
final store = PerAccountStoreWidget.of(context);
85-
final streamName = store.streams[streamId]?.name ?? '(unknown stream)';
86-
return Text("#$streamName > $topic"); // TODO show stream privacy icon; format on two lines
107+
final stream = store.streams[streamId];
108+
final streamName = stream?.name ?? '(unknown stream)';
109+
return _buildStreamRow(stream, "$streamName > $topic");
87110

88111
case DmNarrow(:var otherRecipientIds):
89112
final store = PerAccountStoreWidget.of(context);

0 commit comments

Comments
 (0)