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

View File

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