From cace96545624cd5c16e9544812631b2d4add6032 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 20 Aug 2024 15:37:20 -0400 Subject: [PATCH] wrap chat input row in stateful widget and rebuild on choreo update to keep hint text and send button up-to-date --- lib/pages/chat/chat_input_row.dart | 10 +-- lib/pages/chat/chat_view.dart | 6 +- .../widgets/chat/input_bar_wrapper.dart | 65 +++---------------- 3 files changed, 17 insertions(+), 64 deletions(-) diff --git a/lib/pages/chat/chat_input_row.dart b/lib/pages/chat/chat_input_row.dart index b1174fd2c..bee8a1af8 100644 --- a/lib/pages/chat/chat_input_row.dart +++ b/lib/pages/chat/chat_input_row.dart @@ -1,9 +1,8 @@ import 'package:animations/animations.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; +import 'package:fluffychat/pages/chat/input_bar.dart'; import 'package:fluffychat/pangea/choreographer/widgets/send_button.dart'; import 'package:fluffychat/pangea/constants/language_constants.dart'; -import 'package:fluffychat/pangea/widgets/chat/input_bar_wrapper.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -34,7 +33,7 @@ class ChatInputRow extends StatelessWidget { controller.pangeaController.languageController.activeL2Model(); String hintText() { - if (controller.choreographer.choreoMode == ChoreoMode.it) { + if (controller.choreographer.itController.willOpen) { return L10n.of(context)!.buildTranslation; } return activel1 != null && @@ -322,10 +321,7 @@ class ChatInputRow extends StatelessWidget { Expanded( child: Padding( padding: const EdgeInsets.symmetric(vertical: 0.0), - // #Pangea - // child: InputBar( - child: InputBarWrapper( - // Pangea# + child: InputBar( room: controller.room, minLines: 1, maxLines: 8, diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 405e16418..4d04d3051 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -5,7 +5,6 @@ import 'package:fluffychat/pages/chat/chat_app_bar_list_tile.dart'; import 'package:fluffychat/pages/chat/chat_app_bar_title.dart'; import 'package:fluffychat/pages/chat/chat_emoji_picker.dart'; import 'package:fluffychat/pages/chat/chat_event_list.dart'; -import 'package:fluffychat/pages/chat/chat_input_row.dart'; import 'package:fluffychat/pages/chat/pinned_events.dart'; import 'package:fluffychat/pages/chat/reactions_picker.dart'; import 'package:fluffychat/pages/chat/reply_display.dart'; @@ -13,6 +12,7 @@ import 'package:fluffychat/pangea/choreographer/widgets/it_bar.dart'; import 'package:fluffychat/pangea/choreographer/widgets/start_igc_button.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; import 'package:fluffychat/pangea/widgets/chat/chat_floating_action_button.dart'; +import 'package:fluffychat/pangea/widgets/chat/input_bar_wrapper.dart'; import 'package:fluffychat/utils/account_config.dart'; import 'package:fluffychat/widgets/chat_settings_popup_menu.dart'; import 'package:fluffychat/widgets/connection_status_header.dart'; @@ -498,7 +498,9 @@ class ChatView extends StatelessWidget { ), ReactionsPicker(controller), ReplyDisplay(controller), - ChatInputRow(controller), + ChatInputRowWrapper( + controller: controller, + ), ChatEmojiPicker(controller), ], ), diff --git a/lib/pangea/widgets/chat/input_bar_wrapper.dart b/lib/pangea/widgets/chat/input_bar_wrapper.dart index 9441312bd..6c6f80218 100644 --- a/lib/pangea/widgets/chat/input_bar_wrapper.dart +++ b/lib/pangea/widgets/chat/input_bar_wrapper.dart @@ -1,48 +1,23 @@ import 'dart:async'; -import 'dart:typed_data'; -import 'package:fluffychat/pages/chat/input_bar.dart'; +import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:fluffychat/pages/chat/chat_input_row.dart'; import 'package:fluffychat/pangea/widgets/igc/pangea_text_controller.dart'; import 'package:flutter/material.dart'; -import 'package:matrix/matrix.dart'; -class InputBarWrapper extends StatefulWidget { - final Room room; - final int? minLines; - final int? maxLines; - final TextInputType? keyboardType; - final TextInputAction? textInputAction; - final ValueChanged? onSubmitted; - final ValueChanged? onSubmitImage; - final FocusNode? focusNode; - final PangeaTextController? controller; - final InputDecoration? decoration; - final ValueChanged? onChanged; - final bool? autofocus; - final bool readOnly; +class ChatInputRowWrapper extends StatefulWidget { + final ChatController controller; - const InputBarWrapper({ - required this.room, - this.minLines, - this.maxLines, - this.keyboardType, - this.onSubmitted, - this.onSubmitImage, - this.focusNode, - this.controller, - this.decoration, - this.onChanged, - this.autofocus, - this.textInputAction, - this.readOnly = false, + const ChatInputRowWrapper({ + required this.controller, super.key, }); @override - State createState() => InputBarWrapperState(); + State createState() => ChatInputRowWrapperState(); } -class InputBarWrapperState extends State { +class ChatInputRowWrapperState extends State { StreamSubscription? _choreoSub; String _currentText = ''; @@ -50,7 +25,7 @@ class InputBarWrapperState extends State { void initState() { // Rebuild the widget each time there's an update from choreo _choreoSub = - widget.controller?.choreographer.stateListener.stream.listen((_) { + widget.controller.choreographer.stateListener.stream.listen((_) { setState(() {}); }); super.initState(); @@ -63,10 +38,6 @@ class InputBarWrapperState extends State { } void refreshOnChange(String text) { - if (widget.onChanged != null) { - widget.onChanged!(text); - } - final bool decreasedFromMaxLength = _currentText.length >= PangeaTextController.maxLength && text.length < PangeaTextController.maxLength; @@ -81,21 +52,5 @@ class InputBarWrapperState extends State { } @override - Widget build(BuildContext context) { - return InputBar( - room: widget.room, - minLines: widget.minLines, - maxLines: widget.maxLines, - keyboardType: widget.keyboardType, - onSubmitted: widget.onSubmitted, - onSubmitImage: widget.onSubmitImage, - focusNode: widget.focusNode, - controller: widget.controller, - decoration: widget.decoration, - onChanged: refreshOnChange, - autofocus: widget.autofocus, - textInputAction: widget.textInputAction, - readOnly: widget.readOnly, - ); - } + Widget build(BuildContext context) => ChatInputRow(widget.controller); }