Files
Qlyra/lib/core/utils/bubble_radius.dart

82 lines
1.7 KiB
Dart

import 'package:flutter/widgets.dart';
import '../config/app_bubble_behavior.dart';
import '../config/app_bubble_shape.dart';
const double kBubbleBigRadius = 20;
const double kBubbleSmallRadius = 4;
const Radius _big = Radius.circular(kBubbleBigRadius);
const Radius _small = Radius.circular(kBubbleSmallRadius);
BorderRadius computeBubbleRadius({
required bool isMe,
required bool isTop,
required bool isBottom,
required BubbleStyle style,
required BubbleBehavior behavior,
bool hasPhotoWithCaption = false,
bool hasMultiplePhotosNoCaption = false,
}) {
final isSingle = isTop && isBottom;
if (hasPhotoWithCaption && (isTop || isBottom)) {
return BorderRadius.only(
topLeft: _big,
topRight: _big,
bottomLeft: isMe ? _big : _small,
bottomRight: _small,
);
}
if (hasMultiplePhotosNoCaption && isBottom) {
return BorderRadius.only(
topLeft: isMe ? _big : _small,
topRight: _small,
bottomLeft: isMe ? _big : _small,
bottomRight: isMe ? _small : _big,
);
}
final base = style == BubbleStyle.desktop ? _small : _big;
Radius tl = base, tr = base, bl = base, br = base;
if (behavior == BubbleBehavior.immutable || isSingle) {
return BorderRadius.only(
topLeft: tl,
topRight: tr,
bottomLeft: bl,
bottomRight: br,
);
}
if (isTop) {
if (isMe) {
br = _small;
} else {
bl = _small;
}
} else if (isBottom) {
if (isMe) {
tr = _small;
} else {
tl = _small;
}
} else {
if (isMe) {
tr = _small;
br = _small;
} else {
tl = _small;
bl = _small;
}
}
return BorderRadius.only(
topLeft: tl,
topRight: tr,
bottomLeft: bl,
bottomRight: br,
);
}