flutter怎么手动刷新_Flutter 小技巧实现通用的局部刷新
请移步评论 用官方的吧
前言
在使用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 小技巧实现通用的局部刷新相关推荐
- flutter text 最大长度_Flutter小技巧之TextField换行自适应
无论哪种界面框架输入文本框都是非常重要的控件, 但是发现flutter中的输入框TextField介绍的虽然多,但是各个属性怎么组合满足需要很多文章却说不清楚, 再加上控件版本变更频繁很多功能的介绍都 ...
- listview刷新_Flutter NestedScrollView 滑动折叠头部下拉刷新效果
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. 本实例运行效果如下 : //启动函数void main() { runApp(Root ...
- 小程序中scroll-view的下拉刷新和小程序页面的下拉刷新开启方法
scroll-view的下拉刷新 video.wxml中 <scroll-view class="videoScroll" scroll-y="true" ...
- ajax 刷新output,JSF生命周期及AJAX局部刷新
这些时间可能一直得搞JSF...... 呵呵,这个星期天再一次的仔细的研究了一下这个所谓的6个生命周期的运行情况以及所谓的AJAX局部刷新的问题. 看了core JSF里详细描述的JSF的生命周期,基 ...
- html刷新某块区域,javascript如何实现局部刷新?
AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 J ...
- 前端局部自动刷新_通过iframe实现页面的局部刷新
一个网站是由许许多多页面组成的,超链接将这些页面连接起来,给了用户一个完整的使用体验.用户通过超链接打开一个页面时,浏览器会回收当前页面然后再渲染新页面.有时候我们并不希望是这样,比如对于一个音乐网站 ...
- Flutter开发常见问题,解决小技巧
1.Android Studio 4.0 以上打包编译报错: Execution failed for task ':app:lintVitalRelease'. > Could not res ...
- android局部布局刷新,Android RecyclerView 局部刷新分析
前情回顾 之前写的 PowerAdapter 和 SelectPowerAdapter 从创建到现在,已经两年多,期间发生了翻天覆地的变化.一开始,我把 SwipeRefreshLayout 和 Re ...
- RecyclerView 配合 DiffUtil,RecyclerView局部刷新
一个问题: 每次从服务器取到数据后,都是调用adapter.notifyDataSetChanged();进行刷新.那局部刷新(adapter.notifyItemChanged();)的这些东西不是 ...
最新文章
- delphi FillChar的用法(转)
- 动态链接库的创建和调用方法
- SAP Fiori Elements 应用里和 Fiori 3 相关的外观设置
- OpenCL、OpenGL 同时工作
- c++ 23种设计模式_使用Go实现GoF的23种设计模式(三)
- (转)OL2中设置鼠标的样式
- java 静态导入 import static
- 编译实验 . 递归下降分析器
- matlab右下方箭头,matlab绘制箭头arrow
- Android App Bundle 和Unity AAB BundleTools
- 项目前期准备的重要性
- 性能猛兽野火STM32H743 V2开发板跑Linux 5.10,分数爆炸1836.884644
- Progress ThemeBuilder updated Crack
- 大数据实时计算流程介绍
- 查看文本是linux格式还是windows格式;以及实现linux文本格式和linux文本格式转换
- 设计模式系列-Builder模式(高效构建参数)
- 【BMI指数计算器V1.0】项目实战
- Python读取netCDF中的group/组中的变量
- 解决The page at ‘xxx‘ was loaded over HTTPS
- 可穿戴功能性近红外光谱成像在自然环境中的应用
热门文章
- java连接navicat_如何使用Navicat连接Oracle
- 视觉SLAM-显示相机的位姿
- 英雄联盟修复返回服务器异常,玩LOL英雄联盟在XP中服务器连接异常退出的恢复步骤...
- graphpad prism显著性差异分析_【市场表现】2020年第三季度企业债利差分析
- 郑州轻工业学校计算机网络,计算机网络期末考试a卷(郑州轻工业学院).doc
- python回到首行_python读取文件首行和最后一行
- mysql经典四表查询_mysql经典问题四表查询(教师,学生,成绩,课程表)
- centos安装redis并客户端连接_网络共享打印机图文教程,电脑客户端连接安装设置共享打印机方法...
- java基础语法的书_第一章--Java基础语法
- Spring mvc配置文件