diff --git a/packages/stream_chat_flutter/lib/platform_widget_builder/src/platform_widget_base.dart b/packages/stream_chat_flutter/lib/platform_widget_builder/src/platform_widget_base.dart index 9d3470d6..0487bd43 100644 --- a/packages/stream_chat_flutter/lib/platform_widget_builder/src/platform_widget_base.dart +++ b/packages/stream_chat_flutter/lib/platform_widget_builder/src/platform_widget_base.dart @@ -1,4 +1,4 @@ -import 'package:flutter/material.dart' show Theme; +import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; /// A generic widget builder function. @@ -30,7 +30,7 @@ abstract class PlatformWidgetBase : CrossFadeState.showSecond, ), ), - // PlatformWidgetBuilder( - // mobile: (context, child) => _buildFilePickerSection(), - // ), ], ), ), @@ -753,25 +759,45 @@ class StreamMessageInputState extends State LimitedBox( maxHeight: widget.maxHeight, child: PlatformWidgetBuilder( - web: (context, child) => KeyboardShortcutRunner( - onEnterKeypress: sendMessage, - onEscapeKeypress: () { - if (_hasQuotedMessage && - _effectiveController.text.isEmpty) { - widget.onQuotedMessageCleared?.call(); - } - }, + web: (context, child) => Focus( child: child!, + onKeyEvent: (node, event) { + if (widget.sendMessageKey != null && + event.physicalKey == widget.sendMessageKey) { + sendMessage(); + return KeyEventResult.handled; + } else if (widget.clearQuotedMessageKey != null && + event.physicalKey == + widget.clearQuotedMessageKey) { + if (_hasQuotedMessage && + _effectiveController.text.isEmpty) { + widget.onQuotedMessageCleared?.call(); + } + return KeyEventResult.handled; + } + + return KeyEventResult.ignored; + }, ), - desktop: (context, child) => KeyboardShortcutRunner( - onEnterKeypress: sendMessage, - onEscapeKeypress: () { - if (_hasQuotedMessage && - _effectiveController.text.isEmpty) { - widget.onQuotedMessageCleared?.call(); - } - }, + desktop: (context, child) => Focus( child: child!, + onKeyEvent: (node, event) { + if (widget.sendMessageKey != null && + event.physicalKey == widget.sendMessageKey) { + sendMessage(); + return KeyEventResult.handled; + } else if (widget.clearQuotedMessageKey != null && + event.physicalKey == + widget.clearQuotedMessageKey) { + if (_hasQuotedMessage && + _effectiveController.text.isEmpty) { + widget.onQuotedMessageCleared?.call(); + } + return KeyEventResult.handled; + } + + return KeyEventResult.ignored; + }, ), mobile: (context, child) => child, child: StreamMessageTextField(