From ced6f394a7ed51409e292d84f1d1a51acb4f7984 Mon Sep 17 00:00:00 2001 From: Luis Pulido Date: Mon, 6 Apr 2020 13:08:44 -0400 Subject: [PATCH] fix for #12 Wrapped the TextField in a LimitedBox, gavethe MessageInput a new property for that which defaults to 150p --- lib/src/message_input.dart | 108 ++++++++++++++++++++----------------- 1 file changed, 58 insertions(+), 50 deletions(-) diff --git a/lib/src/message_input.dart b/lib/src/message_input.dart index b00c9f2d..f1025385 100644 --- a/lib/src/message_input.dart +++ b/lib/src/message_input.dart @@ -56,12 +56,13 @@ import 'stream_channel.dart'; /// The widget renders the ui based on the first ancestor of type [StreamChatTheme]. /// Modify it to change the widget appearance. class MessageInput extends StatefulWidget { - MessageInput({ - Key key, - this.onMessageSent, - this.parentMessage, - this.editMessage, - }) : super(key: key); + MessageInput( + {Key key, + this.onMessageSent, + this.parentMessage, + this.editMessage, + this.maxHeight = 150}) + : super(key: key); /// Message to edit final Message editMessage; @@ -72,6 +73,9 @@ class MessageInput extends StatefulWidget { /// Parent message in case of a thread final Message parentMessage; + /// Maximum Height for the TextField to grow before it starts scrolling + final double maxHeight; + @override _MessageInputState createState() => _MessageInputState(); } @@ -111,6 +115,7 @@ class _MessageInputState extends State { Flex _buildTextField(BuildContext context) { return Flex( direction: Axis.horizontal, + crossAxisAlignment: CrossAxisAlignment.end, children: [ _buildAttachmentButton(), _buildTextInput(context), @@ -133,54 +138,57 @@ class _MessageInputState extends State { Expanded _buildTextInput(BuildContext context) { return Expanded( - child: TextField( - key: Key('messageInputText'), - minLines: null, - maxLines: null, - onSubmitted: (_) { - _sendMessage(context); - }, - controller: _textController, - focusNode: _focusNode, - onChanged: (s) { - StreamChannel.of(context).channel.keyStroke(); + child: LimitedBox( + maxHeight: widget.maxHeight, + child: TextField( + key: Key('messageInputText'), + minLines: null, + maxLines: null, + onSubmitted: (_) { + _sendMessage(context); + }, + controller: _textController, + focusNode: _focusNode, + onChanged: (s) { + StreamChannel.of(context).channel.keyStroke(); - setState(() { - _messageIsPresent = s.trim().isNotEmpty; - }); + setState(() { + _messageIsPresent = s.trim().isNotEmpty; + }); - _commandsOverlay?.remove(); - _commandsOverlay = null; - _mentionsOverlay?.remove(); - _mentionsOverlay = null; + _commandsOverlay?.remove(); + _commandsOverlay = null; + _mentionsOverlay?.remove(); + _mentionsOverlay = null; - if (s.startsWith('/')) { - _commandsOverlay = _buildCommandsOverlayEntry(); - Overlay.of(context).insert(_commandsOverlay); - } + if (s.startsWith('/')) { + _commandsOverlay = _buildCommandsOverlayEntry(); + Overlay.of(context).insert(_commandsOverlay); + } - if (_textController.selection.isCollapsed && - (s[_textController.selection.start - 1] == '@' || - _textController.text - .substring(0, _textController.selection.start) - .split(' ') - .last - .contains('@'))) { - _mentionsOverlay = _buildMentionsOverlayEntry(); - Overlay.of(context).insert(_mentionsOverlay); - } - }, - onTap: () { - setState(() { - _typingStarted = true; - }); - }, - style: Theme.of(context).textTheme.body1, - autofocus: false, - decoration: InputDecoration( - hintText: 'Write a message', - prefixText: ' ', - border: InputBorder.none, + if (_textController.selection.isCollapsed && + (s[_textController.selection.start - 1] == '@' || + _textController.text + .substring(0, _textController.selection.start) + .split(' ') + .last + .contains('@'))) { + _mentionsOverlay = _buildMentionsOverlayEntry(); + Overlay.of(context).insert(_mentionsOverlay); + } + }, + onTap: () { + setState(() { + _typingStarted = true; + }); + }, + style: Theme.of(context).textTheme.body1, + autofocus: false, + decoration: InputDecoration( + hintText: 'Write a message', + prefixText: ' ', + border: InputBorder.none, + ), ), ), );