From b25840756d41bb51b5f439d9cabcb42c84c80120 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Fri, 5 Jun 2026 19:40:12 -0400 Subject: [PATCH] add back shift+enter for newline --- lib/widgets/composer/composer.dart | 42 ++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/lib/widgets/composer/composer.dart b/lib/widgets/composer/composer.dart index d090cac..618d9ee 100644 --- a/lib/widgets/composer/composer.dart +++ b/lib/widgets/composer/composer.dart @@ -1,5 +1,6 @@ import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:flutter/material.dart"; +import "package:flutter/services.dart"; import "package:flutter_hooks/flutter_hooks.dart"; import "package:fluttertagger/fluttertagger.dart"; import "package:hooks_riverpod/hooks_riverpod.dart"; @@ -135,21 +136,34 @@ class Composer extends HookConsumerWidget { query.value = newQuery; }, triggerCharacterAndStyles: {"@": style, "#": style}, - builder: (context, key) => TextField( - maxLines: 12, - minLines: 1, - autofocus: true, - decoration: .new( - hintText: "Your message here...", - border: .none, + builder: (context, key) => Focus( + onKeyEvent: (_, event) { + if (event is KeyDownEvent && + event.logicalKey == + LogicalKeyboardKey.enter) { + final shiftPressed = + HardwareKeyboard.instance.isShiftPressed; + + if (!shiftPressed) { + send(); + return KeyEventResult.handled; + } + } + + return KeyEventResult.ignored; + }, + child: TextField( + maxLines: 12, + minLines: 1, + autofocus: true, + decoration: .new( + hintText: "Your message here...", + border: .none, + ), + controller: controller.value, + key: key, + focusNode: node, ), - controller: controller.value, - key: key, - onSubmitted: (_) => send(), - // Don't defocus on submit - onEditingComplete: () {}, - textInputAction: .done, - focusNode: node, ), ), ),