Skip to content

Commit 69bd01f

Browse files
committed
action_sheet [nfc]: Make mute/etc buttons with fewer indirections
This makes it a bit more transparent what each of these cases is doing, by having fewer local abstractions with their own names.
1 parent 8bf5d3e commit 69bd01f

File tree

1 file changed

+22
-28
lines changed

1 file changed

+22
-28
lines changed

lib/widgets/action_sheet.dart

+22-28
Original file line numberDiff line numberDiff line change
@@ -155,47 +155,34 @@ void showTopicActionSheet(BuildContext context, {
155155
}) {
156156
final store = PerAccountStoreWidget.of(context);
157157
final channelMuted = store.subscriptions[channelId]?.isMuted;
158-
final visibilityPolicy = store.topicVisibilityPolicy(channelId, topic);
159-
160-
final narrow = TopicNarrow(channelId, topic);
161-
UserTopicUpdateButton button(UserTopicVisibilityPolicy to) {
162-
return UserTopicUpdateButton(
163-
currentVisibilityPolicy: visibilityPolicy,
164-
newVisibilityPolicy: to,
165-
narrow: narrow,
166-
pageContext: context);
167-
}
168158

169-
final mute = button(UserTopicVisibilityPolicy.muted);
170-
final unmute = button(UserTopicVisibilityPolicy.none);
171-
final unmuteInMutedChannel = button(UserTopicVisibilityPolicy.unmuted);
172-
final follow = button(UserTopicVisibilityPolicy.followed);
173-
final unfollow = button(UserTopicVisibilityPolicy.none);
159+
final optionButtons = <ActionSheetMenuItemButton>[];
174160

175161
// TODO(server-7): simplify this condition away
176162
final supportsUnmutingTopics = store.connection.zulipFeatureLevel! >= 170;
177163
// TODO(server-8): simplify this condition away
178164
final supportsFollowingTopics = store.connection.zulipFeatureLevel! >= 219;
179165

180-
final optionButtons = <ActionSheetMenuItemButton>[];
166+
final visibilityOptions = <UserTopicVisibilityPolicy>[];
167+
final visibilityPolicy = store.topicVisibilityPolicy(channelId, topic);
181168
if (channelMuted != null && !channelMuted) {
182169
// Channel is subscribed and not muted.
183170
switch (visibilityPolicy) {
184171
case UserTopicVisibilityPolicy.muted:
185-
optionButtons.add(unmute);
172+
visibilityOptions.add(UserTopicVisibilityPolicy.none);
186173
if (supportsFollowingTopics) {
187-
optionButtons.add(follow);
174+
visibilityOptions.add(UserTopicVisibilityPolicy.followed);
188175
}
189176
case UserTopicVisibilityPolicy.none:
190177
case UserTopicVisibilityPolicy.unmuted:
191-
optionButtons.add(mute);
178+
visibilityOptions.add(UserTopicVisibilityPolicy.muted);
192179
if (supportsFollowingTopics) {
193-
optionButtons.add(follow);
180+
visibilityOptions.add(UserTopicVisibilityPolicy.followed);
194181
}
195182
case UserTopicVisibilityPolicy.followed:
196-
optionButtons.add(mute);
183+
visibilityOptions.add(UserTopicVisibilityPolicy.muted);
197184
if (supportsFollowingTopics) {
198-
optionButtons.add(unfollow);
185+
visibilityOptions.add(UserTopicVisibilityPolicy.none);
199186
}
200187
case UserTopicVisibilityPolicy.unknown:
201188
// TODO(#1074): This should be unreachable as we keep `unknown` out of
@@ -208,19 +195,19 @@ void showTopicActionSheet(BuildContext context, {
208195
switch (visibilityPolicy) {
209196
case UserTopicVisibilityPolicy.none:
210197
case UserTopicVisibilityPolicy.muted:
211-
optionButtons.add(unmuteInMutedChannel);
198+
visibilityOptions.add(UserTopicVisibilityPolicy.unmuted);
212199
if (supportsFollowingTopics) {
213-
optionButtons.add(follow);
200+
visibilityOptions.add(UserTopicVisibilityPolicy.followed);
214201
}
215202
case UserTopicVisibilityPolicy.unmuted:
216-
optionButtons.add(mute);
203+
visibilityOptions.add(UserTopicVisibilityPolicy.muted);
217204
if (supportsFollowingTopics) {
218-
optionButtons.add(follow);
205+
visibilityOptions.add(UserTopicVisibilityPolicy.followed);
219206
}
220207
case UserTopicVisibilityPolicy.followed:
221-
optionButtons.add(mute);
208+
visibilityOptions.add(UserTopicVisibilityPolicy.muted);
222209
if (supportsFollowingTopics) {
223-
optionButtons.add(unfollow);
210+
visibilityOptions.add(UserTopicVisibilityPolicy.none);
224211
}
225212
case UserTopicVisibilityPolicy.unknown:
226213
// TODO(#1074): This should be unreachable as we keep `unknown` out of
@@ -231,6 +218,13 @@ void showTopicActionSheet(BuildContext context, {
231218
} else {
232219
// Not subscribed to the channel; there is no user topic change to be made.
233220
}
221+
optionButtons.addAll(visibilityOptions.map((to) {
222+
return UserTopicUpdateButton(
223+
currentVisibilityPolicy: visibilityPolicy,
224+
newVisibilityPolicy: to,
225+
narrow: TopicNarrow(channelId, topic),
226+
pageContext: context);
227+
}));
234228

235229
if (optionButtons.isEmpty) {
236230
// TODO(a11y): This case makes a no-op gesture handler; as a consequence,

0 commit comments

Comments
 (0)