Lazy Loading
class LazyLoadingList extends StatefulWidget { @override _LazyLoadingListState createState() => _LazyLoadingListState(); } class _LazyLoadingListState extends State<LazyLoadingList> { final _scrollController = ScrollController(); final _itemsPerPage = 10; var _loadedItems = 0; var _items = <String>[]; @override void initState() { _scrollController.addListener(_scrollListener); super.initState(); } @override void dispose() { _scrollController.dispose(); super.dispose(); } void _scrollListener() { if (_scrollController.offset >= _scrollController.position.maxScrollExtent && !_scrollController.position.outOfRange) { _loadMoreItems(); } } Future<void> _loadMoreItems() async { await Future.delayed(Duration(seconds: 1)); // simulate network latency setState(() { _items.addAll(_generateItems(_loadedItems, _itemsPerPage)); _loadedItems += _itemsPerPage; }); } List<String> _generateItems(int start, int count) { return List.generate(count, (index) => 'Item ${start + index + 1}'); } @override Widget build(BuildContext context) { return ListView.builder( controller: _scrollController, itemCount: _items.length + 1, itemBuilder: (context, index) { if (index == _items.length) { return Center(child: CircularProgressIndicator()); } else { return ListTile(title: Text(_items[index])); } }, ); } }