mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt: sponsor block
This commit is contained in:
8
lib/common/widgets/pair.dart
Normal file
8
lib/common/widgets/pair.dart
Normal file
@@ -0,0 +1,8 @@
|
||||
class Pair<T, R> {
|
||||
Pair({
|
||||
required this.first,
|
||||
required this.second,
|
||||
});
|
||||
T first;
|
||||
R second;
|
||||
}
|
||||
49
lib/common/widgets/segment_progress_bar.dart
Normal file
49
lib/common/widgets/segment_progress_bar.dart
Normal file
@@ -0,0 +1,49 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class Segment {
|
||||
final double start;
|
||||
final double end;
|
||||
final Color color;
|
||||
|
||||
Segment(this.start, this.end, this.color);
|
||||
}
|
||||
|
||||
class SegmentProgressBar extends CustomPainter {
|
||||
final double progress;
|
||||
final List<Segment> segmentColors;
|
||||
|
||||
SegmentProgressBar({
|
||||
required this.progress,
|
||||
required this.segmentColors,
|
||||
});
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
final paint = Paint()..style = PaintingStyle.fill;
|
||||
|
||||
for (var segment in segmentColors) {
|
||||
paint.color = segment.color;
|
||||
final segmentStart = segment.start * size.width;
|
||||
final segmentEnd = segment.end * size.width;
|
||||
final progressEnd = progress * size.width;
|
||||
|
||||
if (progressEnd < segmentStart) {
|
||||
break;
|
||||
}
|
||||
|
||||
final segmentWidth =
|
||||
(progressEnd < segmentEnd ? progressEnd : segmentEnd) - segmentStart;
|
||||
if (segmentWidth > 0) {
|
||||
canvas.drawRect(
|
||||
Rect.fromLTWH(segmentStart, 0, segmentWidth, size.height),
|
||||
paint,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(covariant CustomPainter oldDelegate) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user