@@ -1134,25 +1134,13 @@ class FixedDestinationComposeBoxController extends ComposeBoxController {}
1134
1134
///
1135
1135
/// This offers a text input for the topic to send to,
1136
1136
/// in addition to a text input for the message content.
1137
- class _StreamComposeBox extends StatefulWidget {
1138
- const _StreamComposeBox ({super .key , required this .narrow });
1137
+ class _StreamComposeBox extends StatelessWidget {
1138
+ const _StreamComposeBox ({required this .narrow , required this .controller });
1139
1139
1140
1140
/// The narrow on view in the message list.
1141
1141
final ChannelNarrow narrow;
1142
1142
1143
- @override
1144
- State <_StreamComposeBox > createState () => _StreamComposeBoxState ();
1145
- }
1146
-
1147
- class _StreamComposeBoxState extends State <_StreamComposeBox > {
1148
- StreamComposeBoxController get controller => _controller;
1149
- final StreamComposeBoxController _controller = StreamComposeBoxController ();
1150
-
1151
- @override
1152
- void dispose () {
1153
- _controller.dispose ();
1154
- super .dispose ();
1155
- }
1143
+ final StreamComposeBoxController controller;
1156
1144
1157
1145
@override
1158
1146
Widget build (BuildContext context) {
@@ -1164,13 +1152,13 @@ class _StreamComposeBoxState extends State<_StreamComposeBox> {
1164
1152
contentController: content,
1165
1153
contentFocusNode: contentFocusNode,
1166
1154
topicInput: _TopicInput (
1167
- streamId: widget. narrow.streamId,
1155
+ streamId: narrow.streamId,
1168
1156
controller: topic,
1169
1157
focusNode: topicFocusNode,
1170
1158
contentFocusNode: contentFocusNode,
1171
1159
),
1172
1160
contentInput: _StreamContentInput (
1173
- narrow: widget. narrow,
1161
+ narrow: narrow,
1174
1162
topicController: topic,
1175
1163
controller: content,
1176
1164
focusNode: contentFocusNode,
@@ -1179,7 +1167,7 @@ class _StreamComposeBoxState extends State<_StreamComposeBox> {
1179
1167
topicController: topic,
1180
1168
contentController: content,
1181
1169
getDestination: () => StreamDestination (
1182
- widget. narrow.streamId, topic.textNormalized),
1170
+ narrow.streamId, topic.textNormalized),
1183
1171
));
1184
1172
}
1185
1173
}
@@ -1205,24 +1193,12 @@ class _ErrorBanner extends StatelessWidget {
1205
1193
}
1206
1194
}
1207
1195
1208
- class _FixedDestinationComposeBox extends StatefulWidget {
1209
- const _FixedDestinationComposeBox ({super .key , required this .narrow });
1196
+ class _FixedDestinationComposeBox extends StatelessWidget {
1197
+ const _FixedDestinationComposeBox ({required this .narrow , required this .controller });
1210
1198
1211
1199
final SendableNarrow narrow;
1212
1200
1213
- @override
1214
- State <_FixedDestinationComposeBox > createState () => _FixedDestinationComposeBoxState ();
1215
- }
1216
-
1217
- class _FixedDestinationComposeBoxState extends State <_FixedDestinationComposeBox > {
1218
- FixedDestinationComposeBoxController get controller => _controller;
1219
- final FixedDestinationComposeBoxController _controller = FixedDestinationComposeBoxController ();
1220
-
1221
- @override
1222
- void dispose () {
1223
- _controller.dispose ();
1224
- super .dispose ();
1225
- }
1201
+ final FixedDestinationComposeBoxController controller;
1226
1202
1227
1203
@override
1228
1204
Widget build (BuildContext context) {
@@ -1235,14 +1211,14 @@ class _FixedDestinationComposeBoxState extends State<_FixedDestinationComposeBox
1235
1211
contentFocusNode: contentFocusNode,
1236
1212
topicInput: null ,
1237
1213
contentInput: _FixedDestinationContentInput (
1238
- narrow: widget. narrow,
1214
+ narrow: narrow,
1239
1215
controller: content,
1240
1216
focusNode: contentFocusNode,
1241
1217
),
1242
1218
sendButton: _SendButton (
1243
1219
topicController: null ,
1244
1220
contentController: content,
1245
- getDestination: () => widget. narrow.destination,
1221
+ getDestination: () => narrow.destination,
1246
1222
));
1247
1223
}
1248
1224
}
@@ -1273,20 +1249,34 @@ class ComposeBox extends StatefulWidget {
1273
1249
1274
1250
/// The interface for the state of a [ComposeBox] .
1275
1251
abstract class ComposeBoxState extends State <ComposeBox > {
1276
- ComposeBoxController ? get controller;
1252
+ ComposeBoxController get controller;
1277
1253
}
1278
1254
1279
1255
class _ComposeBoxState extends State <ComposeBox > implements ComposeBoxState {
1280
- @override ComposeBoxController ? get controller {
1281
- final forStream = _streamComposeBoxControllerKey.currentState? .controller;
1282
- final forFixedDestination = _fixedDestinationComposeBoxControllerKey.currentState? .controller;
1283
- assert (forStream == null || forFixedDestination == null );
1284
- // Both can be null (error-banner case).
1285
- return forStream ?? forFixedDestination;
1256
+ @override ComposeBoxController get controller => _controller;
1257
+ late final ComposeBoxController _controller;
1258
+
1259
+ @override
1260
+ void initState () {
1261
+ super .initState ();
1262
+ switch (widget.narrow) {
1263
+ case ChannelNarrow ():
1264
+ _controller = StreamComposeBoxController ();
1265
+ case TopicNarrow ():
1266
+ case DmNarrow ():
1267
+ _controller = FixedDestinationComposeBoxController ();
1268
+ case CombinedFeedNarrow ():
1269
+ case MentionsNarrow ():
1270
+ case StarredMessagesNarrow ():
1271
+ assert (false );
1272
+ }
1286
1273
}
1287
- final _streamComposeBoxControllerKey = GlobalKey <_StreamComposeBoxState >();
1288
- final _fixedDestinationComposeBoxControllerKey = GlobalKey <_FixedDestinationComposeBoxState >();
1289
1274
1275
+ @override
1276
+ void dispose () {
1277
+ _controller.dispose ();
1278
+ super .dispose ();
1279
+ }
1290
1280
1291
1281
Widget ? _errorBanner (BuildContext context) {
1292
1282
final store = PerAccountStoreWidget .of (context);
@@ -1325,12 +1315,16 @@ class _ComposeBoxState extends State<ComposeBox> implements ComposeBoxState {
1325
1315
final narrow = widget.narrow;
1326
1316
switch (narrow) {
1327
1317
case ChannelNarrow ():
1328
- return _StreamComposeBox (key: _streamComposeBoxControllerKey, narrow: narrow);
1318
+ assert (_controller is StreamComposeBoxController );
1319
+ return _StreamComposeBox (controller: (_controller as StreamComposeBoxController ),
1320
+ narrow: narrow);
1329
1321
case TopicNarrow ():
1330
- return _FixedDestinationComposeBox (key: _fixedDestinationComposeBoxControllerKey,
1322
+ assert (_controller is FixedDestinationComposeBoxController );
1323
+ return _FixedDestinationComposeBox (controller: (_controller as FixedDestinationComposeBoxController ),
1331
1324
narrow: narrow);
1332
1325
case DmNarrow ():
1333
- return _FixedDestinationComposeBox (key: _fixedDestinationComposeBoxControllerKey,
1326
+ assert (_controller is FixedDestinationComposeBoxController );
1327
+ return _FixedDestinationComposeBox (controller: (_controller as FixedDestinationComposeBoxController ),
1334
1328
narrow: narrow);
1335
1329
case CombinedFeedNarrow ():
1336
1330
case MentionsNarrow ():
0 commit comments