build method
chat bubble builder method
Implementation
@override
Widget build(BuildContext context) {
bool stateTick = false;
Icon? stateIcon;
if (sent) {
stateTick = true;
stateIcon = Icon(
Icons.done,
size: 18,
color: Color(0xFF97AD8E),
);
}
if (delivered) {
stateTick = true;
stateIcon = Icon(
Icons.done_all,
size: 18,
color: Color(0xFF97AD8E),
);
}
if (seen) {
stateTick = true;
stateIcon = Icon(
Icons.done_all,
size: 18,
color: Color(0xFF92DEDA),
);
}
final bool showStatusArea = stateTick || timestamp != null || isEdited;
final Color forwardedColor =
(textStyle.color ?? Colors.black87).withOpacity(0.6);
return Row(
children: <Widget>[
isSender
? Expanded(
child: SizedBox(
width: 5,
),
)
: leading ?? Container(),
Container(
color: Colors.transparent,
constraints: constraints ??
BoxConstraints(maxWidth: MediaQuery.of(context).size.width * .8),
margin: margin,
padding: padding,
child: GestureDetector(
onTap: onTap,
onDoubleTap: onDoubleTap,
onLongPress: onLongPress,
child: Container(
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(bubbleRadius),
topRight: Radius.circular(bubbleRadius),
bottomLeft: Radius.circular(tail
? isSender
? bubbleRadius
: 0
: defaultBubbleRadius),
bottomRight: Radius.circular(tail
? isSender
? 0
: bubbleRadius
: defaultBubbleRadius),
),
),
child: Padding(
padding:
const EdgeInsets.symmetric(vertical: 6, horizontal: 12),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (isForwarded)
BubbleForwardedHeader(color: forwardedColor),
SelectableText(
text,
style: textStyle,
textAlign: TextAlign.left,
),
if (showStatusArea)
Align(
alignment: Alignment.centerRight,
child: Padding(
padding: const EdgeInsets.only(top: 2),
child: BubbleStatusRow(
stateIcon: stateTick ? stateIcon : null,
isEdited: isEdited,
timestamp: timestamp,
textColor: textStyle.color ?? Colors.black87,
),
),
),
],
),
),
),
),
),
if (isSender && trailing != null) SizedBox.shrink(),
],
);
}