Improve chat message modal behavior
Modal is now summoned by long-pressing the username. Message is now copied by long-pressing the message.
This commit is contained in:
parent
1e557e0001
commit
2e52bbebda
2 changed files with 48 additions and 35 deletions
|
|
@ -112,6 +112,7 @@ class IRCMessage {
|
|||
required double emoteScale,
|
||||
required bool isLightTheme,
|
||||
required bool launchExternal,
|
||||
required void Function()? onLongPressName,
|
||||
bool showMessage = true,
|
||||
bool useZeroWidth = false,
|
||||
bool useReadableColors = false,
|
||||
|
|
@ -289,11 +290,16 @@ class IRCMessage {
|
|||
// debugPrint('NEW - NAME: ${tags['display-name']!}, HUE: ${hsl.hue}, SATURATION: ${hsl.saturation}, LIGHNTESS: ${hsl.lightness}');
|
||||
|
||||
span.add(
|
||||
TextSpan(
|
||||
text: tags['display-name']!,
|
||||
style: TextStyle(
|
||||
color: color,
|
||||
fontWeight: FontWeight.bold,
|
||||
WidgetSpan(
|
||||
child: InkWell(
|
||||
onLongPress: onLongPressName,
|
||||
child: Text(
|
||||
tags['display-name']!,
|
||||
style: TextStyle(
|
||||
color: color,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,39 @@ class ChatMessage extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
void onLongPressName() {
|
||||
if (isModal) return;
|
||||
|
||||
if (ircMessage.user == null && ircMessage.user == chatStore.auth.user.details?.login) return;
|
||||
|
||||
HapticFeedback.lightImpact();
|
||||
|
||||
showModalBottomSheet(
|
||||
backgroundColor: Colors.transparent,
|
||||
isScrollControlled: true,
|
||||
context: context,
|
||||
builder: (context) => ChatUserModal(
|
||||
chatStore: chatStore,
|
||||
username: ircMessage.user!,
|
||||
userId: ircMessage.tags['user-id']!,
|
||||
displayName: ircMessage.tags['display-name']!,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void onLongPressMessage() {
|
||||
HapticFeedback.lightImpact();
|
||||
|
||||
Clipboard.setData(ClipboardData(text: ircMessage.message));
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(
|
||||
content: AlertMessage(message: 'Message copied to clipboard'),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return Observer(
|
||||
builder: (context) {
|
||||
Color? color;
|
||||
|
|
@ -33,6 +66,7 @@ class ChatMessage extends StatelessWidget {
|
|||
renderMessage = Text.rich(
|
||||
TextSpan(
|
||||
children: ircMessage.generateSpan(
|
||||
onLongPressName: onLongPressName,
|
||||
style: DefaultTextStyle.of(context).style,
|
||||
assetsStore: chatStore.assetsStore,
|
||||
emoteScale: chatStore.settings.emoteScale,
|
||||
|
|
@ -58,6 +92,7 @@ class ChatMessage extends StatelessWidget {
|
|||
Text.rich(
|
||||
TextSpan(
|
||||
children: ircMessage.generateSpan(
|
||||
onLongPressName: onLongPressName,
|
||||
style: DefaultTextStyle.of(context).style,
|
||||
assetsStore: chatStore.assetsStore,
|
||||
emoteScale: chatStore.settings.emoteScale,
|
||||
|
|
@ -125,6 +160,7 @@ class ChatMessage extends StatelessWidget {
|
|||
Text.rich(
|
||||
TextSpan(
|
||||
children: ircMessage.generateSpan(
|
||||
onLongPressName: onLongPressName,
|
||||
style: DefaultTextStyle.of(context).style,
|
||||
assetsStore: chatStore.assetsStore,
|
||||
emoteScale: chatStore.settings.emoteScale,
|
||||
|
|
@ -171,36 +207,7 @@ class ChatMessage extends StatelessWidget {
|
|||
FocusScope.of(context).unfocus();
|
||||
if (chatStore.assetsStore.showEmoteMenu) chatStore.assetsStore.showEmoteMenu = false;
|
||||
},
|
||||
onLongPress: isModal
|
||||
? () {
|
||||
HapticFeedback.lightImpact();
|
||||
|
||||
Clipboard.setData(ClipboardData(text: ircMessage.message));
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(
|
||||
content: AlertMessage(message: 'Message copied to clipboard'),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
}
|
||||
: ircMessage.user != null && ircMessage.user != chatStore.auth.user.details?.login
|
||||
? () {
|
||||
HapticFeedback.lightImpact();
|
||||
|
||||
showModalBottomSheet(
|
||||
backgroundColor: Colors.transparent,
|
||||
isScrollControlled: true,
|
||||
context: context,
|
||||
builder: (context) => ChatUserModal(
|
||||
chatStore: chatStore,
|
||||
username: ircMessage.user!,
|
||||
userId: ircMessage.tags['user-id']!,
|
||||
displayName: ircMessage.tags['display-name']!,
|
||||
),
|
||||
);
|
||||
}
|
||||
: null,
|
||||
onLongPress: onLongPressMessage,
|
||||
child: coloredMessage,
|
||||
);
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue