import 'package:recon/client_holder.dart'; import 'package:recon/models/message.dart'; import 'package:recon/widgets/messages/message_asset.dart'; import 'package:recon/widgets/messages/message_audio_player.dart'; import 'package:recon/widgets/messages/message_session_invite.dart'; import 'package:recon/widgets/messages/message_text.dart'; import 'package:flutter/material.dart'; class MessageBubble extends StatelessWidget { const MessageBubble({required this.message, super.key}); final Message message; @override Widget build(BuildContext context) { final bool mine = message.senderId == ClientHolder.of(context).apiClient.userId; final colorScheme = Theme.of(context).colorScheme; final foregroundColor = mine ? colorScheme.onPrimaryContainer : colorScheme.onSurfaceVariant; final backgroundColor = mine ? colorScheme.primaryContainer : colorScheme.surfaceVariant; return Padding( padding: EdgeInsets.only(left: mine ? 32 : 12, bottom: 16, right: mine ? 12 : 32), child: Row( mainAxisAlignment: mine ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ Material( borderRadius: BorderRadius.circular(16), color: backgroundColor, textStyle: Theme.of(context).textTheme.bodySmall?.copyWith(color: foregroundColor), child: Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8), child: switch (message.type) { MessageType.sessionInvite => MessageSessionInvite(message: message, foregroundColor: foregroundColor,), MessageType.object => MessageAsset(message: message, foregroundColor: foregroundColor,), MessageType.sound => MessageAudioPlayer(message: message, foregroundColor: foregroundColor,), MessageType.unknown || MessageType.text => MessageText(message: message, foregroundColor: foregroundColor,) }, ), ), ], ), ); } }