From 0fd90af759d4bdf9c720e7457bdec3da4663c540 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Wed, 8 Jan 2020 20:01:52 +0100 Subject: [PATCH] Add copy function --- lib/components/list_items/message.dart | 23 +++++++++++++++++++++++ lib/components/message_content.dart | 7 +++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/components/list_items/message.dart b/lib/components/list_items/message.dart index b13bbce..275a181 100644 --- a/lib/components/list_items/message.dart +++ b/lib/components/list_items/message.dart @@ -4,6 +4,7 @@ import 'package:fluffychat/components/dialogs/redact_message_dialog.dart'; import 'package:fluffychat/components/message_content.dart'; import 'package:fluffychat/utils/chat_time.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import '../avatar.dart'; import '../matrix.dart'; @@ -43,6 +44,25 @@ class Message extends StatelessWidget { ), ); } + + if (!event.redacted && + [ + MessageTypes.Text, + MessageTypes.Reply, + MessageTypes.Location, + MessageTypes.Notice, + MessageTypes.Emote, + MessageTypes.None, + ].contains(event.messageType) && + event.getBody().isNotEmpty) { + popupMenuList.add( + const PopupMenuItem( + value: "copy", + child: Text('Copy'), + ), + ); + } + if (ownMessage && event.status == -1) { popupMenuList.add( const PopupMenuItem( @@ -75,6 +95,9 @@ class Message extends StatelessWidget { case "delete": await event.remove(); break; + case "copy": + await Clipboard.setData(ClipboardData(text: event.getBody())); + break; } }, itemBuilder: (BuildContext context) => popupMenuList, diff --git a/lib/components/message_content.dart b/lib/components/message_content.dart index 809adfd..700fb9f 100644 --- a/lib/components/message_content.dart +++ b/lib/components/message_content.dart @@ -114,9 +114,12 @@ class MessageContent extends StatelessWidget { ? "You: " : "${event.sender.calcDisplayname()}: " : ""; + final String body = event.redacted + ? "Redacted by ${event.redactedBecause.sender.calcDisplayname()}" + : senderPrefix + event.getBody(); if (textOnly) { return Text( - senderPrefix + event.getBody(), + body, maxLines: maxLines, overflow: TextOverflow.ellipsis, style: TextStyle( @@ -127,7 +130,7 @@ class MessageContent extends StatelessWidget { ); } return LinkText( - text: senderPrefix + event.getBody(), + text: body, textStyle: TextStyle( color: textColor, decoration: event.redacted ? TextDecoration.lineThrough : null,