flutter 代码控制List View刷新问题

在使用Flukit包的InfiniteListView时,作者遇到了代码控制刷新的问题。通过结合网上找到的解决方案和官方文档,作者修改了源码,创建了MyInfiniteListView,并解决了在没有数据时上拉刷新无效的问题。此外,还提到了在弹框返回值时刷新ListView无效,可能是因为时机问题,通过延时处理解决了这一异常情况。
摘要由CSDN通过智能技术生成

List View刷新


我用的InfiniteListView,是flukit包的一个组件,直接拿来用还是挺好用的,只是代码控制刷新的时候遇到一些问题,代码控制刷新要修改源码,之前在网上看到有人加了一个refreshKey控制上拉刷新,但是在没有数据的时候,上拉刷新是无效的,要点击界面才能刷新,所以还必须要代码控制listView的刷新,于是到官网看到也有人遇到同样的问题,于是结合两种方法实现,解决当前问题:

 final GlobalKey<RefreshIndicatorState> refreshIndicatorKey = new GlobalKey<RefreshIndicatorState>();
  InfiniteListViewRefreshController refreshControllers = new InfiniteListViewRefreshController();
  eventBus.on<RefreshEvent>().listen((event) async {
    if(refreshIndicatorKey.currentState != null){
      refreshIndicatorKey.currentState.show();
    }else{
      refreshControllers.refresh(true);
    }
  });

MyInfiniteListView<Items>(
 	refreshController: refreshControllers,
   	refreshKey: refreshIndicatorKey,
   	emptyBuilder: (VoidCallback refresh, BuildContext context) {
    return listNoDataView(refresh, context);
},)

MyInfiniteListView代码如下:

import 'dart:async';
import 'package:flutter/material.dart';

///扩充自InfiniteListView。地址: https://github.com/flutterchina/flukit
/// 扩充了参数 refreshKey 作用:用户外部获取RefreshIndicator的State,通过代码触发刷新
/// if return `true`, indicates no more data;
typedef RetrieveDataCallback<T> = Future<bool> Function(
    int page, List<T> items, bool refresh);
typedef ItemBuilder<T> = Widget Function(T e, BuildContext ctx);
typedef IndexedItemBuilder<T> = Widget Function(
    List<T> list, int index, BuildContext ctx);

typedef LoadErrorCallback = void Function(dynamic e, bool isFirstPage);

class LoadingState<T> {
  //Save data
  List<T> items = [];
  dynamic error;
  bool loading = false;
  int currentPage = 0;
  bool noMore = false;

  bool get initialized => items.isNotEmpty || noMore;
}
class InfiniteListViewRefreshController {
  Future Function(bool) refreshFunc;
  void refresh(bool pullDown) {
    if(refreshFunc!=null) refreshFunc(pullDown);
  }
}
class MyInfiniteListView<T>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值