import 'dart:async'; import 'package:flutter/material.dart'; class Marquee extends StatefulWidget { Widget child; double offset; Marquee({Key? key, required this.child, required this.offset}) : super(key: key); @override State createState() => _MarqueeState(); } class _MarqueeState extends State { late ScrollController controller; late Timer timer; double stepOffset = 50.0; Duration duration = const Duration(seconds: 5); // @override // void initState() { // // TODO: implement initState // super.initState(); // controller = ScrollController(initialScrollOffset: widget.offset); // timer = Timer.periodic(const Duration(milliseconds: 100), (timer) { // double newOffset = controller.offset + stepOffset; // if (newOffset != widget.offset) { // widget.offset = newOffset; // controller.animateTo(widget.offset, // duration: duration, curve: Curves.linear); // } // }); // } @override void initState() { // TODO: implement initState super.initState(); controller = ScrollController(initialScrollOffset: widget.offset); double i = 0.5; timer = Timer.periodic(const Duration(milliseconds: 50), (timer) { i=i+0.5; controller.jumpTo(widget.offset + i); }); } @override void dispose() { // TODO: implement dispose timer.cancel(); controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return ListView.builder( scrollDirection: Axis.horizontal, physics: const NeverScrollableScrollPhysics(), controller: controller, itemBuilder: (context, index) { return widget.child; }); } }