49 lines
1.2 KiB
Dart
49 lines
1.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
class GradientLine extends StatelessWidget {
|
|
final double height;
|
|
final Color color;
|
|
|
|
const GradientLine({
|
|
Key? key,
|
|
this.height = 4.0,
|
|
required this.color,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return LayoutBuilder(
|
|
builder: (context, constraints) {
|
|
return CustomPaint(
|
|
size: Size(constraints.maxWidth, height),
|
|
painter: _GradientLinePainter(color: color),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|
|
|
|
class _GradientLinePainter extends CustomPainter {
|
|
final Color color;
|
|
|
|
_GradientLinePainter({required this.color});
|
|
|
|
@override
|
|
void paint(Canvas canvas, Size size) {
|
|
final Paint paint = Paint()
|
|
..shader = LinearGradient(
|
|
colors: [
|
|
color.withOpacity(0.0), // 左端透明
|
|
color.withOpacity(1.0), // 中间最深
|
|
color.withOpacity(0.0), // 右端透明
|
|
],
|
|
stops: [0.0, 0.5, 1.0],
|
|
).createShader(Rect.fromLTWH(0, 0, size.width, size.height));
|
|
|
|
canvas.drawRect(Rect.fromLTWH(0, 0, size.width, size.height), paint);
|
|
}
|
|
|
|
@override
|
|
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
|
|
}
|