marquee 2.3.0 marquee: ^2.3.0 copied to clipboard
A Flutter widget that scrolls text infinitely. Provides many customizations including custom scroll directions, durations, curves as well as pauses after every round.
import 'package:flutter/material.dart';
import 'package:marquee/marquee.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool _useRtlText = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Marquee',
home: Scaffold(
backgroundColor: Colors.deepOrange,
body: ListView(
padding: EdgeInsets.only(top: 50),
children: [
_buildMarquee(),
_buildComplexMarquee(),
].map(_wrapWithStuff).toList(),
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () => setState(() => _useRtlText = !_useRtlText),
label: !_useRtlText
? const Text('Switch to Hebrew')
: const Text('החלף לאנגלית'),
backgroundColor: Colors.pink,
),
),
);
}
Widget _buildMarquee() {
return Marquee(
key: Key("$_useRtlText"),
text: !_useRtlText
? 'There once was a boy who told this story about a boy: "'
: 'פעם היה ילד אשר סיפר סיפור על ילד:"',
velocity: 50.0,
);
}
Widget _buildComplexMarquee() {
return Marquee(
key: Key("$_useRtlText"),
text: !_useRtlText
? 'Some sample text that takes some space.'
: 'זהו משפט ראשון של הטקסט הארוך. זהו המשפט השני של הטקסט הארוך',
style: TextStyle(fontWeight: FontWeight.bold),
scrollAxis: Axis.horizontal,
crossAxisAlignment: CrossAxisAlignment.start,
blankSpace: 20,
velocity: 100,
pauseAfterRound: Duration(seconds: 1),
showFadingOnlyWhenScrolling: true,
fadingEdgeStartFraction: 0.1,
fadingEdgeEndFraction: 0.1,
numberOfRounds: 3,
startPadding: 10,
accelerationDuration: Duration(seconds: 1),
accelerationCurve: Curves.linear,
decelerationDuration: Duration(milliseconds: 500),
decelerationCurve: Curves.easeOut,
textDirection: _useRtlText ? TextDirection.rtl : TextDirection.ltr,
);
}
Widget _wrapWithStuff(Widget child) {
return Padding(
padding: EdgeInsets.all(16),
child: Container(height: 50, color: Colors.white, child: child),
);
}
}