From c9ce5233f54ecb5a3cccf8dd1f851648dc583774 Mon Sep 17 00:00:00 2001 From: NicKoehler Date: Thu, 8 Jun 2023 16:00:48 +0200 Subject: [PATCH] send when left shift key is not pressed --- flutter/lib/common/widgets/chat_page.dart | 6 ++-- flutter/lib/models/chat_model.dart | 38 +++++++++++++++++++++-- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/flutter/lib/common/widgets/chat_page.dart b/flutter/lib/common/widgets/chat_page.dart index bb96766cd..119103753 100644 --- a/flutter/lib/common/widgets/chat_page.dart +++ b/flutter/lib/common/widgets/chat_page.dart @@ -54,16 +54,14 @@ class ChatPage extends StatelessWidget implements PageShape { children: [ LayoutBuilder(builder: (context, constraints) { final chat = DashChat( - onSend: (chatMsg) { - chatModel.send(chatMsg); - chatModel.inputNode.requestFocus(); - }, + onSend: chatModel.send, currentUser: chatModel.me, messages: chatModel.messages[chatModel.currentID]?.chatMessages ?? [], inputOptions: InputOptions( focusNode: chatModel.inputNode, + textController: chatModel.textController, inputTextStyle: TextStyle( fontSize: 14, color: Theme.of(context).textTheme.titleLarge?.color), diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 34e5c0d6d..618e843ee 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:dash_chat_2/dash_chat_2.dart'; import 'package:draggable_float_widget/draggable_float_widget.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:get/get.dart'; @@ -42,6 +43,14 @@ class ChatModel with ChangeNotifier { Rx get voiceCallStatus => _voiceCallStatus; + TextEditingController textController = TextEditingController(); + + @override + void dispose() { + textController.dispose(); + super.dispose(); + } + final ChatUser me = ChatUser( id: "", firstName: translate("Me"), @@ -75,12 +84,36 @@ class ChatModel with ChangeNotifier { final WeakReference parent; late final SessionID sessionId; + late FocusNode inputNode; ChatModel(this.parent) { sessionId = parent.target!.sessionId; - } + inputNode = FocusNode( + onKey: (node, event) { + bool isShiftPressed = event.isKeyPressed(LogicalKeyboardKey.shiftLeft); + bool isEnterPressed = event.isKeyPressed(LogicalKeyboardKey.enter); - FocusNode inputNode = FocusNode(); + String trimmedText = textController.text.trim(); + + // don't send empty message + if (trimmedText.isEmpty) { + textController.text = trimmedText; + } + + if (isEnterPressed && !isShiftPressed) { + final ChatMessage message = ChatMessage( + text: trimmedText, + user: me, + createdAt: DateTime.now(), + ); + send(message); + textController.text = ""; + } + + return KeyEventResult.ignored; + }, + ); + } ChatUser get currentUser { final user = messages[currentID]?.chatUser; @@ -313,6 +346,7 @@ class ChatModel with ChangeNotifier { } } notifyListeners(); + inputNode.requestFocus(); } close() {