Flutter 组件技巧 刷新数据
1. 起因
因为组件在创建后,放入widget数之后,就会调用 initState,执行一次里面的内容。
我之前的项目里,
- 有一个Stack,用来切换子页面,子页面有2级;
- 在子页面的initState里,我去获取后端的数据,看中了initState只调用一次,达到我获取一次然后拿来显示的目的
这样出现一个问题:单个页面调试没有问题,但是整个程序一起来,十几,二十个页面一起去获取数据,会有一部分获取不到数据,然后导致显示异常(因为只获取一次)。
2. 解决方案
不知道会有多少种解决方案,我想到的方案如下:
2.1 集中加载
就是说在连接到后端的时候,找个时间全部同步一次,数据缓存起来,然后后续界面就直接从缓存里拿数据使用就好。
应该比较好理解,不过我暂时没用这种,所以没代码。
2.2 分步加载
希望当前页面加载当前页面自己需要的内容,不使用initState。
我把我的代码简化成下面的代码,我再页面切换的按钮里先调用方法来刷新数据,达到我的目的。
class HomePageState extends State<HomePage> {
SubPageController _subPageController = SubPageController(); //在Home定义
@override
void initState() {
// TODO: implement initState
super.initState();
SubPage(_subPageController));//传入子页面
}
...
onPressed: () {
if(_subPageController.methodA!=null) {//调用
_subPageController.methodA!();
}
}
...
}
class SubPageController{ //自己加的
void Function() methodA;
}
class SubPage extends StatefulWidget {
SubPage(this.subPageController,{super.key});
final SubPageController subPageController;//接收传进来的
@override
State<SubPage> createState() => _SubPageState();
}
class _SubPageState extends State<SubPage> {
@override
void initState() {
// TODO: implement initState
super.initState();
widget.subPageController.methodA = doMethod;
}
void doMethod()
{
print('调用');
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)