Pay attention!
If you need a regular (not rotated) text at the corner of widgets please consider to use Stack with Containers and Text widgets.
This package was developed to provide auto rotation of TextSpans.
Example
Take a look at the provided example application for how to use the CornerDecoration.
How to use

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Color(0xffffd700),
badgeSize: Size(16, 16),
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.red,
spanBaselineShift: 4,
badgeSize: Size(64, 64),
badgeCornerRadius: Radius.circular(8),
badgePosition: BadgePosition.topStart,
textSpan: TextSpan(
text: 'OMG',
style: TextStyle(
color: Colors.white,
fontSize: 12,
letterSpacing: 1,
fontWeight: FontWeight.bold,
shadows: [
BoxShadow(color: Colors.yellowAccent, blurRadius: 8),
],
),
),
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.blue,
badgeSize: Size(64, 64),
textSpan: TextSpan(
text: 'Multiline\nbadge',
style: TextStyle(fontSize: 10),
),
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.black87,
badgeSize: Size(64, 64),
spanBaselineShift: 2,
textSpan: TextSpan(
children: [
TextSpan(
text: 'LOREM\n',
style: TextStyle(
fontSize: 10,
fontWeight: FontWeight.bold,
color: Colors.redAccent,
),
),
TextSpan(
text: 'IPSUM',
style: TextStyle(
fontSize: 7,
fontStyle: FontStyle.italic,
letterSpacing: 5,
color: Colors.yellow,
),
),
],
),
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.brown,
badgeSize: Size(112, 56),
textSpan: TextSpan(
text: 'WEIRD BADGE',
style: TextStyle(fontSize: 10),
),
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.blueGrey,
badgeSize: Size(64, 64),
textSpan: TextSpan(
text: 'WOW',
style: TextStyle(fontSize: 10),
),
spanHorizontalOffset: -12,
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.green,
badgeSize: Size(64, 64),
textSpan: TextSpan(
text: 'SHIFT 1',
style: TextStyle(fontSize: 10, backgroundColor: Colors.black),
),
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.green,
badgeSize: Size(64, 64),
spanBaselineShift: 3,
textSpan: TextSpan(
text: 'SHIFT 4',
style: TextStyle(fontSize: 10, backgroundColor: Colors.black),
),
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withGradient(
gradient: LinearGradient(
begin: Alignment.topRight,
end: Alignment.bottomLeft,
colors: [Colors.blue, Colors.lightGreenAccent],
),
badgeSize: Size(64, 64),
),
decoration: RotatedCornerDecoration.withGradient(
badgePosition: BadgePosition.topStart,
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.topRight,
stops: [0, 0.5, 1],
colors: [
Colors.purpleAccent,
Colors.amber,
Colors.blue,
],
),
badgeSize: Size(64, 64),
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withGradient(
gradient: RadialGradient(
center: Alignment.topRight,
radius: 1.5,
stops: const [0, 0.25, 0.5],
colors: [
Colors.redAccent,
Colors.redAccent.withOpacity(0.5),
Colors.redAccent.withOpacity(0),
],
),
badgeSize: const Size(64, 64),
),
decoration: RotatedCornerDecoration.withGradient(
badgePosition: BadgePosition.topStart,
gradient: SweepGradient(
center: const FractionalOffset(0.27, -0.65),
colors: List.generate(360, _generator),
),
badgeSize: const Size(64, 64),
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.lightBlue,
badgeSize: Size(64, 64),
badgeShadow: BadgeShadow(color: Colors.black, elevation: 4),
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.indigo,
badgeSize: Size(64, 64),
badgePosition: BadgePosition.bottomStart,
textDirection: TextDirection.ltr,
),
),

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.indigo,
badgeSize: Size(64, 64),
badgePosition: BadgePosition.bottomStart,
textDirection: TextDirection.rtl,
),
),
EXPERIMENTAL FEATURE!
use isEmoji: true to disable span rotating
you can shift span position with spanHorizontalOffset and TextStyle.height parameters

Container(
foregroundDecoration: RotatedCornerDecoration.withColor(
color: Colors.purple,
badgeSize: Size(64, 64),
isEmoji: true,
textSpan: TextSpan(
text: '🤮',
style: TextStyle(fontSize: 20, height: 1.7),
),
),
),