getOuterPath method
生成外轮廓路径
- 创建圆角矩形主体
- 根据offset/position计算箭头位置
- 组合路径形成对话框气泡形状 @return 包含箭头的气泡路径
Implementation
@override
/// 生成外轮廓路径
///
/// 1. 创建圆角矩形主体
/// 2. 根据offset/position计算箭头位置
/// 3. 组合路径形成对话框气泡形状
/// @return 包含箭头的气泡路径
Path getOuterPath(Rect rect, {TextDirection? textDirection}) {
Path a = Path()
..addRRect(
RRect.fromRectAndRadius(
Rect.fromLTWH(rect.left, rect.top, rect.size.width,
rect.size.height - arrowSize.height),
Radius.circular(4),
),
);
double offset = this.offset;
if (position != null) {
if (position! >= 0) {
offset = position! / rect.size.width;
} else {
offset = (rect.size.width + position!) / rect.size.width;
}
}
Offset p1 = Offset(rect.size.width * offset + rect.left,
rect.size.height - arrowSize.height + rect.top);
Offset p2 = Offset(
rect.size.width * offset - arrowSize.width / 2 + rect.left,
rect.size.height + rect.top);
Offset p3 = Offset(rect.size.width * offset - arrowSize.width + rect.left,
rect.size.height - arrowSize.height + rect.top);
Path b = Path()..addPolygon([p1, p2, p3], true);
return Path.combine(PathOperation.xor, a, b);
}