Flutter局部刷新组件

当界面复杂,嵌套多个子widget时,经常有刷新单个或者局部widget的需求,每次写业务时创建GlobalKey太繁琐不够优雅,使用provider状态控制类刷新可能功能又过重。习惯命令式刷新的同学,可以参考此文

RefreshableStatefulWidget

abstract class RefreshableStatefulWidget extends StatefulWidget {
  RefreshableStatefulWidget({Key key})
      : super(key: key is GlobalKey ? key : GlobalKey());

  void reload() {
    if (key is! GlobalKey) {
      return;
    }
    final aKey = key as GlobalKey;
    aKey.currentState.setState(() {});
  }
}

RefreshableView

class RefreshableView extends RefreshableStatefulWidget {
  final Widget Function(BuildContext cntext) builder;

  RefreshableView({Key key, @required this.builder})
      : assert(builder != null),
        super(key: key);

  @override
  State<StatefulWidget> createState() {
    return _RefreshableViewState(builder);
  }
}

class _RefreshableViewState extends State<RefreshableView> {
  final Widget Function(BuildContext cntext) builder;
  _RefreshableViewState(this.builder);

  @override
  Widget build(BuildContext context) {
    return builder(context);
  }
}

使用

  • 构建
 _aRefreshableView = RefreshableView(builder: (BuildContext context) {
  return ListView.builder(
           itemCount: 10,
           itemBuilder: (BuildContext context, int index) {
           return Text("data$index");
         });
 });
  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
        navigationBar: _navigationBar,
        child: Column(
          children: <Widget>[
            Text("data"),
            Image.asset("image"),
            _aRefreshableView
          ],
        ));
  }
  • 刷新ListView
await request(); 
_aRefreshableView.reload(); // 网络请求回调后reload

推荐自维护的一个Flutter下载器及相关文章:
al_downloader
Flutter 下载器 al_downloader

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转自 Q吹个大气球Q 本文主要介绍了Flutter布局相关的内容,对相关知识点进行了梳理,并从实际例子触发,进一步...
    chilim阅读 2,008评论 0 17
  • 本文主要介绍了Flutter布局相关的内容,对相关知识点进行了梳理,并从实际例子触发,进一步讲解该如何去进行布局。...
    Q吹个大气球Q阅读 10,214评论 6 51
  • 1. 简介 在介绍Flutter布局之前,我们得先了解Flutter中的一些布局相关的特性。 1.1 边界约束(b...
    24K纯城阅读 557评论 0 0
  • 床上的老太太双眼紧闭,呼吸微弱。抢救了几日得知回天无力时,已停止救治。想来,在弥留之际,也是希望让老太太少受一点罪...
    北渔说阅读 411评论 4 4
  • 当冷漠为常态,一切亲情就会淡化。生活总是许多无奈,寻求根本改变的方法才是出路。一个家庭没了生气,也就没了热闹。 初...
    牛一y阅读 299评论 5 5

友情链接更多精彩内容