Skip to content

Commit 9569699

Browse files
committed
subscription_list: Show muted streams as faded in streams list
Fixes: zulip#424
1 parent cacae0e commit 9569699

File tree

2 files changed

+65
-21
lines changed

2 files changed

+65
-21
lines changed

lib/widgets/subscription_list.dart

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -218,28 +218,33 @@ class SubscriptionItem extends StatelessWidget {
218218
},
219219
child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [
220220
const SizedBox(width: 16),
221-
Padding(
222-
padding: const EdgeInsets.symmetric(vertical: 11),
223-
child: Icon(size: 18, color: swatch.iconOnPlainBackground,
224-
iconDataForStream(subscription))),
225-
const SizedBox(width: 5),
226221
Expanded(
227-
child: Padding(
228-
padding: const EdgeInsets.symmetric(vertical: 10),
229-
// TODO(design): unclear whether bold text is applied to all subscriptions
230-
// or only those with unreads:
231-
// https://github.com/zulip/zulip-flutter/pull/397#pullrequestreview-1742524205
232-
child: Text(
233-
style: const TextStyle(
234-
fontSize: 18,
235-
height: (20 / 18),
236-
// TODO(#95) need dark-theme color
237-
color: Color(0xFF262626),
238-
).merge(weightVariableTextStyle(context,
239-
wght: hasUnreads ? 600 : null)),
240-
maxLines: 1,
241-
overflow: TextOverflow.ellipsis,
242-
subscription.name))),
222+
child: Opacity(
223+
opacity: subscription.isMuted ? 0.55 : 1,
224+
child: Row(
225+
children: [
226+
Padding(
227+
padding: const EdgeInsets.symmetric(vertical: 11),
228+
child: Icon(size: 18, color: swatch.iconOnPlainBackground,
229+
iconDataForStream(subscription))),
230+
const SizedBox(width: 5),
231+
Expanded(
232+
child: Padding(
233+
padding: const EdgeInsets.symmetric(vertical: 10),
234+
// TODO(design): unclear whether bold text is applied to all subscriptions
235+
// or only those with unreads:
236+
// https://github.com/zulip/zulip-flutter/pull/397#pullrequestreview-1742524205
237+
child: Text(
238+
style: const TextStyle(
239+
fontSize: 18,
240+
height: (20 / 18),
241+
// TODO(#95) need dark-theme color
242+
color: Color(0xFF262626),
243+
).merge(weightVariableTextStyle(context,
244+
wght: hasUnreads ? 600 : null)),
245+
maxLines: 1,
246+
overflow: TextOverflow.ellipsis,
247+
subscription.name)))]))),
243248
if (unreadCount > 0) ...[
244249
const SizedBox(width: 12),
245250
// TODO(#384) show @-mention indicator when it applies

test/widgets/subscription_list_test.dart

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,4 +202,43 @@ void main() {
202202
check(tester.widget<UnreadCountBadge>(find.byType(UnreadCountBadge)).backgroundColor)
203203
.equals(swatch);
204204
});
205+
206+
testWidgets('muted streams are displayed as faded', (tester) async {
207+
final stream1 = eg.stream(name: 'Stream 1');
208+
final stream2 = eg.stream(name: 'Stream 2');
209+
final unreadMsgs = eg.unreadMsgs(streams: [
210+
UnreadStreamSnapshot(streamId: stream1.streamId, topic: 'a', unreadMessageIds: [1, 2]),
211+
UnreadStreamSnapshot(streamId: stream2.streamId, topic: 'b', unreadMessageIds: [3]),
212+
]);
213+
await setupStreamListPage(tester,
214+
subscriptions: [
215+
eg.subscription(stream1, isMuted: true),
216+
eg.subscription(stream2, isMuted: false)
217+
],
218+
userTopics: [
219+
UserTopicItem(
220+
streamId: stream1.streamId,
221+
topicName: 'a',
222+
lastUpdated: 1234567890,
223+
visibilityPolicy: UserTopicVisibilityPolicy.unmuted,
224+
),
225+
UserTopicItem(
226+
streamId: stream2.streamId,
227+
topicName: 'b',
228+
lastUpdated: 1234567890,
229+
visibilityPolicy: UserTopicVisibilityPolicy.unmuted,
230+
),
231+
],
232+
unreadMsgs: unreadMsgs);
233+
234+
final stream1Finder = find.text('Stream 1');
235+
final stream1Opacity = tester.widget<Opacity>(
236+
find.ancestor(of: stream1Finder, matching: find.byType(Opacity))).opacity;
237+
check(stream1Opacity).equals(0.55);
238+
239+
final stream2Finder = find.text('Stream 2');
240+
final stream2Opacity = tester.widget<Opacity>(
241+
find.ancestor(of: stream2Finder, matching: find.byType(Opacity))).opacity;
242+
check(stream2Opacity).equals(1.0);
243+
});
205244
}

0 commit comments

Comments
 (0)