@@ -819,12 +819,18 @@ class _ComposeBoxLayout extends StatelessWidget {
819
819
])))); }
820
820
}
821
821
822
+ abstract class ComposeBoxController <T extends StatefulWidget > extends State <T > {
823
+ ComposeTopicController ? get topicController;
824
+ ComposeContentController get contentController;
825
+ FocusNode get contentFocusNode;
826
+ }
827
+
822
828
/// A compose box for use in a stream narrow.
823
829
///
824
830
/// This offers a text input for the topic to send to,
825
831
/// in addition to a text input for the message content.
826
832
class _StreamComposeBox extends StatefulWidget {
827
- const _StreamComposeBox ({required this .narrow});
833
+ const _StreamComposeBox ({super .key, required this .narrow});
828
834
829
835
/// The narrow on view in the message list.
830
836
final StreamNarrow narrow;
@@ -833,9 +839,14 @@ class _StreamComposeBox extends StatefulWidget {
833
839
State <_StreamComposeBox > createState () => _StreamComposeBoxState ();
834
840
}
835
841
836
- class _StreamComposeBoxState extends State <_StreamComposeBox > {
842
+ class _StreamComposeBoxState extends State <_StreamComposeBox > implements ComposeBoxController <_StreamComposeBox > {
843
+ @override ComposeTopicController get topicController => _topicController;
837
844
final _topicController = ComposeTopicController ();
845
+
846
+ @override ComposeContentController get contentController => _contentController;
838
847
final _contentController = ComposeContentController ();
848
+
849
+ @override FocusNode get contentFocusNode => _contentFocusNode;
839
850
final _contentFocusNode = FocusNode ();
840
851
841
852
@override
@@ -874,16 +885,21 @@ class _StreamComposeBoxState extends State<_StreamComposeBox> {
874
885
}
875
886
876
887
class _FixedDestinationComposeBox extends StatefulWidget {
877
- const _FixedDestinationComposeBox ({required this .narrow});
888
+ const _FixedDestinationComposeBox ({super .key, required this .narrow});
878
889
879
890
final SendableNarrow narrow;
880
891
881
892
@override
882
893
State <_FixedDestinationComposeBox > createState () => _FixedDestinationComposeBoxState ();
883
894
}
884
895
885
- class _FixedDestinationComposeBoxState extends State <_FixedDestinationComposeBox > {
896
+ class _FixedDestinationComposeBoxState extends State <_FixedDestinationComposeBox > implements ComposeBoxController <_FixedDestinationComposeBox > {
897
+ @override ComposeTopicController ? get topicController => null ;
898
+
899
+ @override ComposeContentController get contentController => _contentController;
886
900
final _contentController = ComposeContentController ();
901
+
902
+ @override FocusNode get contentFocusNode => _contentFocusNode;
887
903
final _contentFocusNode = FocusNode ();
888
904
889
905
@override
@@ -913,19 +929,20 @@ class _FixedDestinationComposeBoxState extends State<_FixedDestinationComposeBox
913
929
}
914
930
915
931
class ComposeBox extends StatelessWidget {
916
- const ComposeBox ({super .key, required this .narrow});
932
+ const ComposeBox ({super .key, this .controllerKey, required this .narrow});
917
933
934
+ final GlobalKey <ComposeBoxController >? controllerKey;
918
935
final Narrow narrow;
919
936
920
937
@override
921
938
Widget build (BuildContext context) {
922
939
final narrow = this .narrow;
923
940
if (narrow is StreamNarrow ) {
924
- return _StreamComposeBox (narrow: narrow);
941
+ return _StreamComposeBox (key : controllerKey, narrow: narrow);
925
942
} else if (narrow is TopicNarrow ) {
926
- return _FixedDestinationComposeBox (narrow: narrow);
943
+ return _FixedDestinationComposeBox (key : controllerKey, narrow: narrow);
927
944
} else if (narrow is DmNarrow ) {
928
- return _FixedDestinationComposeBox (narrow: narrow);
945
+ return _FixedDestinationComposeBox (key : controllerKey, narrow: narrow);
929
946
} else if (narrow is AllMessagesNarrow ) {
930
947
return const SizedBox .shrink ();
931
948
} else {
0 commit comments