我正在使用PageController,在最后一页之后我想要更改视图,所以我应该释放控制器。如果在controller.dispose()之前调用super.dispose(),则会得到以下错误:
_IntroViewState failed to call super.dispose()如果在controller.dispose()之后调用super.dispose(),则不会引发任何异常。哪种方法是正确的?代码在这里:https://pastebin.com/PK1SWnsm
发布于 2022-07-08 18:56:43
dispose方法是我们在想要结束某物的使用时使用的回调。
如果我们在我们的initState方法中创建了一个流,那么我们需要在完成之后立即在dispose函数中释放它。如果我们不这样做,我们将使用不必要的资源,如内存和存储,我们不需要,因为我们没有使用该流。我们的应用程序中可能存在内存泄漏,它可能会对用户体验产生负面影响。
suepr.dispose()处理父类,即公共类IntroView。控制器是类中的一个对象。因此,在配置小部件之前,我们需要释放小部件中的任何内容。
因此,要回答您的问题,请执行controller.dispose(),然后执行super.dispose()。
@override
void dispose() {
super.dispose();
controller.dispose();
}发布于 2022-07-08 18:48:37
您应该始终在开始时调用super.initState(),在做完某件事情之后调用super.dispose()。
发布于 2022-07-08 19:00:35
正式文件答复如下:
这个方法的
实现应该以调用继承的方法而结束,就像在super.dispose()中一样。
翻译成代码,正确的是:
@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()时发生的错误。
https://stackoverflow.com/questions/72915187
复制相似问题