请移步评论 用官方的吧

前言

在使用GlobalKey局部刷新方式中介绍了如何通过GlobalKey实现局部刷新优化性能,只是每次我们进行局部刷新的时候 都需要定义widget、定义state、实现build方法等。教程还是不错的,简单易懂,但是在实际使用过程中就不免有些许麻烦。今天我们通过一个小技巧来实现一个通用的局部刷新Widget

实现思路

当widget需要进行刷新时,我们可以通过调用widget的setState方法来实现,setState随后会调用State的build方法来进行重建

//请求刷新

setState((){

});

复制代码

#State

@override

Widget build(BuildContext context) {

//构建新的Widget

return new Text(_text);

}

复制代码

那么,如果 我们能将 build方法中的

return new Text(_text);

复制代码

暴漏出去,我们就可以实现通用的 局部刷新 Widget

实现方案

接口回调,将

return new Text(_text);

复制代码

暴漏给调用者来实现即可

用typedef function实现

//定义函数别名

typedef BuildWidget = Widget Function();

复制代码

将函数别名 BuildWidget 作为参数,传递到State.build方法即可

完整代码

/*

* 封装的局部刷新Widget

*/

typedef BuildWidget = Widget Function();

class PartRefreshWidget extends StatefulWidget {

final Key key;

BuildWidget child;

// 接收一个Key

PartRefreshWidget(this.key, this.child);

@override

State createState() {

print("createState");

return PartRefreshWidgetState(child);

}

}

class PartRefreshWidgetState extends State {

BuildWidget child;

PartRefreshWidgetState(this.child);

@override

Widget build(BuildContext context) {

return child.call();

}

void update() {

setState(() {});

}

}

复制代码

使用

//1、创建一个globalKey

GlobalKey globalKey=GlobalKey();

int _counter = 0;

复制代码

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title:Text(widget.title),

),

body: Center(

child: Column(

mainAxisAlignment: MainAxisAlignment.center,

children: [

PartRefreshWidget(globalKey,(){

//2、使用 创建一个widget

return Text(_counter.toString());

}),

//update:09-29

//另外一个widget,测试局部刷新

//注:此处在局部刷新时,不会刷新

Text(_counter.toString()),

],

),

),

floatingActionButton: FloatingActionButton(

onPressed: (){

//3、修改数值

_counter++;

//4、开始刷新

globalKey.currentState.update();

},

tooltip: 'Increment',

child: Icon(Icons.add),

),

);

}

复制代码

flutter怎么手动刷新_Flutter 小技巧实现通用的局部刷新相关推荐

  1. flutter text 最大长度_Flutter小技巧之TextField换行自适应

    无论哪种界面框架输入文本框都是非常重要的控件, 但是发现flutter中的输入框TextField介绍的虽然多,但是各个属性怎么组合满足需要很多文章却说不清楚, 再加上控件版本变更频繁很多功能的介绍都 ...

  2. listview刷新_Flutter NestedScrollView 滑动折叠头部下拉刷新效果

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. 本实例运行效果如下 : //启动函数void main() { runApp(Root ...

  3. 小程序中scroll-view的下拉刷新和小程序页面的下拉刷新开启方法

    scroll-view的下拉刷新 video.wxml中 <scroll-view class="videoScroll" scroll-y="true" ...

  4. ajax 刷新output,JSF生命周期及AJAX局部刷新

    这些时间可能一直得搞JSF...... 呵呵,这个星期天再一次的仔细的研究了一下这个所谓的6个生命周期的运行情况以及所谓的AJAX局部刷新的问题. 看了core JSF里详细描述的JSF的生命周期,基 ...

  5. html刷新某块区域,javascript如何实现局部刷新?

    AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 J ...

  6. 前端局部自动刷新_通过iframe实现页面的局部刷新

    一个网站是由许许多多页面组成的,超链接将这些页面连接起来,给了用户一个完整的使用体验.用户通过超链接打开一个页面时,浏览器会回收当前页面然后再渲染新页面.有时候我们并不希望是这样,比如对于一个音乐网站 ...

  7. Flutter开发常见问题,解决小技巧

    1.Android Studio 4.0 以上打包编译报错: Execution failed for task ':app:lintVitalRelease'. > Could not res ...

  8. android局部布局刷新,Android RecyclerView 局部刷新分析

    前情回顾 之前写的 PowerAdapter 和 SelectPowerAdapter 从创建到现在,已经两年多,期间发生了翻天覆地的变化.一开始,我把 SwipeRefreshLayout 和 Re ...

  9. RecyclerView 配合 DiffUtil,RecyclerView局部刷新

    一个问题: 每次从服务器取到数据后,都是调用adapter.notifyDataSetChanged();进行刷新.那局部刷新(adapter.notifyItemChanged();)的这些东西不是 ...

最新文章

  1. delphi FillChar的用法(转)
  2. 动态链接库的创建和调用方法
  3. SAP Fiori Elements 应用里和 Fiori 3 相关的外观设置
  4. OpenCL、OpenGL 同时工作
  5. c++ 23种设计模式_使用Go实现GoF的23种设计模式(三)
  6. (转)OL2中设置鼠标的样式
  7. java 静态导入 import static
  8. 编译实验 . 递归下降分析器
  9. matlab右下方箭头,matlab绘制箭头arrow
  10. Android App Bundle 和Unity AAB BundleTools
  11. 项目前期准备的重要性
  12. 性能猛兽野火STM32H743 V2开发板跑Linux 5.10,分数爆炸1836.884644
  13. Progress ThemeBuilder updated Crack
  14. 大数据实时计算流程介绍
  15. 查看文本是linux格式还是windows格式;以及实现linux文本格式和linux文本格式转换
  16. 设计模式系列-Builder模式(高效构建参数)
  17. 【BMI指数计算器V1.0】项目实战
  18. Python读取netCDF中的group/组中的变量
  19. 解决The page at ‘xxx‘ was loaded over HTTPS
  20. 可穿戴功能性近红外光谱成像在自然环境中的应用

热门文章

  1. java连接navicat_如何使用Navicat连接Oracle
  2. 视觉SLAM-显示相机的位姿
  3. 英雄联盟修复返回服务器异常,玩LOL英雄联盟在XP中服务器连接异常退出的恢复步骤...
  4. graphpad prism显著性差异分析_【市场表现】2020年第三季度企业债利差分析
  5. 郑州轻工业学校计算机网络,计算机网络期末考试a卷(郑州轻工业学院).doc
  6. python回到首行_python读取文件首行和最后一行
  7. mysql经典四表查询_mysql经典问题四表查询(教师,学生,成绩,课程表)
  8. centos安装redis并客户端连接_网络共享打印机图文教程,电脑客户端连接安装设置共享打印机方法...
  9. java基础语法的书_第一章--Java基础语法
  10. Spring mvc配置文件