import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:video_player/video_player.dart'; void main() { runApp(new MaterialApp( title: 'Container demo', home: new MyListview(), )); } class MyListview extends StatefulWidget { @override State<StatefulWidget> createState() { // TODO: implement createState return _ListViewState(); } } class _ListViewState extends State<MyListview> { //lv数据集合 List<String> _list = List.generate(20, (i) => '原始数据${i + 1}'); ScrollController _scrollController; //是否正在加载,防止多次请求加载下一页 bool isLoadingMore = false; @override void initState() { super.initState(); //初始化ScrollController _scrollController = ScrollController(); //监听lv是否滚动到底部 _scrollController.addListener(() { if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent) { //滚动到了底部 print('滚动到底部了'); _loadMore(); } }); } @override void dispose() { super.dispose(); //移除监听 _scrollController.dispose(); } @override Widget build(BuildContext context) { // TODO: implement build return Scaffold( appBar: AppBar( title: Text("列表的下拉刷新和上拉加载"), ), body: Container( child: RefreshIndicator( child: ListView.builder( // itemBuilder: (context, index) => ListTile( itemBuilder: (context, index) { if (index < _list.length) { return ListTile( title: Text(_list[index]), ); } else { //最后一页 return _buildLoadMoreItem(); } }, itemCount: _list.length + 1, controller: _scrollController, ), onRefresh: _handleRefresh, ), ), ); } //下拉刷新的方法 Future<Null> _handleRefresh() async { //模拟数据的延迟加载 await Future.delayed(Duration(seconds: 2), () { setState(() { //在列表开头添加几条数据 List<String> _refreshData = List.generate(5, (i) => '下拉刷新数据${i + 1}'); _list.insertAll(0, _refreshData); }); }); } //上拉加载 Future<Null> _loadMore() async { //模拟延迟加载 if (!isLoadingMore) { setState(() { isLoadingMore = true; }); await Future.delayed(Duration(seconds: 2), () { setState(() { isLoadingMore = false; List<String> _loadMoreData = List.generate(5, (i) => '上拉加载数据${i + i}'); _list.addAll(_loadMoreData); }); }); } } //加载更多的布局 Widget _buildLoadMoreItem() { return Center( child: Padding( padding: EdgeInsets.all(10.0), child: Text("加载中..."), )); } }
Flutter-Listview实现上拉加载和下拉刷新
最新推荐文章于 2024-11-12 10:22:20 发布
