Flutter局部刷新优化性能
发布时间 - 2025-07-14 00:00:00 点击率:次局部刷新是优化flutter应用性能的重要手段。下面是对上述内容的伪原创处理:
Flutter中的状态类有两种:
- 无状态类(StatelessWidget):此类组件一旦创建后,其界面状态无法更改。
-
有状态类(StatefulWidget):当状态发生变化时,通过调用
setState()方法可以触发UI的更新。继承StatefulWidget的子类需要重写createState()方法。
下面是一个普通刷新的示例代码:
class TestRoute extends StatefulWidget {
@override
_TestRouteState createState() => _TestRouteState();
}
class _TestRouteState extends State {
int count = 0;
@override
Widget build(BuildContext context) {
return FlatButton(
onPressed: () {
setState(() => count++);
},
child: Text('$count'),
);
}
} 在这个有状态类的例子中,定义了一个变量,并在按钮事件中通过setState来刷新该变量,从而实现界面的更新。
接下来,我们通过GlobalKey实现局部刷新,仍然使用上面的例子,但这次我们只刷新Text组件:
class TestRoute extends StatefulWidget {
@override
_TestRouteState createState() => _TestRouteState();
}
class _TestRouteState extends State {
int count = 0;
GlobalKey textKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextWidget(textKey), // 需要更新的文本组件
FlatButton(
onPressed: () {
count++; // 仅更改数值,状态刷新由Key处理
textKey.currentState.onPressed(count);
},
child: Text('按钮 $count'),
),
],
);
}
}
// 封装的文本组件
class TextWidget extends StatefulWidget {
final Key key;
TextWidget(this.key);
@override
State createState() => TextWidgetState();
}
class TextWidgetState extends State {
String _text = "0";
@override
Widget build(BuildContext context) {
return Text(_text);
}
void onPressed(int count) {
setState(() => _text = count.toString());
}
} 通过这种方式,可以看到按钮上的count值没有变化,但需要更新的文本组件已经成功更新了值,实现了局部刷新的效果。
实现原理:textKey是一个类型为GlobalKey的键,其泛型为TextWidgetState(封装的文本组件且为有状态类)。因此,该键可以通过currentState方法调用类内部的onPressed方法,而onPressed方法恰好调用了setState来刷新局部状态。
# ai
# count
# 封装
# 子类
# 继承
# 泛型
# 事件
# flutter
# ui
# 是一个
# 在这个
# 并在
# 可以通过
# 此类
# 可以看到
# 重写
# 有两种
# 为有
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
原生JS实现图片轮播切换效果
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
焦点电影公司作品,电影焦点结局是什么?
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
高防服务器:AI智能防御DDoS攻击与数据安全保障
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
敲碗10年!Mac系列传将迎来「触控与联网」双革新
如何在腾讯云服务器快速搭建个人网站?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
JavaScript实现Fly Bird小游戏
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
简单实现Android文件上传
Laravel如何为API生成Swagger或OpenAPI文档
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
简单实现jsp分页
如何快速上传建站程序避免常见错误?
如何在香港服务器上快速搭建免备案网站?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
网页设计与网站制作内容,怎样注册网站?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
如何注册花生壳免费域名并搭建个人网站?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
用yum安装MySQLdb模块的步骤方法
*服务器网站为何频现安全漏洞?
Android中AutoCompleteTextView自动提示
SQL查询语句优化的实用方法总结
Android Socket接口实现即时通讯实例代码
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
微信小程序 五星评分(包括半颗星评分)实例代码
如何为不同团队 ID 动态生成多个独立按钮
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
制作旅游网站html,怎样注册旅游网站?
Laravel集合Collection怎么用_Laravel集合常用函数详解
实例解析Array和String方法
大同网页,大同瑞慈医院官网?
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册


);
}
}