Flutter 轻松构建加载更多(loading more),【一篇文章搞懂】

本文详细介绍了如何在Flutter中构建加载更多功能。通过定义`LoadingMoreBase`契约类和`TuChongRepository`数据源,实现了列表的加载、刷新和状态控制。同时提供了`LoadingMoreList`组件,用于在ListView和GridView中展示加载更多效果,支持Sliver组件的`LoadingMoreCustomScrollView`。文章还给出了具体的代码示例,帮助开发者快速理解和实现加载更多功能。
摘要由CSDN通过智能技术生成

QQ群:181398081

不哭乖站起来继续写bug,Flutter bug builder 马上上代码。

无图无真相,先上一个图。 首先我们也来定义个LoadingMoreBase 契约类

class LoadingMoreBase extends ListBase
with _LoadingMoreBloc, RefreshBase {
var _array = [];

@override
T operator [](int index) {
// TODO: implement []
return _array[index];
}

@override
void operator []=(int index, T value) {
// TODO: implement []=
_array[index] = value;
}

bool get hasMore => true;
bool isLoading = false;

IndicatorStatus indicatorStatus = IndicatorStatus.None;

Future loadMore() async {
if (isLoading || !hasMore) return true;
// TODO: implement loadMore

var preStatus = indicatorStatus;
indicatorStatus = this.length == 0
? IndicatorStatus.FullScreenBusying
: IndicatorStatus.LoadingMoreBusying;

if (preStatus == IndicatorStatus.Error) {
onStateChanged(this);
}
isLoading = true;
var isSuccess = await loadData();
isLoading = false;
if (isSuccess) {
if (this.length == 0) indicatorStatus = IndicatorStatus.Empty;
} else {
indicatorStatus = IndicatorStatus.Error;
}
onStateChanged(this);
return isSuccess;
}

Future loadData() async {
return true;
}

@override
Future onRefresh() async {
// TODO: implement OnRefresh
}

@override
int get length => _array.length;
set length(int newLength) => _array.length = newLength;

@override
void onStateChanged(LoadingMoreBase source) {
// TODO: implement notice
super.onStateChanged(source);
}
}

class _LoadingMoreBloc {
final _rebuild = new StreamController<LoadingMoreBase>.broadcast();
Str

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值