@@ -7,6 +7,7 @@ import 'package:stream_chat_flutter/src/components/message_composer/message_comp
77import 'package:stream_chat_flutter/src/components/message_composer/message_composer_recording_locked.dart' ;
88import 'package:stream_chat_flutter/src/components/message_composer/message_composer_recording_ongoing.dart' ;
99import 'package:stream_chat_flutter/src/components/message_composer/message_composer_trailing.dart' ;
10+ import 'package:stream_chat_flutter/src/message_input/dm_checkbox_list_tile.dart' ;
1011import 'package:stream_chat_flutter/stream_chat_flutter.dart' ;
1112import 'package:stream_core_flutter/stream_core_flutter.dart' as core;
1213
@@ -33,6 +34,7 @@ class StreamChatMessageComposer extends StatefulWidget {
3334 StreamAudioRecorderController ? audioRecorderController,
3435 bool sendVoiceRecordingAutomatically = false ,
3536 AudioRecorderFeedback feedback = const AudioRecorderFeedback (),
37+ bool canAlsoSendToChannel = false ,
3638 }) : props = MessageComposerProps (
3739 controller: controller,
3840 isFloating: false ,
@@ -46,6 +48,7 @@ class StreamChatMessageComposer extends StatefulWidget {
4648 audioRecorderController: audioRecorderController,
4749 sendVoiceRecordingAutomatically: sendVoiceRecordingAutomatically,
4850 feedback: feedback,
51+ canAlsoSendToChannel: canAlsoSendToChannel,
4952 );
5053
5154 /// The controller for the message composer.
@@ -176,6 +179,7 @@ class MessageComposerProps {
176179 this .audioRecorderController,
177180 this .sendVoiceRecordingAutomatically = false ,
178181 this .feedback = const AudioRecorderFeedback (),
182+ this .canAlsoSendToChannel = false ,
179183 });
180184
181185 /// The controller for the message composer.
@@ -216,6 +220,10 @@ class MessageComposerProps {
216220
217221 /// The feedback for the audio recorder.
218222 final AudioRecorderFeedback feedback;
223+
224+ /// Whether the user can also send the message as a direct message.
225+ /// Usually used in threads.
226+ final bool canAlsoSendToChannel;
219227}
220228
221229extension on StreamAudioRecorderController {
@@ -290,7 +298,29 @@ class DefaultStreamChatMessageComposer extends StatelessWidget {
290298 inputLeading: StreamMessageComposerInputLeading (
291299 props: componentProps,
292300 ),
293- inputBody: body,
301+ inputBody:
302+ body ??
303+ Column (
304+ mainAxisSize: MainAxisSize .min,
305+ children: [
306+ core.StreamMessageComposerInputField (
307+ controller: inputController.textFieldController,
308+ placeholder: props.placeholder,
309+ focusNode: props.focusNode,
310+ ),
311+ if (props.canAlsoSendToChannel)
312+ DmCheckboxListTile (
313+ value: props.controller? .showInChannel ?? false ,
314+ // height of list tile is 34px, height of checkbox is 16px, so we need to subtract 8px to make the spacing correct.
315+ contentPadding: EdgeInsets .only (
316+ right: context.streamSpacing.md,
317+ left: context.streamSpacing.md,
318+ bottom: context.streamSpacing.md - 8 ,
319+ ),
320+ onChanged: (value) => props.controller? .showInChannel = value,
321+ ),
322+ ],
323+ ),
294324 );
295325 }
296326
0 commit comments