diff --git a/lib/src/message_input.dart b/lib/src/message_input.dart index a3956481..0df0c670 100644 --- a/lib/src/message_input.dart +++ b/lib/src/message_input.dart @@ -938,7 +938,8 @@ class MessageInputState extends State { super.initState(); if (!kIsWeb) { - _keyboardListener = KeyboardVisibility.onChange.listen((visible) { + _keyboardListener = + KeyboardVisibilityController().onChange.listen((visible) { if (visible) { _onChange(); } else { @@ -962,42 +963,42 @@ class MessageInputState extends State { Timer _debounce; void _onChange() { - final s = textEditingController.text; - StreamChannel.of(context).channel.keyStroke( - widget.parentMessage?.id, - ); + if (_debounce?.isActive == true) _debounce.cancel(); + _debounce = Timer( + const Duration(milliseconds: 350), + () { + final s = textEditingController.text; + StreamChannel.of(context).channel.keyStroke( + widget.parentMessage?.id, + ); - 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.trim().startsWith('/')) { - _commandsOverlay = _buildCommandsOverlayEntry(); - Overlay.of(context).insert(_commandsOverlay); - } + if (s.trim().startsWith('/')) { + _commandsOverlay = _buildCommandsOverlayEntry(); + Overlay.of(context).insert(_commandsOverlay); + } - if (_messageIsPresent && - textEditingController.selection.isCollapsed && - textEditingController.selection.baseOffset > 0 && - textEditingController.text - .substring(0, textEditingController.selection.baseOffset) - .split(' ') - .last - .contains('@')) { - if (_debounce?.isActive == true) _debounce.cancel(); - _debounce = Timer( - const Duration(milliseconds: 500), - () { + if (_messageIsPresent && + textEditingController.selection.isCollapsed && + textEditingController.selection.baseOffset > 0 && + textEditingController.text + .substring(0, textEditingController.selection.baseOffset) + .split(' ') + .last + .contains('@')) { _mentionsOverlay = _buildMentionsOverlayEntry(); Overlay.of(context).insert(_mentionsOverlay); - }, - ); - } + } + }, + ); } void _parseExistingMessage(Message message) { diff --git a/pubspec.yaml b/pubspec.yaml index f667acfb..ac5f99e6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,10 +19,10 @@ dependencies: flutter_markdown: ^0.5.0 url_launcher: ^5.4.11 video_player: ^1.0.0 - chewie: ^0.10.4 + chewie: ^0.12.0 file_picker: ^2.0.12 image_picker: ^0.6.7+2 - flutter_keyboard_visibility: ^3.3.0 + flutter_keyboard_visibility: ^4.0.1 stream_chat: ^0.2.13 mime: ^0.9.6+3 visibility_detector: ^0.1.5