flutter MVC+S设计中提供者模式的NotifyListener

1tuwyuhd  于 2022-11-30  发布在  Flutter
关注(0)|答案(3)|浏览(129)

我正在用MVC+S设计开发Flutter应用程序。我也使用了带有Notifylistener的提供程序,但是我经常得到消息setState() or markNeedsBuild() called during build.
使用提供程序和Notfylistener来避免此问题的最佳做法是什么?
我的代码如下所示:
第一个

ovfsdjhp

ovfsdjhp1#

您需要等待构建完成:

@override
void initState() {
    super.initState();

    WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
      locator<TestController>().FunctionA();
      locator<TestController>().FunctionB();
    });
}
velaa5lx

velaa5lx2#

您得到异常的原因是您在尝试构建小部件时更新了状态。
避免这种情况的最简单方法是使用addPostFrameCallback来确保在初始构建之后更新状态(这非常重要):

class TestState extends State<Test> {
 @override
 voide iniState() {
   WidgetsBinding.instance?.addPostFrameCallback((timeStamp){
      locator<TestController>().FunctionA();
      locator<TestController>().FunctionB();
    });
  super.initState();
 }

}

当您想要使用具有notfifyListeners()函数时,请小心地在dispose方法中使用addPostFrameCallback
快乐编码....

ws51t4hk

ws51t4hk3#

不要在initState中调用提供程序,因为此时您的生成器仍在运行中,并且没有可用的BuildContext
为了避免这种情况,许多编码器使用Future Delaymounted来检查BuildContext是否在initState中就绪。
但是,当您处理未来数据时,FutureBuilder小部件是正确的选择。当数据可用时,这将自动构建小部件,您无需检查mounted

相关问题