Skip to content

Commit 6b127bf

Browse files
committed
action_sheet [nfc]: Rename pageContext field on button widgets
Most of the ways we use this field (specifically, all the ways we use it other than in findMessageListPage) aren't related to it being the message list in particular. When we add action sheets other than the message action sheet, they'll still need a page context. So prepare the way for those by giving this a name that can generalize.
1 parent 779fb4e commit 6b127bf

File tree

1 file changed

+47
-44
lines changed

1 file changed

+47
-44
lines changed

lib/widgets/action_sheet.dart

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ void showMessageActionSheet({required BuildContext context, required Message mes
4747

4848
final optionButtons = [
4949
if (!hasThumbsUpReactionVote)
50-
AddThumbsUpButton(message: message, messageListContext: context),
51-
StarButton(message: message, messageListContext: context),
50+
AddThumbsUpButton(message: message, pageContext: context),
51+
StarButton(message: message, pageContext: context),
5252
if (isComposeBoxOffered)
53-
QuoteAndReplyButton(message: message, messageListContext: context),
53+
QuoteAndReplyButton(message: message, pageContext: context),
5454
if (showMarkAsUnreadButton)
55-
MarkAsUnreadButton(message: message, messageListContext: context, narrow: narrow),
56-
CopyMessageTextButton(message: message, messageListContext: context),
57-
CopyMessageLinkButton(message: message, messageListContext: context),
58-
ShareButton(message: message, messageListContext: context),
55+
MarkAsUnreadButton(message: message, pageContext: context, narrow: narrow),
56+
CopyMessageTextButton(message: message, pageContext: context),
57+
CopyMessageLinkButton(message: message, pageContext: context),
58+
ShareButton(message: message, pageContext: context),
5959
];
6060

6161
showModalBottomSheet<void>(
@@ -94,24 +94,27 @@ abstract class MessageActionSheetMenuItemButton extends StatelessWidget {
9494
MessageActionSheetMenuItemButton({
9595
super.key,
9696
required this.message,
97-
required this.messageListContext,
98-
}) : assert(messageListContext.findAncestorWidgetOfExactType<MessageListPage>() != null);
97+
required this.pageContext,
98+
}) : assert(pageContext.findAncestorWidgetOfExactType<MessageListPage>() != null);
9999

100100
IconData get icon;
101101
String label(ZulipLocalizations zulipLocalizations);
102102
void onPressed(BuildContext context);
103103

104104
final Message message;
105-
final BuildContext messageListContext;
105+
106+
/// A context within the [MessageListPage] this action sheet was
107+
/// triggered from.
108+
final BuildContext pageContext;
106109

107110
/// The [MessageListPageState] this action sheet was triggered from.
108111
///
109112
/// Uses the inefficient [BuildContext.findAncestorStateOfType];
110113
/// don't call this in a build method.
111114
MessageListPageState findMessageListPage() {
112-
assert(messageListContext.mounted,
113-
'findMessageListPage should be called only when messageListContext is known to still be mounted');
114-
return MessageListPage.ancestorOf(messageListContext);
115+
assert(pageContext.mounted,
116+
'findMessageListPage should be called only when pageContext is known to still be mounted');
117+
return MessageListPage.ancestorOf(pageContext);
115118
}
116119

117120
@override
@@ -166,7 +169,7 @@ class AddThumbsUpButton extends MessageActionSheetMenuItemButton {
166169
AddThumbsUpButton({
167170
super.key,
168171
required super.message,
169-
required super.messageListContext,
172+
required super.pageContext,
170173
});
171174

172175
@override IconData get icon => ZulipIcons.smile;
@@ -180,14 +183,14 @@ class AddThumbsUpButton extends MessageActionSheetMenuItemButton {
180183
Navigator.of(context).pop();
181184
String? errorMessage;
182185
try {
183-
await addReaction(PerAccountStoreWidget.of(messageListContext).connection,
186+
await addReaction(PerAccountStoreWidget.of(pageContext).connection,
184187
messageId: message.id,
185188
reactionType: ReactionType.unicodeEmoji,
186189
emojiCode: '1f44d',
187190
emojiName: '+1',
188191
);
189192
} catch (e) {
190-
if (!messageListContext.mounted) return;
193+
if (!pageContext.mounted) return;
191194

192195
switch (e) {
193196
case ZulipApiException():
@@ -207,7 +210,7 @@ class StarButton extends MessageActionSheetMenuItemButton {
207210
StarButton({
208211
super.key,
209212
required super.message,
210-
required super.messageListContext,
213+
required super.pageContext,
211214
});
212215

213216
@override IconData get icon => _isStarred ? ZulipIcons.star_filled : ZulipIcons.star;
@@ -223,17 +226,17 @@ class StarButton extends MessageActionSheetMenuItemButton {
223226

224227
@override void onPressed(BuildContext context) async {
225228
Navigator.of(context).pop();
226-
final zulipLocalizations = ZulipLocalizations.of(messageListContext);
229+
final zulipLocalizations = ZulipLocalizations.of(pageContext);
227230
final op = message.flags.contains(MessageFlag.starred)
228231
? UpdateMessageFlagsOp.remove
229232
: UpdateMessageFlagsOp.add;
230233

231234
try {
232-
final connection = PerAccountStoreWidget.of(messageListContext).connection;
235+
final connection = PerAccountStoreWidget.of(pageContext).connection;
233236
await updateMessageFlags(connection, messages: [message.id],
234237
op: op, flag: MessageFlag.starred);
235238
} catch (e) {
236-
if (!messageListContext.mounted) return;
239+
if (!pageContext.mounted) return;
237240

238241
String? errorMessage;
239242
switch (e) {
@@ -244,7 +247,7 @@ class StarButton extends MessageActionSheetMenuItemButton {
244247
default:
245248
}
246249

247-
showErrorDialog(context: messageListContext,
250+
showErrorDialog(context: pageContext,
248251
title: switch(op) {
249252
UpdateMessageFlagsOp.remove => zulipLocalizations.errorUnstarMessageFailedTitle,
250253
UpdateMessageFlagsOp.add => zulipLocalizations.errorStarMessageFailedTitle,
@@ -305,7 +308,7 @@ class QuoteAndReplyButton extends MessageActionSheetMenuItemButton {
305308
QuoteAndReplyButton({
306309
super.key,
307310
required super.message,
308-
required super.messageListContext,
311+
required super.pageContext,
309312
});
310313

311314
@override IconData get icon => ZulipIcons.format_quote;
@@ -319,7 +322,7 @@ class QuoteAndReplyButton extends MessageActionSheetMenuItemButton {
319322
// Close the message action sheet. We'll show the request progress
320323
// in the compose-box content input with a "[Quoting…]" placeholder.
321324
Navigator.of(context).pop();
322-
final zulipLocalizations = ZulipLocalizations.of(messageListContext);
325+
final zulipLocalizations = ZulipLocalizations.of(pageContext);
323326

324327
// This will be null only if the compose box disappeared after the
325328
// message action sheet opened, and before "Quote and reply" was pressed.
@@ -334,24 +337,24 @@ class QuoteAndReplyButton extends MessageActionSheetMenuItemButton {
334337
topicController.value = TextEditingValue(text: message.topic);
335338
}
336339
final tag = composeBoxController.contentController
337-
.registerQuoteAndReplyStart(PerAccountStoreWidget.of(messageListContext),
340+
.registerQuoteAndReplyStart(PerAccountStoreWidget.of(pageContext),
338341
message: message,
339342
);
340343

341344
final rawContent = await fetchRawContentWithFeedback(
342-
context: messageListContext,
345+
context: pageContext,
343346
messageId: message.id,
344347
errorDialogTitle: zulipLocalizations.errorQuotationFailed,
345348
);
346349

347-
if (!messageListContext.mounted) return;
350+
if (!pageContext.mounted) return;
348351

349352
// This will be null only if the compose box disappeared during the
350353
// quotation request. Currently a compose box can't ever disappear,
351354
// so this is impossible.
352355
composeBoxController = findMessageListPage().composeBoxController!;
353356
composeBoxController.contentController
354-
.registerQuoteAndReplyEnd(PerAccountStoreWidget.of(messageListContext), tag,
357+
.registerQuoteAndReplyEnd(PerAccountStoreWidget.of(pageContext), tag,
355358
message: message,
356359
rawContent: rawContent,
357360
);
@@ -365,7 +368,7 @@ class MarkAsUnreadButton extends MessageActionSheetMenuItemButton {
365368
MarkAsUnreadButton({
366369
super.key,
367370
required super.message,
368-
required super.messageListContext,
371+
required super.pageContext,
369372
required this.narrow,
370373
});
371374

@@ -380,15 +383,15 @@ class MarkAsUnreadButton extends MessageActionSheetMenuItemButton {
380383

381384
@override void onPressed(BuildContext context) async {
382385
Navigator.of(context).pop();
383-
unawaited(markNarrowAsUnreadFromMessage(messageListContext, message, narrow));
386+
unawaited(markNarrowAsUnreadFromMessage(pageContext, message, narrow));
384387
}
385388
}
386389

387390
class CopyMessageTextButton extends MessageActionSheetMenuItemButton {
388391
CopyMessageTextButton({
389392
super.key,
390393
required super.message,
391-
required super.messageListContext,
394+
required super.pageContext,
392395
});
393396

394397
@override IconData get icon => ZulipIcons.copy;
@@ -403,19 +406,19 @@ class CopyMessageTextButton extends MessageActionSheetMenuItemButton {
403406
// but hopefully it won't take long at all, and
404407
// fetchRawContentWithFeedback has a TODO for giving feedback if it does.
405408
Navigator.of(context).pop();
406-
final zulipLocalizations = ZulipLocalizations.of(messageListContext);
409+
final zulipLocalizations = ZulipLocalizations.of(pageContext);
407410

408411
final rawContent = await fetchRawContentWithFeedback(
409-
context: messageListContext,
412+
context: pageContext,
410413
messageId: message.id,
411414
errorDialogTitle: zulipLocalizations.errorCopyingFailed,
412415
);
413416

414417
if (rawContent == null) return;
415418

416-
if (!messageListContext.mounted) return;
419+
if (!pageContext.mounted) return;
417420

418-
copyWithPopup(context: messageListContext,
421+
copyWithPopup(context: pageContext,
419422
successContent: Text(zulipLocalizations.successMessageTextCopied),
420423
data: ClipboardData(text: rawContent));
421424
}
@@ -425,7 +428,7 @@ class CopyMessageLinkButton extends MessageActionSheetMenuItemButton {
425428
CopyMessageLinkButton({
426429
super.key,
427430
required super.message,
428-
required super.messageListContext,
431+
required super.pageContext,
429432
});
430433

431434
@override IconData get icon => Icons.link;
@@ -437,16 +440,16 @@ class CopyMessageLinkButton extends MessageActionSheetMenuItemButton {
437440

438441
@override void onPressed(BuildContext context) {
439442
Navigator.of(context).pop();
440-
final zulipLocalizations = ZulipLocalizations.of(messageListContext);
443+
final zulipLocalizations = ZulipLocalizations.of(pageContext);
441444

442-
final store = PerAccountStoreWidget.of(messageListContext);
445+
final store = PerAccountStoreWidget.of(pageContext);
443446
final messageLink = narrowLink(
444447
store,
445448
SendableNarrow.ofMessage(message, selfUserId: store.selfUserId),
446449
nearMessageId: message.id,
447450
);
448451

449-
copyWithPopup(context: messageListContext,
452+
copyWithPopup(context: pageContext,
450453
successContent: Text(zulipLocalizations.successMessageLinkCopied),
451454
data: ClipboardData(text: messageLink.toString()));
452455
}
@@ -456,7 +459,7 @@ class ShareButton extends MessageActionSheetMenuItemButton {
456459
ShareButton({
457460
super.key,
458461
required super.message,
459-
required super.messageListContext,
462+
required super.pageContext,
460463
});
461464

462465
@override
@@ -479,17 +482,17 @@ class ShareButton extends MessageActionSheetMenuItemButton {
479482
// `showMessageActionSheet` call) and cover a large part of the
480483
// share sheet.
481484
Navigator.of(context).pop();
482-
final zulipLocalizations = ZulipLocalizations.of(messageListContext);
485+
final zulipLocalizations = ZulipLocalizations.of(pageContext);
483486

484487
final rawContent = await fetchRawContentWithFeedback(
485-
context: messageListContext,
488+
context: pageContext,
486489
messageId: message.id,
487490
errorDialogTitle: zulipLocalizations.errorSharingFailed,
488491
);
489492

490493
if (rawContent == null) return;
491494

492-
if (!messageListContext.mounted) return;
495+
if (!pageContext.mounted) return;
493496

494497
// TODO: to support iPads, we're asked to give a
495498
// `sharePositionOrigin` param, or risk crashing / hanging:
@@ -502,8 +505,8 @@ class ShareButton extends MessageActionSheetMenuItemButton {
502505
// The plugin isn't very helpful: "The status can not be determined".
503506
// Until we learn otherwise, assume something wrong happened.
504507
case ShareResultStatus.unavailable:
505-
if (!messageListContext.mounted) return;
506-
showErrorDialog(context: messageListContext,
508+
if (!pageContext.mounted) return;
509+
showErrorDialog(context: pageContext,
507510
title: zulipLocalizations.errorSharingFailed);
508511
case ShareResultStatus.success:
509512
case ShareResultStatus.dismissed:

0 commit comments

Comments
 (0)