首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >super.dispose()在controller.dispose()之前还是之后?

super.dispose()在controller.dispose()之前还是之后?
EN

Stack Overflow用户
提问于 2022-07-08 17:50:08
回答 3查看 658关注 0票数 0

我正在使用PageController,在最后一页之后我想要更改视图,所以我应该释放控制器。如果在controller.dispose()之前调用super.dispose(),则会得到以下错误:

代码语言:javascript
复制
_IntroViewState failed to call super.dispose()

如果在controller.dispose()之后调用super.dispose(),则不会引发任何异常。哪种方法是正确的?代码在这里:https://pastebin.com/PK1SWnsm

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-07-08 18:56:43

dispose方法是我们在想要结束某物的使用时使用的回调。

如果我们在我们的initState方法中创建了一个流,那么我们需要在完成之后立即在dispose函数中释放它。如果我们不这样做,我们将使用不必要的资源,如内存和存储,我们不需要,因为我们没有使用该流。我们的应用程序中可能存在内存泄漏,它可能会对用户体验产生负面影响。

suepr.dispose()处理父类,即公共类IntroView。控制器是类中的一个对象。因此,在配置小部件之前,我们需要释放小部件中的任何内容。

因此,要回答您的问题,请执行controller.dispose(),然后执行super.dispose()。

代码语言:javascript
复制
@override
void dispose() {
  super.dispose();
  controller.dispose();
}
票数 0
EN

Stack Overflow用户

发布于 2022-07-08 18:48:37

您应该始终在开始时调用super.initState(),在做完某件事情之后调用super.dispose()

票数 0
EN

Stack Overflow用户

发布于 2022-07-08 19:00:35

正式文件答复如下:

这个方法的

实现应该以调用继承的方法而结束,就像在super.dispose()中一样。

翻译成代码,正确的是:

代码语言:javascript
复制
    @override
    void dispose() {
        doWhateverYouNeedToDo();
        myController.dispose()

        // in the last line of the method:
        super.dispose()
    }

参考资料:

编辑:

关于代码中的错误,它可能是由您如何使用Bloc引起的,并且它与Widget自身的处理无关。

在最后调用super.dispose()时,我按照预期的方式更改了您提供的删除Bloc和dispose工作的代码:

https://dartpad.dev/?id=6a3f3567f880997219fa21ac9736ea46

为了更好地帮助您,我们需要一个完整的示例来显示在最后调用super.dispose()时发生的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72915187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档