import 'package:http/http.dart' as http;
2 import 'dart:convert';
3
4 void main() {
5 runApp(MyApp());
6 }
7
8 class MyApp extends StatelessWidget {
9 @override
10 Widget build(BuildContext context) {
11 return MaterialApp(
12 home: MyHomePage(),
13 );
14 }
15 }
16
17 class MyHomePage extends StatefulWidget {
18 @override
19 _MyHomePageState createState() => _MyHomePageState();
20 }
21
22 class _MyHomePageState extends State<MyHomePage> {
23 final _scrollController = ScrollController();
24 final _list = <String>[];
25 int _currentPage = 1;
26
27 @override
28 void initState() {
29 super.initState();
30 _scrollController.addListener(_loadMore);
31 _fetchData(_currentPage);
32 }
33
34 @override
35 void dispose() {
36 _scrollController.dispose();
37 super.dispose();
38 }
39
40 Future<void> _fetchData(int pageKey) async {
41 final response = await http.get('https://api.example.com/items?page=$pageKey');
42 if (response.statusCode == 200) {
43 setState(() {
44 _list.addAll(List<String>.from(json.decode(response.body)));
45 });
46 } else {
47 throw Exception('Failed to load data');
48 }
49 }
50
51 void _loadMore() {
52 if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent) {
53 _currentPage++;
54 _fetchData(_currentPage);
55 }
56 }
57
58 @override
59 Widget build(BuildContext context) {
60 return Scaffold(
61 appBar: AppBar(
62 title: Text('API Pagination Example'),
63 ),
64 body: ListView.builder(
65 controller: _scrollController,
66 itemCount: _list.length,
67 itemBuilder: (BuildContext context, int index) {
68 return ListTile(
69 title: Text(_list[index]),
70 );
71 },
72 ),
73 );
74 }
75 }
76