@@ -24,6 +24,7 @@ import 'emoji_reaction.dart';
2424import 'icons.dart' ;
2525import 'inset_shadow.dart' ;
2626import 'message_list.dart' ;
27+ import 'page.dart' ;
2728import 'store.dart' ;
2829import 'text.dart' ;
2930import 'theme.dart' ;
@@ -163,11 +164,15 @@ class ActionSheetCancelButton extends StatelessWidget {
163164}
164165
165166/// Show a sheet of actions you can take on a topic.
167+ ///
168+ /// Needs a [PageRoot] ancestor.
166169void showTopicActionSheet (BuildContext context, {
167170 required int channelId,
168171 required TopicName topic,
169172}) {
170- final store = PerAccountStoreWidget .of (context);
173+ final pageContext = PageRoot .contextOf (context);
174+
175+ final store = PerAccountStoreWidget .of (pageContext);
171176 final subscription = store.subscriptions[channelId];
172177
173178 final optionButtons = < ActionSheetMenuItemButton > [];
@@ -237,7 +242,7 @@ void showTopicActionSheet(BuildContext context, {
237242 currentVisibilityPolicy: visibilityPolicy,
238243 newVisibilityPolicy: to,
239244 narrow: TopicNarrow (channelId, topic),
240- pageContext: context );
245+ pageContext: pageContext );
241246 }));
242247
243248 if (optionButtons.isEmpty) {
@@ -250,7 +255,7 @@ void showTopicActionSheet(BuildContext context, {
250255 return ;
251256 }
252257
253- _showActionSheet (context , optionButtons: optionButtons);
258+ _showActionSheet (pageContext , optionButtons: optionButtons);
254259}
255260
256261class UserTopicUpdateButton extends ActionSheetMenuItemButton {
@@ -376,33 +381,34 @@ class UserTopicUpdateButton extends ActionSheetMenuItemButton {
376381///
377382/// Must have a [MessageListPage] ancestor.
378383void showMessageActionSheet ({required BuildContext context, required Message message}) {
379- final store = PerAccountStoreWidget .of (context);
384+ final pageContext = PageRoot .contextOf (context);
385+ final store = PerAccountStoreWidget .of (pageContext);
380386
381387 // The UI that's conditioned on this won't live-update during this appearance
382388 // of the action sheet (we avoid calling composeBoxControllerOf in a build
383389 // method; see its doc).
384390 // So we rely on the fact that isComposeBoxOffered for any given message list
385391 // will be constant through the page's life.
386- final messageListPage = MessageListPage .ancestorOf (context );
392+ final messageListPage = MessageListPage .ancestorOf (pageContext );
387393 final isComposeBoxOffered = messageListPage.composeBoxController != null ;
388394
389395 final isMessageRead = message.flags.contains (MessageFlag .read);
390396 final markAsUnreadSupported = store.connection.zulipFeatureLevel! >= 155 ; // TODO(server-6)
391397 final showMarkAsUnreadButton = markAsUnreadSupported && isMessageRead;
392398
393399 final optionButtons = [
394- ReactionButtons (message: message, pageContext: context ),
395- StarButton (message: message, pageContext: context ),
400+ ReactionButtons (message: message, pageContext: pageContext ),
401+ StarButton (message: message, pageContext: pageContext ),
396402 if (isComposeBoxOffered)
397- QuoteAndReplyButton (message: message, pageContext: context ),
403+ QuoteAndReplyButton (message: message, pageContext: pageContext ),
398404 if (showMarkAsUnreadButton)
399- MarkAsUnreadButton (message: message, pageContext: context ),
400- CopyMessageTextButton (message: message, pageContext: context ),
401- CopyMessageLinkButton (message: message, pageContext: context ),
402- ShareButton (message: message, pageContext: context ),
405+ MarkAsUnreadButton (message: message, pageContext: pageContext ),
406+ CopyMessageTextButton (message: message, pageContext: pageContext ),
407+ CopyMessageLinkButton (message: message, pageContext: pageContext ),
408+ ShareButton (message: message, pageContext: pageContext ),
403409 ];
404410
405- _showActionSheet (context , optionButtons: optionButtons);
411+ _showActionSheet (pageContext , optionButtons: optionButtons);
406412}
407413
408414abstract class MessageActionSheetMenuItemButton extends ActionSheetMenuItemButton {
0 commit comments