buildPopupMenuLayout method
Implementation
LayoutBuilder buildPopupMenuLayout(Offset offset) {
return LayoutBuilder(builder: (context, constraints) {
return GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
dismiss();
},
onVerticalDragStart: (DragStartDetails details) {
dismiss();
},
onHorizontalDragStart: (DragStartDetails details) {
dismiss();
},
child: Container(
child: Stack(
children: <Widget>[
// Triangle arrow paint
Positioned(
left: _showRect.left + _showRect.width / 2.0 - 7.5,
top: _isTriangleDown ? offset.dy + (customHeight ?? popupHeight()) : (offset.dy - arrowHeight),
child: CustomPaint(
size: Size(15.0, arrowHeight),
painter: TrianglePainter(
isDown: _isTriangleDown,
color: _backgroundColor,
triangleDirection: triangleDirection != null ? triangleDirection! : TriangleDirection.Straight,
),
),
),
// Widgets
Positioned(
left: offset.dx,
top: offset.dy,
child: Card(
elevation: popupElevation ?? 0,
margin: EdgeInsets.zero,
shape: RoundedRectangleBorder(
borderRadius: popupBorderRadius ?? BorderRadius.circular(10.0),
),
child: Container(
width: popupWidth(),
height: displayBelowWidget ? customHeight : (customHeight ?? popupHeight()),
child: Column(
children: <Widget>[
ClipRRect(
borderRadius: popupBorderRadius ?? BorderRadius.circular(10.0),
child: Container(
width: popupWidth(),
height: displayBelowWidget ? customHeight : (customHeight ?? popupHeight()),
padding: EdgeInsets.all(5.0),
decoration: BoxDecoration(
color: _backgroundColor,
borderRadius: popupBorderRadius ?? BorderRadius.circular(10.0),
),
child: GestureDetector(
onTap: () {
itemClicked(item);
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: item.itemWidget != null
? [item.itemWidget!]
: [
item.getIconWidget!,
Text(
'${item.getTitle}',
style: item.getTextStyle,
textAlign: item.getTextAlign,
overflow: displayBelowWidget ? TextOverflow.clip : TextOverflow.ellipsis,
),
],
),
),
),
),
],
),
),
),
)
],
),
),
);
});
}