parent
7db743624b
commit
c8eb1d7346
@ -0,0 +1,115 @@
|
||||
import 'package:akuCommunity/utils/network/base_list_model.dart';
|
||||
import 'package:akuCommunity/utils/network/net_util.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_easyrefresh/easy_refresh.dart';
|
||||
|
||||
/// ## BeeListView
|
||||
///```dart
|
||||
///BeeListView(
|
||||
/// path: API.someAPI,
|
||||
/// convert: (model) {
|
||||
/// return model.tableList
|
||||
/// .map((e) => SomeModel.fromJson(e))
|
||||
/// .toList();
|
||||
/// },
|
||||
/// controller: _refreshController,
|
||||
/// builder: (items) {
|
||||
/// return ListView.builder(
|
||||
/// itemBuilder: (context, index) {
|
||||
/// return _buildSomeItem(items[index]);
|
||||
/// },
|
||||
/// itemCount: items.length,
|
||||
/// );
|
||||
/// },
|
||||
///)
|
||||
///```
|
||||
class BeeListView<T> extends StatefulWidget {
|
||||
///API path
|
||||
final String path;
|
||||
|
||||
///same as EasyRefreshController
|
||||
final EasyRefreshController controller;
|
||||
|
||||
///转换器
|
||||
///
|
||||
///BaseListModel to T
|
||||
///
|
||||
///T is a tableList item.
|
||||
///
|
||||
///```dart
|
||||
///...
|
||||
///convert: (model) {
|
||||
/// return model.tableList
|
||||
/// .map((e) => SomeModel.fromJson(e))
|
||||
/// .toList();
|
||||
///},
|
||||
///...
|
||||
///```
|
||||
final List<T> Function(BaseListModel model) convert;
|
||||
|
||||
///子组件构造器
|
||||
final Widget Function(List<T> items) builder;
|
||||
|
||||
///每页记录数
|
||||
final int size;
|
||||
|
||||
///额外的参数
|
||||
final Map<String, dynamic> extraParams;
|
||||
BeeListView({
|
||||
Key key,
|
||||
this.path,
|
||||
@required this.controller,
|
||||
this.convert,
|
||||
this.builder,
|
||||
this.size = 10,
|
||||
this.extraParams,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
_BeeListViewState<T> createState() => _BeeListViewState<T>();
|
||||
}
|
||||
|
||||
class _BeeListViewState<T> extends State<BeeListView> {
|
||||
int _pageNum = 1;
|
||||
BaseListModel _model = BaseListModel.zero();
|
||||
List<T> _models = [];
|
||||
Map<String, dynamic> get _params {
|
||||
Map<String, dynamic> tempMap = {
|
||||
'pageNum': _pageNum,
|
||||
'size': widget.size,
|
||||
};
|
||||
tempMap.addAll(widget.extraParams ?? {});
|
||||
return tempMap;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return EasyRefresh(
|
||||
controller: widget.controller,
|
||||
header: MaterialHeader(),
|
||||
footer: MaterialFooter(),
|
||||
onRefresh: () async {
|
||||
_pageNum = 1;
|
||||
_model = await NetUtil().getList(
|
||||
widget.path,
|
||||
params: _params,
|
||||
);
|
||||
_models = widget.convert(_model);
|
||||
setState(() {});
|
||||
},
|
||||
firstRefresh: true,
|
||||
onLoad: () async {
|
||||
_pageNum++;
|
||||
_model = await NetUtil().getList(
|
||||
widget.path,
|
||||
params: _params,
|
||||
);
|
||||
_models.addAll(widget.convert(_model) as List<T>);
|
||||
if (_pageNum >= _model.pageCount)
|
||||
widget.controller.finishLoad(noMore: true);
|
||||
setState(() {});
|
||||
},
|
||||
child: widget.builder(_models),
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue