@@ -1030,23 +1030,16 @@ class _ComposeBoxContainer extends StatelessWidget {
1030
1030
}
1031
1031
}
1032
1032
1033
- class _ComposeBoxBody extends StatelessWidget {
1034
- const _ComposeBoxBody ({
1035
- required this .narrow,
1036
- required this .controller,
1037
- required this .topicInput,
1038
- required this .contentInput,
1039
- required this .sendButton,
1040
- });
1041
-
1033
+ /// The text inputs, compose-button row, and send button for the compose box.
1034
+ abstract class _ComposeBoxBody extends StatelessWidget {
1042
1035
/// The narrow on view in the message list.
1043
- final Narrow narrow;
1036
+ Narrow get narrow;
1044
1037
1045
- final ComposeBoxController controller;
1038
+ ComposeBoxController get controller;
1046
1039
1047
- final Widget ? topicInput ;
1048
- final Widget contentInput ;
1049
- final Widget sendButton ;
1040
+ Widget ? buildTopicInput () ;
1041
+ Widget buildContentInput () ;
1042
+ Widget buildSendButton () ;
1050
1043
1051
1044
@override
1052
1045
Widget build (BuildContext context) {
@@ -1079,15 +1072,16 @@ class _ComposeBoxBody extends StatelessWidget {
1079
1072
_AttachFromCameraButton (contentController: content, contentFocusNode: contentFocusNode),
1080
1073
];
1081
1074
1075
+ final topicInput = buildTopicInput ();
1082
1076
return _ComposeBoxContainer (
1083
1077
child: Column (children: [
1084
1078
Padding (
1085
1079
padding: const EdgeInsets .symmetric (horizontal: 8 ),
1086
1080
child: Theme (
1087
1081
data: inputThemeData,
1088
1082
child: Column (children: [
1089
- if (topicInput != null ) topicInput! ,
1090
- contentInput ,
1083
+ if (topicInput != null ) topicInput,
1084
+ buildContentInput () ,
1091
1085
]))),
1092
1086
SizedBox (
1093
1087
height: _composeButtonSize,
@@ -1097,7 +1091,7 @@ class _ComposeBoxBody extends StatelessWidget {
1097
1091
mainAxisAlignment: MainAxisAlignment .spaceBetween,
1098
1092
children: [
1099
1093
Row (children: composeButtons),
1100
- sendButton ,
1094
+ buildSendButton () ,
1101
1095
]))),
1102
1096
]));
1103
1097
}
@@ -1138,42 +1132,35 @@ class FixedDestinationComposeBoxController extends ComposeBoxController {}
1138
1132
///
1139
1133
/// This offers a text input for the topic to send to,
1140
1134
/// in addition to a text input for the message content.
1141
- class _StreamComposeBoxBody extends StatelessWidget {
1142
- const _StreamComposeBoxBody ({required this .narrow, required this .controller});
1135
+ class _StreamComposeBoxBody extends _ComposeBoxBody {
1136
+ _StreamComposeBoxBody ({required this .narrow, required this .controller});
1143
1137
1144
- /// The narrow on view in the message list.
1138
+ @override
1145
1139
final ChannelNarrow narrow;
1146
1140
1147
- final StreamComposeBoxController controller;
1148
-
1149
1141
@override
1150
- Widget build (BuildContext context) {
1151
- final StreamComposeBoxController (
1152
- : topic, : content, : topicFocusNode, : contentFocusNode,
1153
- ) = controller;
1142
+ final StreamComposeBoxController controller;
1154
1143
1155
- return _ComposeBoxBody (
1156
- narrow: narrow,
1157
- controller: controller,
1158
- topicInput: _TopicInput (
1159
- streamId: narrow.streamId,
1160
- controller: topic,
1161
- focusNode: topicFocusNode,
1162
- contentFocusNode: contentFocusNode,
1163
- ),
1164
- contentInput: _StreamContentInput (
1165
- narrow: narrow,
1166
- topicController: topic,
1167
- controller: content,
1168
- focusNode: contentFocusNode,
1169
- ),
1170
- sendButton: _SendButton (
1171
- topicController: topic,
1172
- contentController: content,
1173
- getDestination: () => StreamDestination (
1174
- narrow.streamId, topic.textNormalized),
1175
- ));
1176
- }
1144
+ @override Widget buildTopicInput () => _TopicInput (
1145
+ streamId: narrow.streamId,
1146
+ controller: controller.topic,
1147
+ focusNode: controller.topicFocusNode,
1148
+ contentFocusNode: controller.contentFocusNode,
1149
+ );
1150
+
1151
+ @override Widget buildContentInput () => _StreamContentInput (
1152
+ narrow: narrow,
1153
+ topicController: controller.topic,
1154
+ controller: controller.content,
1155
+ focusNode: controller.contentFocusNode,
1156
+ );
1157
+
1158
+ @override Widget buildSendButton () => _SendButton (
1159
+ topicController: controller.topic,
1160
+ contentController: controller.content,
1161
+ getDestination: () => StreamDestination (
1162
+ narrow.streamId, controller.topic.textNormalized),
1163
+ );
1177
1164
}
1178
1165
1179
1166
class _ErrorBanner extends StatelessWidget {
@@ -1197,34 +1184,28 @@ class _ErrorBanner extends StatelessWidget {
1197
1184
}
1198
1185
}
1199
1186
1200
- class _FixedDestinationComposeBoxBody extends StatelessWidget {
1201
- const _FixedDestinationComposeBoxBody ({required this .narrow, required this .controller});
1187
+ class _FixedDestinationComposeBoxBody extends _ComposeBoxBody {
1188
+ _FixedDestinationComposeBoxBody ({required this .narrow, required this .controller});
1202
1189
1190
+ @override
1203
1191
final SendableNarrow narrow;
1204
1192
1193
+ @override
1205
1194
final FixedDestinationComposeBoxController controller;
1206
1195
1207
- @override
1208
- Widget build (BuildContext context) {
1209
- final FixedDestinationComposeBoxController (
1210
- : content, : contentFocusNode,
1211
- ) = controller;
1196
+ @override Widget ? buildTopicInput () => null ;
1212
1197
1213
- return _ComposeBoxBody (
1214
- narrow: narrow,
1215
- controller: controller,
1216
- topicInput: null ,
1217
- contentInput: _FixedDestinationContentInput (
1218
- narrow: narrow,
1219
- controller: content,
1220
- focusNode: contentFocusNode,
1221
- ),
1222
- sendButton: _SendButton (
1223
- topicController: null ,
1224
- contentController: content,
1225
- getDestination: () => narrow.destination,
1226
- ));
1227
- }
1198
+ @override Widget buildContentInput () => _FixedDestinationContentInput (
1199
+ narrow: narrow,
1200
+ controller: controller.content,
1201
+ focusNode: controller.contentFocusNode,
1202
+ );
1203
+
1204
+ @override Widget buildSendButton () => _SendButton (
1205
+ topicController: null ,
1206
+ contentController: controller.content,
1207
+ getDestination: () => narrow.destination,
1208
+ );
1228
1209
}
1229
1210
1230
1211
class ComposeBox extends StatefulWidget {
0 commit comments