import 'package:flutter/material.dart'; class RoundedRectIndicator extends Decoration { final BoxPainter _painter; RoundedRectIndicator({ @required Color color, @required double radius, double padding = 0.0, double weight = 3.0, }) : _painter = _RectPainter(color, radius, padding, weight); @override BoxPainter createBoxPainter([onChanged]) { return _painter; } } class _RectPainter extends BoxPainter { final Paint _paint; final double radius; final double padding; final double weight; final indicatorPaddingBottom = 4.0; _RectPainter(Color color, this.radius, this.padding, this.weight) : _paint = Paint() ..color = color ..isAntiAlias = true; @override void paint(Canvas canvas, Offset offset, ImageConfiguration cfg) { var width = cfg.size.width; var height = cfg.size.height; var left = 0.0; var top = height - indicatorPaddingBottom; var right = width; var bottom = height - weight - indicatorPaddingBottom; //calculate offset left = left + offset.dx + padding; right = right + offset.dx - padding; var rect = RRect.fromLTRBAndCorners(left, top, right, bottom, topLeft: Radius.circular(radius), bottomLeft: Radius.circular(radius), bottomRight: Radius.circular(radius), topRight: Radius.circular(radius)); canvas.drawRRect(rect, _paint); } }