Merge pull request #498 from pangeachat/move-chat-buttons

Move chat buttons
This commit is contained in:
ggurdin 2024-07-26 11:42:16 -04:00 committed by GitHub
commit 04ee98aa11
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 123 additions and 57 deletions

View file

@ -112,6 +112,7 @@ class ChatController extends State<ChatPageWithRoom>
with WidgetsBindingObserver {
// #Pangea
final PangeaController pangeaController = MatrixState.pangeaController;
late Choreographer choreographer = Choreographer(pangeaController, this);
// Pangea#
Room get room => sendingClient.getRoomById(roomId) ?? widget.room;

View file

@ -83,6 +83,17 @@ class ChatEmojiPicker extends StatelessWidget {
],
),
),
// #Pangea
Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: FloatingActionButton(
onPressed: controller.hideEmojiPicker,
shape: const CircleBorder(),
mini: true,
child: const Icon(Icons.close),
),
),
// Pangea#
],
),
)

View file

@ -3,14 +3,18 @@ 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/utils/account_config.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/chat_settings_popup_menu.dart';
import 'package:fluffychat/widgets/connection_status_header.dart';
import 'package:fluffychat/widgets/matrix.dart';
@ -22,10 +26,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 }
@ -274,9 +275,6 @@ class ChatView extends StatelessWidget {
// ),
// )
// : null,
floatingActionButton: ChatFloatingActionButton(
controller: controller,
),
// Pangea#
body:
// #Pangea
@ -404,22 +402,32 @@ class ChatView extends StatelessWidget {
),
],
)
: Column(
mainAxisSize: MainAxisSize.min,
children: [
const ConnectionStatusHeader(),
ITBar(
choreographer:
controller.choreographer,
),
ReactionsPicker(controller),
ReplyDisplay(controller),
ChatInputRow(controller),
ChatEmojiPicker(controller),
],
),
:
// #Pangea
null,
// Column(
// mainAxisSize: MainAxisSize.min,
// children: [
// const ConnectionStatusHeader(),
// ITBar(
// choreographer:
// controller.choreographer,
// ),
// ReactionsPicker(controller),
// ReplyDisplay(controller),
// ChatInputRow(controller),
// ChatEmojiPicker(controller),
// ],
// ),
// Pangea#
),
),
// #Pangea
// Keep messages above minimum input bar height
SizedBox(
height: (PlatformInfos.isMobile ? 24 : 50),
),
// Pangea#
],
),
),
@ -436,9 +444,69 @@ class ChatView extends StatelessWidget {
// ),
// ),
Positioned(
left: 20,
bottom: 75,
child: StartIGCButton(controller: controller),
left: 0,
right: 0,
bottom: 16,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
if (!controller.selectMode)
Container(
margin: EdgeInsets.only(
bottom: 10,
left: bottomSheetPadding,
right: bottomSheetPadding,
),
constraints: const BoxConstraints(
maxWidth: FluffyThemes.columnWidth * 2.4,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
StartIGCButton(
controller: controller,
),
ChatFloatingActionButton(
controller: controller,
),
],
),
),
Container(
margin: EdgeInsets.only(
bottom: bottomSheetPadding,
left: bottomSheetPadding,
right: bottomSheetPadding,
),
constraints: const BoxConstraints(
maxWidth: FluffyThemes.columnWidth * 2.5,
),
alignment: Alignment.center,
child: Material(
clipBehavior: Clip.hardEdge,
color: Theme.of(context)
.colorScheme
.surfaceContainerHighest,
borderRadius: const BorderRadius.all(
Radius.circular(24),
),
child: Column(
children: [
const ConnectionStatusHeader(),
ITBar(
choreographer: controller.choreographer,
),
ReactionsPicker(controller),
ReplyDisplay(controller),
ChatInputRow(controller),
ChatEmojiPicker(controller),
],
),
),
),
],
),
),
// Pangea#
],

View file

@ -1,9 +1,8 @@
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import '../../../config/app_config.dart';
class ReplyContent extends StatelessWidget {

View file

@ -1,9 +1,8 @@
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import '../../config/themes.dart';
import 'chat.dart';
import 'events/reply_content.dart';

View file

@ -58,13 +58,10 @@ class LanguagePermissionsButtons extends StatelessWidget {
),
);
return Padding(
padding: const EdgeInsets.only(bottom: 56.0),
child: FloatingActionButton(
mini: true,
child: const Icon(Icons.history_edu_outlined),
onPressed: () => showMessage(context, text),
),
return FloatingActionButton(
mini: true,
child: const Icon(Icons.history_edu_outlined),
onPressed: () => showMessage(context, text),
);
}

View file

@ -67,14 +67,11 @@ class ChatFloatingActionButtonState extends State<ChatFloatingActionButton> {
return const SizedBox.shrink();
}
if (widget.controller.showScrollDownButton) {
return Padding(
padding: const EdgeInsets.only(bottom: 56.0),
child: FloatingActionButton(
onPressed: widget.controller.scrollDown,
heroTag: null,
mini: true,
child: const Icon(Icons.arrow_downward_outlined),
),
return FloatingActionButton(
onPressed: widget.controller.scrollDown,
heroTag: null,
mini: true,
child: const Icon(Icons.arrow_downward_outlined),
);
}
if (widget.controller.choreographer.errorService.error != null) {

View file

@ -58,10 +58,9 @@ class ToolbarDisplayController {
);
}
void showToolbar(
BuildContext context, {
MessageMode? mode,
}) {
void showToolbar(BuildContext context, {MessageMode? mode}) {
// Close keyboard, if open
FocusManager.instance.primaryFocus?.unfocus();
bool toolbarUp = true;
if (highlighted) return;
if (controller.selectMode) {
@ -87,12 +86,13 @@ class ToolbarDisplayController {
if (targetOffset.dy < 320) {
final spaceBeneath = MediaQuery.of(context).size.height -
(targetOffset.dy + transformTargetSize.height);
if (spaceBeneath >= 320) {
toolbarUp = false;
}
// If toolbar is open, opening toolbar beneath without scrolling can cause issues
// if (spaceBeneath >= 320) {
// toolbarUp = false;
// }
// See if it's possible to scroll up to make space
else if (controller.scrollController.offset - targetOffset.dy + 320 >=
if (controller.scrollController.offset - targetOffset.dy + 320 >=
controller.scrollController.position.minScrollExtent &&
controller.scrollController.offset - targetOffset.dy + 320 <=
controller.scrollController.position.maxScrollExtent) {
@ -152,13 +152,7 @@ class ToolbarDisplayController {
? CrossAxisAlignment.end
: CrossAxisAlignment.start,
children: [
toolbarUp
// Column is limited to screen height
// If message portion is too tall, decrease toolbar height
// as necessary to prevent toolbar from acting strange
// Problems may still occur if toolbar height is decreased too much
? toolbar!
: overlayMessage,
toolbarUp ? toolbar! : overlayMessage,
const SizedBox(height: 6),
toolbarUp ? overlayMessage : toolbar!,
],