diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 4cb8b962e..bd0462401 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -24,7 +24,6 @@ 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'; @@ -114,7 +113,7 @@ class ChatController extends State // #Pangea final PangeaController pangeaController = MatrixState.pangeaController; - final GlobalKey chatFooterKey = GlobalKey(); + // final GlobalKey chatFooterKey = GlobalKey(); late Choreographer choreographer = Choreographer(pangeaController, this); // Pangea# @@ -381,6 +380,13 @@ class ChatController extends State setState(() {}); } + // #Pangea + void closeEmojiPicker() { + showEmojiPicker = false; + updateView(); + } + // Pangea# + Future? loadTimelineFuture; int? animateInEventIndex; diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index f2d9f68fe..783ccbb6a 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -3,14 +3,19 @@ import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; 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'; +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/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'; @@ -296,22 +301,57 @@ class ChatView extends StatelessWidget { child: Column( children: [ Expanded( - child: GestureDetector( - onTap: controller.clearSingleSelectedEvent, - child: Builder( - builder: (context) { - if (controller.timeline == null) { - return const Center( - child: CircularProgressIndicator.adaptive( - strokeWidth: 2, + child: Stack( + children: [ + GestureDetector( + onTap: controller.clearSingleSelectedEvent, + child: Builder( + builder: (context) { + if (controller.timeline == null) { + return const Center( + child: + CircularProgressIndicator.adaptive( + strokeWidth: 2, + ), + ); + } + return ChatEventList( + controller: controller, + ); + }, + ), + ), + Positioned( + left: 0, + right: 0, + bottom: 7, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (!controller.selectMode) + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + StartIGCButton( + controller: controller, + ), + ChatFloatingActionButton( + controller: controller, + ), + ], + ), + const ConnectionStatusHeader(), + ITBar( + choreographer: controller.choreographer, ), - ); - } - return ChatEventList( - controller: controller, - ); - }, - ), + // if (!controller.selectMode) + ReplyDisplay(controller), + ], + ), + ), + ], ), ), if (controller.room.canSendDefaultMessages && @@ -410,9 +450,11 @@ class ChatView extends StatelessWidget { // ChatInputRow(controller), // ChatEmojiPicker(controller), // ], - : ChatFooter( - controller, - key: controller.chatFooterKey, + : Column( + children: [ + ReactionsPicker(controller), + ChatInputRow(controller), + ], ), // Pangea# ), @@ -433,19 +475,34 @@ class ChatView extends StatelessWidget { // ), // ), Positioned( - left: 7, - bottom: 50 + - (controller.chatFooterKey.currentState?.height ?? 50), - child: StartIGCButton(controller: controller), + bottom: 0, + left: 0, + right: 0, + child: ChatEmojiPicker(controller), ), - Positioned( - right: 7, - bottom: 50 + - (controller.chatFooterKey.currentState?.height ?? 50), - child: ChatFloatingActionButton( - controller: controller, + // Close button placed at bottom of emoji picker + if (controller.showEmojiPicker) + Positioned( + left: 0, + right: 0, + bottom: 5, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FloatingActionButton( + onPressed: controller.closeEmojiPicker, + backgroundColor: Colors.black, + shape: const CircleBorder(), + heroTag: null, + mini: true, + child: const Icon( + Icons.close, + size: 20, + ), + ), + ], + ), ), - ), // Pangea# ], ), diff --git a/lib/pangea/widgets/chat/chat_footer.dart b/lib/pangea/widgets/chat/chat_footer.dart deleted file mode 100644 index f47ebf193..000000000 --- a/lib/pangea/widgets/chat/chat_footer.dart +++ /dev/null @@ -1,59 +0,0 @@ -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 { - double? height; - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) { - setState(() { - height = context.size!.height; - }); - }); - } - - @override - Widget build(BuildContext context) { - return NotificationListener( - onNotification: (_) { - if (height != context.size!.height) { - height = context.size!.height; - widget.controller.updateView(); - } - return true; - }, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - const ConnectionStatusHeader(), - ITBar( - choreographer: widget.controller.choreographer, - ), - ReactionsPicker(widget.controller), - ReplyDisplay(widget.controller), - ChatInputRow(widget.controller), - ChatEmojiPicker(widget.controller), - ], - ), - ); - } -}