@@ -845,12 +845,18 @@ class _ComposeBoxLayout extends StatelessWidget {
845
845
])))); }
846
846
}
847
847
848
+ abstract class ComposeBoxController <T extends StatefulWidget > extends State <T > {
849
+ ComposeTopicController ? get topicController;
850
+ ComposeContentController get contentController;
851
+ FocusNode get contentFocusNode;
852
+ }
853
+
848
854
/// A compose box for use in a stream narrow.
849
855
///
850
856
/// This offers a text input for the topic to send to,
851
857
/// in addition to a text input for the message content.
852
858
class _StreamComposeBox extends StatefulWidget {
853
- const _StreamComposeBox ({required this .narrow});
859
+ const _StreamComposeBox ({super .key, required this .narrow});
854
860
855
861
/// The narrow on view in the message list.
856
862
final StreamNarrow narrow;
@@ -859,9 +865,14 @@ class _StreamComposeBox extends StatefulWidget {
859
865
State <_StreamComposeBox > createState () => _StreamComposeBoxState ();
860
866
}
861
867
862
- class _StreamComposeBoxState extends State <_StreamComposeBox > {
868
+ class _StreamComposeBoxState extends State <_StreamComposeBox > implements ComposeBoxController <_StreamComposeBox > {
869
+ @override ComposeTopicController get topicController => _topicController;
863
870
final _topicController = ComposeTopicController ();
871
+
872
+ @override ComposeContentController get contentController => _contentController;
864
873
final _contentController = ComposeContentController ();
874
+
875
+ @override FocusNode get contentFocusNode => _contentFocusNode;
865
876
final _contentFocusNode = FocusNode ();
866
877
867
878
@override
@@ -900,16 +911,21 @@ class _StreamComposeBoxState extends State<_StreamComposeBox> {
900
911
}
901
912
902
913
class _FixedDestinationComposeBox extends StatefulWidget {
903
- const _FixedDestinationComposeBox ({required this .narrow});
914
+ const _FixedDestinationComposeBox ({super .key, required this .narrow});
904
915
905
916
final SendableNarrow narrow;
906
917
907
918
@override
908
919
State <_FixedDestinationComposeBox > createState () => _FixedDestinationComposeBoxState ();
909
920
}
910
921
911
- class _FixedDestinationComposeBoxState extends State <_FixedDestinationComposeBox > {
922
+ class _FixedDestinationComposeBoxState extends State <_FixedDestinationComposeBox > implements ComposeBoxController <_FixedDestinationComposeBox > {
923
+ @override ComposeTopicController ? get topicController => null ;
924
+
925
+ @override ComposeContentController get contentController => _contentController;
912
926
final _contentController = ComposeContentController ();
927
+
928
+ @override FocusNode get contentFocusNode => _contentFocusNode;
913
929
final _contentFocusNode = FocusNode ();
914
930
915
931
@override
@@ -939,19 +955,20 @@ class _FixedDestinationComposeBoxState extends State<_FixedDestinationComposeBox
939
955
}
940
956
941
957
class ComposeBox extends StatelessWidget {
942
- const ComposeBox ({super .key, required this .narrow});
958
+ const ComposeBox ({super .key, this .controllerKey, required this .narrow});
943
959
960
+ final GlobalKey <ComposeBoxController >? controllerKey;
944
961
final Narrow narrow;
945
962
946
963
@override
947
964
Widget build (BuildContext context) {
948
965
final narrow = this .narrow;
949
966
if (narrow is StreamNarrow ) {
950
- return _StreamComposeBox (narrow: narrow);
967
+ return _StreamComposeBox (key : controllerKey, narrow: narrow);
951
968
} else if (narrow is TopicNarrow ) {
952
- return _FixedDestinationComposeBox (narrow: narrow);
969
+ return _FixedDestinationComposeBox (key : controllerKey, narrow: narrow);
953
970
} else if (narrow is DmNarrow ) {
954
- return _FixedDestinationComposeBox (narrow: narrow);
971
+ return _FixedDestinationComposeBox (key : controllerKey, narrow: narrow);
955
972
} else if (narrow is AllMessagesNarrow ) {
956
973
return const SizedBox .shrink ();
957
974
} else {
0 commit comments