build method

  1. @override
Widget build(
  1. BuildContext context
)
override

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(),
    ],
  );
}