[英]Flutter List View Item occupy screen height and snap to next item on scroll
[英]Flutter how to Programmatically scroll to the next item in the list?
僅當您知道要滾動的確切寬度時才能完成。 使用scrollController
ScrollController scrollController = ScrollController(
initialScrollOffset: 100, // or whatever offset you wish
keepScrollOffset: true,
);
您可以使用提供AutoScrollTag
的scroll_to_index package 。
class ST extends StatefulWidget {
const ST({Key? key}) : super(key: key);
@override
_STState createState() => _STState();
}
class _STState extends State<ST> {
final AutoScrollController controller = AutoScrollController();
late List<Widget> items;
int _currentFocusedIndex = 0;
@override
void initState() {
items = List.generate(
33,
(index) => AutoScrollTag(
key: ValueKey(index),
controller: controller,
index: index,
child: Container(
height: 100,
width: 100,
alignment: Alignment.center,
color: index.isEven ? Colors.deepOrange : Colors.deepPurple,
child: Text(index.toString()),
),
),
);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Row(
children: [
IconButton(
onPressed: () {
_currentFocusedIndex--;
if (_currentFocusedIndex < 0) {
_currentFocusedIndex = items.length - 1;
}
controller.scrollToIndex(_currentFocusedIndex,
preferPosition: AutoScrollPosition.begin);
setState(() {});
},
icon: const Icon(Icons.arrow_back_ios_new_sharp),
),
Expanded(
child: ListView(
scrollDirection: Axis.horizontal,
controller: controller,
children: items,
),
),
IconButton(
onPressed: () {
_currentFocusedIndex++;
if (_currentFocusedIndex > items.length) {
_currentFocusedIndex = 0;
}
controller.scrollToIndex(_currentFocusedIndex,
preferPosition: AutoScrollPosition.begin);
setState(() {});
},
icon: const Icon(Icons.arrow_forward_ios_sharp),
),
],
),
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.