build method
dynamic
build( - dynamic context,
- dynamic ref
)
Implementation
@override
Widget build(BuildContext context, WidgetRef ref) {
final message = ref.watch(
chatInputProvider.select((state) => state.selectedMessage),
);
if (message == null) {
// shouldn’t ever happen in reality
return const SizedBox.shrink();
}
final myId = ref.watch(myUserIdStrProvider);
final isAuthor = (myId == message.author.id);
bool isTextMessage = false;
if (message is TextMessage) {
isTextMessage = true;
}
return Container(
padding: const EdgeInsets.all(8),
constraints: const BoxConstraints(maxWidth: 200),
margin: !isAuthor
? const EdgeInsets.only(top: 4)
: const EdgeInsets.only(top: 4),
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(5)),
color: Theme.of(context).colorScheme.surface,
),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
makeMenuItem(
pressed: () =>
ref.read(chatInputProvider.notifier).setReplyToMessage(message),
text: Text(L10n.of(context).reply),
icon: const Icon(Icons.reply_rounded, size: 18),
),
if (isTextMessage)
makeMenuItem(
pressed: () => onCopyMessage(context, ref, message),
text: Text(L10n.of(context).copyMessage),
icon: const Icon(Icons.copy_all_outlined, size: 14),
),
if (isAuthor)
makeMenuItem(
pressed: () => onPressEditMessage(context, ref, roomId, message),
text: Text(L10n.of(context).edit),
icon: const Icon(Atlas.pencil_box_bold, size: 14),
),
if (!isAuthor)
makeMenuItem(
pressed: () => onReportMessage(context, message, roomId),
text: Text(
L10n.of(context).report,
style: TextStyle(color: Theme.of(context).colorScheme.error),
),
icon: Icon(
Icons.flag_outlined,
size: 14,
color: Theme.of(context).colorScheme.error,
),
),
// FIXME: should be a check whether the user can redact.
if (isAuthor)
makeMenuItem(
pressed: () => onDeleteOwnMessage(
context,
ref,
message.remoteId ?? message.id,
roomId,
),
text: Text(
L10n.of(context).delete,
style: TextStyle(color: Theme.of(context).colorScheme.error),
),
icon: Icon(
Atlas.trash_can_thin,
size: 14,
color: Theme.of(context).colorScheme.error,
),
),
],
),
);
}