From 4222b37bb41a0344d708ba2ccb570ba050ec211f Mon Sep 17 00:00:00 2001 From: Kelrap Date: Thu, 18 Jul 2024 15:13:27 -0400 Subject: [PATCH] Attempt 3. Needs work. --- lib/pages/chat/chat.dart | 4 ++ lib/pages/chat/chat_view.dart | 26 +++---------- lib/pangea/widgets/chat/chat_footer.dart | 48 ++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 lib/pangea/widgets/chat/chat_footer.dart diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index e1af6a2c0..4cb8b962e 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -24,6 +24,7 @@ import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; import 'package:fluffychat/pangea/utils/report_message.dart'; +import 'package:fluffychat/pangea/widgets/chat/chat_footer.dart'; import 'package:fluffychat/pangea/widgets/chat/message_toolbar.dart'; import 'package:fluffychat/pangea/widgets/igc/pangea_text_controller.dart'; import 'package:fluffychat/utils/error_reporter.dart'; @@ -112,6 +113,9 @@ class ChatController extends State with WidgetsBindingObserver { // #Pangea final PangeaController pangeaController = MatrixState.pangeaController; + + final GlobalKey chatFooterKey = GlobalKey(); + late Choreographer choreographer = Choreographer(pangeaController, this); // Pangea# Room get room => sendingClient.getRoomById(roomId) ?? widget.room; diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 36e6d69dc..077613559 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -5,14 +5,12 @@ 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_event_list.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'; 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/chat_footer.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'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import 'package:fluffychat/widgets/unread_rooms_badge.dart'; @@ -22,10 +20,7 @@ import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import '../../pangea/choreographer/widgets/it_bar.dart'; import '../../utils/stream_extension.dart'; -import 'chat_emoji_picker.dart'; -import 'chat_input_row.dart'; enum _EventContextAction { info, report } @@ -404,19 +399,9 @@ class ChatView extends StatelessWidget { ), ], ) - : Column( - mainAxisSize: MainAxisSize.min, - children: [ - const ConnectionStatusHeader(), - ITBar( - choreographer: - controller.choreographer, - ), - ReactionsPicker(controller), - ReplyDisplay(controller), - ChatInputRow(controller), - ChatEmojiPicker(controller), - ], + : ChatFooter( + controller, + key: controller.chatFooterKey, ), ), ), @@ -437,7 +422,8 @@ class ChatView extends StatelessWidget { // ), Positioned( left: 20, - bottom: 75, + bottom: + controller.chatFooterKey.currentState?.height ?? 100, child: StartIGCButton(controller: controller), ), // Pangea# diff --git a/lib/pangea/widgets/chat/chat_footer.dart b/lib/pangea/widgets/chat/chat_footer.dart new file mode 100644 index 000000000..3235916e1 --- /dev/null +++ b/lib/pangea/widgets/chat/chat_footer.dart @@ -0,0 +1,48 @@ +import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:fluffychat/pages/chat/chat_emoji_picker.dart'; +import 'package:fluffychat/pages/chat/chat_input_row.dart'; +import 'package:fluffychat/pages/chat/reactions_picker.dart'; +import 'package:fluffychat/pages/chat/reply_display.dart'; +import 'package:fluffychat/pangea/choreographer/widgets/it_bar.dart'; +import 'package:fluffychat/widgets/connection_status_header.dart'; +import 'package:flutter/material.dart'; + +class ChatFooter extends StatefulWidget { + final ChatController controller; + const ChatFooter( + this.controller, { + super.key, + }); + + @override + ChatFooterState createState() => ChatFooterState(); +} + +class ChatFooterState extends State { + final GlobalKey _widgetKey = GlobalKey(); + + double? get height => _widgetKey.currentContext?.size?.height; + + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Column( + key: _widgetKey, + mainAxisSize: MainAxisSize.min, + children: [ + const ConnectionStatusHeader(), + ITBar( + choreographer: widget.controller.choreographer, + ), + ReactionsPicker(widget.controller), + ReplyDisplay(widget.controller), + ChatInputRow(widget.controller), + ChatEmojiPicker(widget.controller), + ], + ); + } +}