@@ -89,7 +89,9 @@ const double _composeButtonSize = 44;
8989///
9090/// Subclasses must ensure that [_update] is called in all exposed constructors.
9191abstract class ComposeController <ErrorT > extends TextEditingController {
92- ComposeController ({super .text});
92+ ComposeController ({super .text, required this .store});
93+
94+ PerAccountStore store;
9395
9496 int get maxLengthUnicodeCodePoints;
9597
@@ -152,12 +154,10 @@ enum TopicValidationError {
152154}
153155
154156class ComposeTopicController extends ComposeController <TopicValidationError > {
155- ComposeTopicController ({super .text, required this .store}) {
157+ ComposeTopicController ({super .text, required super .store}) {
156158 _update ();
157159 }
158160
159- PerAccountStore store;
160-
161161 // TODO(#668): listen to [PerAccountStore] once we subscribe to this value
162162 bool get mandatory => store.realmMandatoryTopics;
163163
@@ -234,7 +234,11 @@ enum ContentValidationError {
234234}
235235
236236class ComposeContentController extends ComposeController <ContentValidationError > {
237- ComposeContentController ({super .text, this .requireNotEmpty = true }) {
237+ ComposeContentController ({
238+ super .text,
239+ required super .store,
240+ this .requireNotEmpty = true ,
241+ }) {
238242 _update ();
239243 }
240244
@@ -1575,7 +1579,11 @@ class _EditMessageComposeBoxBody extends _ComposeBoxBody {
15751579}
15761580
15771581sealed class ComposeBoxController {
1578- final content = ComposeContentController ();
1582+ ComposeBoxController ({required this .store})
1583+ : content = ComposeContentController (store: store);
1584+
1585+ final PerAccountStore store;
1586+ final ComposeContentController content;
15791587 final contentFocusNode = FocusNode ();
15801588
15811589 /// If no input is focused, requests focus on the appropriate input.
@@ -1668,7 +1676,7 @@ enum ComposeTopicInteractionStatus {
16681676}
16691677
16701678class StreamComposeBoxController extends ComposeBoxController {
1671- StreamComposeBoxController ({required PerAccountStore store})
1679+ StreamComposeBoxController ({required super . store})
16721680 : topic = ComposeTopicController (store: store);
16731681
16741682 final ComposeTopicController topic;
@@ -1698,21 +1706,25 @@ class StreamComposeBoxController extends ComposeBoxController {
16981706 }
16991707}
17001708
1701- class FixedDestinationComposeBoxController extends ComposeBoxController {}
1709+ class FixedDestinationComposeBoxController extends ComposeBoxController {
1710+ FixedDestinationComposeBoxController ({required super .store});
1711+ }
17021712
17031713class EditMessageComposeBoxController extends ComposeBoxController {
17041714 EditMessageComposeBoxController ({
1715+ required super .store,
17051716 required this .messageId,
17061717 required this .originalRawContent,
17071718 required String ? initialText,
17081719 }) : _content = ComposeContentController (
17091720 text: initialText,
1721+ store: store,
17101722 // Editing to delete the content is a supported form of
17111723 // deletion: https://zulip.com/help/delete-a-message#delete-message-content
17121724 requireNotEmpty: false );
17131725
1714- factory EditMessageComposeBoxController .empty (int messageId) =>
1715- EditMessageComposeBoxController (messageId: messageId,
1726+ factory EditMessageComposeBoxController .empty (PerAccountStore store, int messageId) =>
1727+ EditMessageComposeBoxController (store : store, messageId: messageId,
17161728 originalRawContent: null , initialText: null );
17171729
17181730 @override ComposeContentController get content => _content;
@@ -2058,6 +2070,7 @@ class _ComposeBoxState extends State<ComposeBox> with PerAccountStoreAwareStateM
20582070 setState (() {
20592071 controller.dispose ();
20602072 _controller = EditMessageComposeBoxController (
2073+ store: store,
20612074 messageId: messageId,
20622075 originalRawContent: failedEdit.originalRawContent,
20632076 initialText: failedEdit.newContent,
@@ -2067,8 +2080,9 @@ class _ComposeBoxState extends State<ComposeBox> with PerAccountStoreAwareStateM
20672080 }
20682081
20692082 void _editFromRawContentFetch (int messageId) async {
2083+ final store = PerAccountStoreWidget .of (context);
20702084 final zulipLocalizations = ZulipLocalizations .of (context);
2071- final emptyEditController = EditMessageComposeBoxController .empty (messageId);
2085+ final emptyEditController = EditMessageComposeBoxController .empty (store, messageId);
20722086 setState (() {
20732087 controller.dispose ();
20742088 _controller = emptyEditController;
@@ -2136,10 +2150,11 @@ class _ComposeBoxState extends State<ComposeBox> with PerAccountStoreAwareStateM
21362150
21372151 switch (controller) {
21382152 case StreamComposeBoxController ():
2153+ controller.content.store = newStore;
21392154 controller.topic.store = newStore;
21402155 case FixedDestinationComposeBoxController ():
21412156 case EditMessageComposeBoxController ():
2142- // no reference to the store that needs updating
2157+ controller.content. store = newStore;
21432158 }
21442159 }
21452160
@@ -2149,7 +2164,7 @@ class _ComposeBoxState extends State<ComposeBox> with PerAccountStoreAwareStateM
21492164 _controller = StreamComposeBoxController (store: store);
21502165 case TopicNarrow ():
21512166 case DmNarrow ():
2152- _controller = FixedDestinationComposeBoxController ();
2167+ _controller = FixedDestinationComposeBoxController (store : store );
21532168 case CombinedFeedNarrow ():
21542169 case MentionsNarrow ():
21552170 case StarredMessagesNarrow ():
0 commit comments