| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import 'package:flutter/material.dart';
- import 'package:marquee/marquee.dart';
- typedef MarqueeBuilder = Marquee Function(
- BuildContext context, String text, TextStyle textStyle);
- typedef TextBuilder = Text Function(
- BuildContext context, String text, TextStyle textStyle);
- class MarqueeText extends StatelessWidget {
- final String text;
- final TextStyle textStyle;
- final double containerWidth;
- final TextBuilder textBuilder;
- final MarqueeBuilder marqueeBuilder;
- const MarqueeText({
- super.key,
- required this.marqueeBuilder,
- required this.textBuilder,
- required this.text,
- required this.textStyle,
- required this.containerWidth,
- });
- static MarqueeText marquee(
- {required String text,
- required TextStyle textStyle,
- required double containerWidth,
- double velocity = 18.0,
- double blankSpace = 20}) {
- return MarqueeText(
- text: text,
- textStyle: textStyle,
- containerWidth: containerWidth,
- textBuilder: (context, text, textStyle) {
- return Text(text, style: textStyle);
- },
- marqueeBuilder: (context, text, textStyle) {
- return Marquee(
- text: text,
- style: textStyle,
- blankSpace: blankSpace,
- velocity: velocity);
- },
- );
- }
- Size calculateTextSize(String text, TextStyle style) {
- final TextPainter textPainter = TextPainter(
- text: TextSpan(text: text, style: style),
- maxLines: 1,
- textDirection: TextDirection.ltr)
- ..layout(minWidth: 0, maxWidth: double.infinity);
- return textPainter.size;
- }
- @override
- Widget build(BuildContext context) {
- final textWidth = calculateTextSize(text, textStyle).width;
- return textWidth < containerWidth
- ? textBuilder(context, text, textStyle)
- : marqueeBuilder(context, text, textStyle);
- }
- }
|