import 'package:flutter/material.dart'; import 'dart:async'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class SeamlessAutoScroll extends StatefulWidget { final List items; final double itemHeight; final Duration scrollInterval; const SeamlessAutoScroll({ Key? key, required this.items, this.itemHeight = 120.0, this.scrollInterval = const Duration(seconds: 2), }) : super(key: key); @override _AutoScrollListState createState() => _AutoScrollListState(); } class _AutoScrollListState extends State { final ScrollController _scrollController = ScrollController(); Timer? _timer; int _currentIndex = 0; @override void initState() { super.initState(); _startAutoScroll(); } @override void dispose() { _timer?.cancel(); _scrollController.dispose(); super.dispose(); } void _startAutoScroll() { _timer = Timer.periodic(widget.scrollInterval, (timer) { if (_currentIndex < widget.items.length) { // 滚动到下一个项目 _scrollController.animateTo( _currentIndex * widget.itemHeight, duration: const Duration(milliseconds: 550), curve: Curves.easeIn, ); _currentIndex++; } else { // 滚动到底部后回到顶部重新开始 _currentIndex = 0; _scrollController.jumpTo(0); } }); } @override Widget build(BuildContext context) { return Container( height: 110.w, // 固定容器高度 decoration: BoxDecoration(borderRadius: BorderRadius.circular(8)), child: ListView.builder( controller: _scrollController, physics: const NeverScrollableScrollPhysics(), // 禁用手动滚动 itemCount: widget.items.length, itemBuilder: (context, index) { return Container( height: widget.itemHeight, alignment: Alignment.centerLeft, child: widget.items[index], ); }, ), ); } }