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('调用');
  }
}
posted @   行走的泡泡鱼  阅读(301)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
点击右上角即可分享
微信分享提示