@@ -667,28 +667,20 @@ class _SendButtonState extends State<_SendButton> {
667
667
}
668
668
}
669
669
670
- /// The compose box for writing a stream message.
671
- class _StreamComposeBox extends StatefulWidget {
672
- const _StreamComposeBox ({required this .narrow});
673
-
674
- final StreamNarrow narrow;
675
-
676
- @override
677
- State <_StreamComposeBox > createState () => _StreamComposeBoxState ();
678
- }
679
-
680
- class _StreamComposeBoxState extends State <_StreamComposeBox > {
681
- final _topicController = ComposeTopicController ();
682
- final _contentController = ComposeContentController ();
683
- final _contentFocusNode = FocusNode ();
670
+ class _ComposeBoxLayout extends StatelessWidget {
671
+ const _ComposeBoxLayout ({
672
+ required this .topicInput,
673
+ required this .contentInput,
674
+ required this .sendButton,
675
+ required this .contentController,
676
+ required this .contentFocusNode,
677
+ });
684
678
685
- @override
686
- void dispose () {
687
- _topicController.dispose ();
688
- _contentController.dispose ();
689
- _contentFocusNode.dispose ();
690
- super .dispose ();
691
- }
679
+ final Widget ? topicInput;
680
+ final Widget contentInput;
681
+ final Widget sendButton;
682
+ final ComposeContentController contentController;
683
+ final FocusNode contentFocusNode;
692
684
693
685
@override
694
686
Widget build (BuildContext context) {
@@ -709,12 +701,6 @@ class _StreamComposeBoxState extends State<_StreamComposeBox> {
709
701
),
710
702
);
711
703
712
- final topicInput = TextField (
713
- controller: _topicController,
714
- style: TextStyle (color: colorScheme.onSurface),
715
- decoration: const InputDecoration (hintText: 'Topic' ),
716
- );
717
-
718
704
return Material (
719
705
color: colorScheme.surfaceVariant,
720
706
child: SafeArea (
@@ -727,31 +713,71 @@ class _StreamComposeBoxState extends State<_StreamComposeBox> {
727
713
child: Theme (
728
714
data: inputThemeData,
729
715
child: Column (children: [
730
- topicInput,
731
- const SizedBox (height: 8 ),
732
- _StreamContentInput (
733
- narrow: widget.narrow,
734
- topicController: _topicController,
735
- controller: _contentController,
736
- focusNode: _contentFocusNode),
716
+ if (topicInput != null ) topicInput! ,
717
+ if (topicInput != null ) const SizedBox (height: 8 ),
718
+ contentInput,
737
719
]))),
738
720
const SizedBox (width: 8 ),
739
- _SendButton (
740
- topicController: _topicController,
741
- contentController: _contentController,
742
- getDestination: () => StreamDestination (
743
- widget.narrow.streamId, _topicController.textNormalized),
744
- ),
721
+ sendButton,
745
722
]),
746
723
Theme (
747
724
data: themeData.copyWith (
748
725
iconTheme: themeData.iconTheme.copyWith (color: colorScheme.onSurfaceVariant)),
749
726
child: Row (children: [
750
- _AttachFileButton (contentController: _contentController , contentFocusNode: _contentFocusNode ),
751
- _AttachMediaButton (contentController: _contentController , contentFocusNode: _contentFocusNode ),
752
- _AttachFromCameraButton (contentController: _contentController , contentFocusNode: _contentFocusNode ),
727
+ _AttachFileButton (contentController: contentController , contentFocusNode: contentFocusNode ),
728
+ _AttachMediaButton (contentController: contentController , contentFocusNode: contentFocusNode ),
729
+ _AttachFromCameraButton (contentController: contentController , contentFocusNode: contentFocusNode ),
753
730
])),
754
- ]))));
731
+ ])))); }
732
+ }
733
+
734
+ /// The compose box for writing a stream message.
735
+ class _StreamComposeBox extends StatefulWidget {
736
+ const _StreamComposeBox ({required this .narrow});
737
+
738
+ final StreamNarrow narrow;
739
+
740
+ @override
741
+ State <_StreamComposeBox > createState () => _StreamComposeBoxState ();
742
+ }
743
+
744
+ class _StreamComposeBoxState extends State <_StreamComposeBox > {
745
+ final _topicController = ComposeTopicController ();
746
+ final _contentController = ComposeContentController ();
747
+ final _contentFocusNode = FocusNode ();
748
+
749
+ @override
750
+ void dispose () {
751
+ _topicController.dispose ();
752
+ _contentController.dispose ();
753
+ _contentFocusNode.dispose ();
754
+ super .dispose ();
755
+ }
756
+
757
+ @override
758
+ Widget build (BuildContext context) {
759
+ final colorScheme = Theme .of (context).colorScheme;
760
+
761
+ return _ComposeBoxLayout (
762
+ contentController: _contentController,
763
+ contentFocusNode: _contentFocusNode,
764
+ topicInput: TextField (
765
+ controller: _topicController,
766
+ style: TextStyle (color: colorScheme.onSurface),
767
+ decoration: const InputDecoration (hintText: 'Topic' ),
768
+ ),
769
+ contentInput: _StreamContentInput (
770
+ narrow: widget.narrow,
771
+ topicController: _topicController,
772
+ controller: _contentController,
773
+ focusNode: _contentFocusNode,
774
+ ),
775
+ sendButton: _SendButton (
776
+ topicController: _topicController,
777
+ contentController: _contentController,
778
+ getDestination: () => StreamDestination (
779
+ widget.narrow.streamId, _topicController.textNormalized),
780
+ ));
755
781
}
756
782
}
757
783
0 commit comments