Use stack, minimize footer shifting messages

pull/1384/head
Kelrap 1 year ago
parent d4febba12e
commit e8a4005a12

@ -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<ChatPageWithRoom>
// #Pangea
final PangeaController pangeaController = MatrixState.pangeaController;
final GlobalKey<ChatFooterState> chatFooterKey = GlobalKey<ChatFooterState>();
// final GlobalKey<ChatFooterState> chatFooterKey = GlobalKey<ChatFooterState>();
late Choreographer choreographer = Choreographer(pangeaController, this);
// Pangea#
@ -381,6 +380,13 @@ class ChatController extends State<ChatPageWithRoom>
setState(() {});
}
// #Pangea
void closeEmojiPicker() {
showEmojiPicker = false;
updateView();
}
// Pangea#
Future<void>? loadTimelineFuture;
int? animateInEventIndex;

@ -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: <Widget>[
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#
],
),

@ -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<ChatFooter> {
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),
],
),
);
}
}
Loading…
Cancel
Save