opt marquee

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-08-29 14:49:24 +08:00
parent 6e1bc8d0e7
commit 6741333367
2 changed files with 55 additions and 36 deletions

View File

@@ -5,12 +5,18 @@ class MarqueeText extends StatelessWidget {
final double maxWidth;
final String text;
final TextStyle? style;
final int? count;
final bool bounce;
final double spacing;
const MarqueeText(
this.text, {
super.key,
required this.maxWidth,
this.style,
super.key,
this.count,
this.bounce = true,
this.spacing = 0,
});
@override
@@ -22,18 +28,21 @@ class MarqueeText extends StatelessWidget {
),
textDirection: TextDirection.ltr,
maxLines: 1,
)..layout(maxWidth: maxWidth);
)..layout();
final width = textPainter.width;
final child = Text(
text,
style: style,
maxLines: 1,
textDirection: TextDirection.ltr,
);
if (textPainter.didExceedMaxLines) {
if (width > maxWidth) {
return SingleWidgetMarquee(
child,
duration: const Duration(seconds: 5),
bounce: true,
duration: Duration(milliseconds: (width / 50 * 1000).round()),
bounce: bounce,
count: count,
spacing: spacing,
);
} else {
return child;
@@ -46,6 +55,7 @@ class SingleWidgetMarquee extends StatefulWidget {
final Duration? duration;
final bool bounce;
final double spacing;
final int? count;
const SingleWidgetMarquee(
this.child, {
@@ -53,6 +63,7 @@ class SingleWidgetMarquee extends StatefulWidget {
this.duration,
this.bounce = false,
this.spacing = 0,
this.count,
});
@override
@@ -65,7 +76,7 @@ class _SingleWidgetMarqueeState extends State<SingleWidgetMarquee>
vsync: this,
duration: widget.duration,
reverseDuration: widget.duration,
)..repeat(reverse: widget.bounce);
)..repeat(reverse: widget.bounce, count: widget.count);
@override
Widget build(BuildContext context) => widget.bounce

View File

@@ -1956,7 +1956,11 @@ class HeaderControlState extends TripleState<HeaderControl> {
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LayoutBuilder(
Padding(
padding: isPortrait
? EdgeInsets.zero
: const EdgeInsets.only(right: 10),
child: LayoutBuilder(
builder: (context, constraints) {
return Obx(
() {
@@ -1978,6 +1982,9 @@ class HeaderControlState extends TripleState<HeaderControl> {
return MarqueeText(
title,
maxWidth: constraints.maxWidth,
count: 3,
bounce: false,
spacing: 30,
style: const TextStyle(
color: Colors.white,
fontSize: 16,
@@ -1987,6 +1994,7 @@ class HeaderControlState extends TripleState<HeaderControl> {
);
},
),
),
if (introController.isShowOnlineTotal)
Obx(
() => Text(