效果
实现代码如下
home_page.dart
import 'dart:convert';
import 'dart:ffi';
import 'package:flutter/material.dart';
import 'package:flutterwncq/constants/constants.dart' show AppUrls;
import 'package:flutterwncq/models/index_data_bean.dart';
import 'package:flutterwncq/utils/net_utils.dart';
import 'package:flutterwncq/widgets/error.dart';
import 'package:flutterwncq/widgets/home_list_item.dart';
import 'package:flutterwncq/widgets/loading.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
IndexdataBean _data;
bool _showLoading = false;
bool _isFirst = true;
@override
Widget build(BuildContext context) {
return RefreshIndicator(
onRefresh: _pullToRefresh,
child: _buildListView(),
);
}
Future<Void> _pullToRefresh() async {
_indexData();
}
_buildListView() {
if (_data == null|| _showLoading) {
if(_isFirst || _showLoading) {
_isFirst = false;
_showLoading = false;
_indexData();
}
return Loading();//加载中视图
}
if(_data.errcode!='200'){
return Error(
onRetry: (){
setState(() {
_showLoading = true;
});
},
);//加载出错显示的视图
}
//成功加载数据 显示界面
return ListView.separated(
padding: const EdgeInsets.all(0.0),
itemBuilder: (context,index){
return HomeListItem(
indexDatas: _data.data.indexDatas[index],
);
},
separatorBuilder: (context,index)=>Container(height: 2,),
itemCount: _data.data.indexDatas.length,
);
}
//网络加载数据
void _indexData() {
var params = new Map<String, dynamic>();
params['pageV