@@ -47,15 +47,15 @@ void showMessageActionSheet({required BuildContext context, required Message mes
47
47
48
48
final optionButtons = [
49
49
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),
52
52
if (isComposeBoxOffered)
53
- QuoteAndReplyButton (message: message, messageListContext : context),
53
+ QuoteAndReplyButton (message: message, pageContext : context),
54
54
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),
59
59
];
60
60
61
61
showModalBottomSheet <void >(
@@ -94,24 +94,27 @@ abstract class MessageActionSheetMenuItemButton extends StatelessWidget {
94
94
MessageActionSheetMenuItemButton ({
95
95
super .key,
96
96
required this .message,
97
- required this .messageListContext ,
98
- }) : assert (messageListContext .findAncestorWidgetOfExactType <MessageListPage >() != null );
97
+ required this .pageContext ,
98
+ }) : assert (pageContext .findAncestorWidgetOfExactType <MessageListPage >() != null );
99
99
100
100
IconData get icon;
101
101
String label (ZulipLocalizations zulipLocalizations);
102
102
void onPressed (BuildContext context);
103
103
104
104
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;
106
109
107
110
/// The [MessageListPageState] this action sheet was triggered from.
108
111
///
109
112
/// Uses the inefficient [BuildContext.findAncestorStateOfType] ;
110
113
/// don't call this in a build method.
111
114
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 );
115
118
}
116
119
117
120
@override
@@ -166,7 +169,7 @@ class AddThumbsUpButton extends MessageActionSheetMenuItemButton {
166
169
AddThumbsUpButton ({
167
170
super .key,
168
171
required super .message,
169
- required super .messageListContext ,
172
+ required super .pageContext ,
170
173
});
171
174
172
175
@override IconData get icon => ZulipIcons .smile;
@@ -180,14 +183,14 @@ class AddThumbsUpButton extends MessageActionSheetMenuItemButton {
180
183
Navigator .of (context).pop ();
181
184
String ? errorMessage;
182
185
try {
183
- await addReaction (PerAccountStoreWidget .of (messageListContext ).connection,
186
+ await addReaction (PerAccountStoreWidget .of (pageContext ).connection,
184
187
messageId: message.id,
185
188
reactionType: ReactionType .unicodeEmoji,
186
189
emojiCode: '1f44d' ,
187
190
emojiName: '+1' ,
188
191
);
189
192
} catch (e) {
190
- if (! messageListContext .mounted) return ;
193
+ if (! pageContext .mounted) return ;
191
194
192
195
switch (e) {
193
196
case ZulipApiException ():
@@ -207,7 +210,7 @@ class StarButton extends MessageActionSheetMenuItemButton {
207
210
StarButton ({
208
211
super .key,
209
212
required super .message,
210
- required super .messageListContext ,
213
+ required super .pageContext ,
211
214
});
212
215
213
216
@override IconData get icon => _isStarred ? ZulipIcons .star_filled : ZulipIcons .star;
@@ -223,17 +226,17 @@ class StarButton extends MessageActionSheetMenuItemButton {
223
226
224
227
@override void onPressed (BuildContext context) async {
225
228
Navigator .of (context).pop ();
226
- final zulipLocalizations = ZulipLocalizations .of (messageListContext );
229
+ final zulipLocalizations = ZulipLocalizations .of (pageContext );
227
230
final op = message.flags.contains (MessageFlag .starred)
228
231
? UpdateMessageFlagsOp .remove
229
232
: UpdateMessageFlagsOp .add;
230
233
231
234
try {
232
- final connection = PerAccountStoreWidget .of (messageListContext ).connection;
235
+ final connection = PerAccountStoreWidget .of (pageContext ).connection;
233
236
await updateMessageFlags (connection, messages: [message.id],
234
237
op: op, flag: MessageFlag .starred);
235
238
} catch (e) {
236
- if (! messageListContext .mounted) return ;
239
+ if (! pageContext .mounted) return ;
237
240
238
241
String ? errorMessage;
239
242
switch (e) {
@@ -244,7 +247,7 @@ class StarButton extends MessageActionSheetMenuItemButton {
244
247
default :
245
248
}
246
249
247
- showErrorDialog (context: messageListContext ,
250
+ showErrorDialog (context: pageContext ,
248
251
title: switch (op) {
249
252
UpdateMessageFlagsOp .remove => zulipLocalizations.errorUnstarMessageFailedTitle,
250
253
UpdateMessageFlagsOp .add => zulipLocalizations.errorStarMessageFailedTitle,
@@ -305,7 +308,7 @@ class QuoteAndReplyButton extends MessageActionSheetMenuItemButton {
305
308
QuoteAndReplyButton ({
306
309
super .key,
307
310
required super .message,
308
- required super .messageListContext ,
311
+ required super .pageContext ,
309
312
});
310
313
311
314
@override IconData get icon => ZulipIcons .format_quote;
@@ -319,7 +322,7 @@ class QuoteAndReplyButton extends MessageActionSheetMenuItemButton {
319
322
// Close the message action sheet. We'll show the request progress
320
323
// in the compose-box content input with a "[Quoting…]" placeholder.
321
324
Navigator .of (context).pop ();
322
- final zulipLocalizations = ZulipLocalizations .of (messageListContext );
325
+ final zulipLocalizations = ZulipLocalizations .of (pageContext );
323
326
324
327
// This will be null only if the compose box disappeared after the
325
328
// message action sheet opened, and before "Quote and reply" was pressed.
@@ -334,24 +337,24 @@ class QuoteAndReplyButton extends MessageActionSheetMenuItemButton {
334
337
topicController.value = TextEditingValue (text: message.topic);
335
338
}
336
339
final tag = composeBoxController.contentController
337
- .registerQuoteAndReplyStart (PerAccountStoreWidget .of (messageListContext ),
340
+ .registerQuoteAndReplyStart (PerAccountStoreWidget .of (pageContext ),
338
341
message: message,
339
342
);
340
343
341
344
final rawContent = await fetchRawContentWithFeedback (
342
- context: messageListContext ,
345
+ context: pageContext ,
343
346
messageId: message.id,
344
347
errorDialogTitle: zulipLocalizations.errorQuotationFailed,
345
348
);
346
349
347
- if (! messageListContext .mounted) return ;
350
+ if (! pageContext .mounted) return ;
348
351
349
352
// This will be null only if the compose box disappeared during the
350
353
// quotation request. Currently a compose box can't ever disappear,
351
354
// so this is impossible.
352
355
composeBoxController = findMessageListPage ().composeBoxController! ;
353
356
composeBoxController.contentController
354
- .registerQuoteAndReplyEnd (PerAccountStoreWidget .of (messageListContext ), tag,
357
+ .registerQuoteAndReplyEnd (PerAccountStoreWidget .of (pageContext ), tag,
355
358
message: message,
356
359
rawContent: rawContent,
357
360
);
@@ -365,7 +368,7 @@ class MarkAsUnreadButton extends MessageActionSheetMenuItemButton {
365
368
MarkAsUnreadButton ({
366
369
super .key,
367
370
required super .message,
368
- required super .messageListContext ,
371
+ required super .pageContext ,
369
372
required this .narrow,
370
373
});
371
374
@@ -380,15 +383,15 @@ class MarkAsUnreadButton extends MessageActionSheetMenuItemButton {
380
383
381
384
@override void onPressed (BuildContext context) async {
382
385
Navigator .of (context).pop ();
383
- unawaited (markNarrowAsUnreadFromMessage (messageListContext , message, narrow));
386
+ unawaited (markNarrowAsUnreadFromMessage (pageContext , message, narrow));
384
387
}
385
388
}
386
389
387
390
class CopyMessageTextButton extends MessageActionSheetMenuItemButton {
388
391
CopyMessageTextButton ({
389
392
super .key,
390
393
required super .message,
391
- required super .messageListContext ,
394
+ required super .pageContext ,
392
395
});
393
396
394
397
@override IconData get icon => ZulipIcons .copy;
@@ -403,19 +406,19 @@ class CopyMessageTextButton extends MessageActionSheetMenuItemButton {
403
406
// but hopefully it won't take long at all, and
404
407
// fetchRawContentWithFeedback has a TODO for giving feedback if it does.
405
408
Navigator .of (context).pop ();
406
- final zulipLocalizations = ZulipLocalizations .of (messageListContext );
409
+ final zulipLocalizations = ZulipLocalizations .of (pageContext );
407
410
408
411
final rawContent = await fetchRawContentWithFeedback (
409
- context: messageListContext ,
412
+ context: pageContext ,
410
413
messageId: message.id,
411
414
errorDialogTitle: zulipLocalizations.errorCopyingFailed,
412
415
);
413
416
414
417
if (rawContent == null ) return ;
415
418
416
- if (! messageListContext .mounted) return ;
419
+ if (! pageContext .mounted) return ;
417
420
418
- copyWithPopup (context: messageListContext ,
421
+ copyWithPopup (context: pageContext ,
419
422
successContent: Text (zulipLocalizations.successMessageTextCopied),
420
423
data: ClipboardData (text: rawContent));
421
424
}
@@ -425,7 +428,7 @@ class CopyMessageLinkButton extends MessageActionSheetMenuItemButton {
425
428
CopyMessageLinkButton ({
426
429
super .key,
427
430
required super .message,
428
- required super .messageListContext ,
431
+ required super .pageContext ,
429
432
});
430
433
431
434
@override IconData get icon => Icons .link;
@@ -437,16 +440,16 @@ class CopyMessageLinkButton extends MessageActionSheetMenuItemButton {
437
440
438
441
@override void onPressed (BuildContext context) {
439
442
Navigator .of (context).pop ();
440
- final zulipLocalizations = ZulipLocalizations .of (messageListContext );
443
+ final zulipLocalizations = ZulipLocalizations .of (pageContext );
441
444
442
- final store = PerAccountStoreWidget .of (messageListContext );
445
+ final store = PerAccountStoreWidget .of (pageContext );
443
446
final messageLink = narrowLink (
444
447
store,
445
448
SendableNarrow .ofMessage (message, selfUserId: store.selfUserId),
446
449
nearMessageId: message.id,
447
450
);
448
451
449
- copyWithPopup (context: messageListContext ,
452
+ copyWithPopup (context: pageContext ,
450
453
successContent: Text (zulipLocalizations.successMessageLinkCopied),
451
454
data: ClipboardData (text: messageLink.toString ()));
452
455
}
@@ -456,7 +459,7 @@ class ShareButton extends MessageActionSheetMenuItemButton {
456
459
ShareButton ({
457
460
super .key,
458
461
required super .message,
459
- required super .messageListContext ,
462
+ required super .pageContext ,
460
463
});
461
464
462
465
@override
@@ -479,17 +482,17 @@ class ShareButton extends MessageActionSheetMenuItemButton {
479
482
// `showMessageActionSheet` call) and cover a large part of the
480
483
// share sheet.
481
484
Navigator .of (context).pop ();
482
- final zulipLocalizations = ZulipLocalizations .of (messageListContext );
485
+ final zulipLocalizations = ZulipLocalizations .of (pageContext );
483
486
484
487
final rawContent = await fetchRawContentWithFeedback (
485
- context: messageListContext ,
488
+ context: pageContext ,
486
489
messageId: message.id,
487
490
errorDialogTitle: zulipLocalizations.errorSharingFailed,
488
491
);
489
492
490
493
if (rawContent == null ) return ;
491
494
492
- if (! messageListContext .mounted) return ;
495
+ if (! pageContext .mounted) return ;
493
496
494
497
// TODO: to support iPads, we're asked to give a
495
498
// `sharePositionOrigin` param, or risk crashing / hanging:
@@ -502,8 +505,8 @@ class ShareButton extends MessageActionSheetMenuItemButton {
502
505
// The plugin isn't very helpful: "The status can not be determined".
503
506
// Until we learn otherwise, assume something wrong happened.
504
507
case ShareResultStatus .unavailable:
505
- if (! messageListContext .mounted) return ;
506
- showErrorDialog (context: messageListContext ,
508
+ if (! pageContext .mounted) return ;
509
+ showErrorDialog (context: pageContext ,
507
510
title: zulipLocalizations.errorSharingFailed);
508
511
case ShareResultStatus .success:
509
512
case ShareResultStatus .dismissed:
0 commit comments