在dispose()方法内部调用带有Provider.of(context)的方法会导致“查找已停用的小部件的祖先是不安全的。”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在dispose()方法内部调用带有Provider.of(context)的方法会导致“查找已停用的小部件的祖先是不安全的。”相关的知识,希望对你有一定的参考价值。
当我尝试在State的dispose方法内部调用如下方法时。
@override
void dispose()
Provider.of<AppProvider>(context, listen: false).close();
super.dispose();
我知道了。
The following assertion was thrown while finalizing the widget tree:
Looking up a deactivated widget's ancestor is unsafe.
At this point the state of the widget's element tree is no longer stable.
To safely refer to a widget's ancestor in its dispose() method, save a reference to the ancestor by calling dependOnInheritedWidgetOfExactType() in the widget's didChangeDependencies() method.
When the exception was thrown, this was the stack
#0 Element._debugCheckStateIsActiveForAncestorLookup.<anonymous closure>
package:flutter/…/widgets/framework.dart:3508
#1 Element._debugCheckStateIsActiveForAncestorLookup
package:flutter/…/widgets/framework.dart:3522
#2 Element.getElementForInheritedWidgetOfExactType
package:flutter/…/widgets/framework.dart:3588
#3 Provider.of
package:provider/src/provider.dart:219
#4 _MySecondPageState.dispose
package:test_space/main.dart:138
...
我不确定如何执行此操作To safely refer to a widget's ancestor in its dispose() method, save a reference to the ancestor by calling dependOnInheritedWidgetOfExactType() in the widget's didChangeDependencies() method.
我目前正在使用provider: ^4.0.2
。
我以前也一样,在dispose()中使用Provider.of(context),但之前没有此异常。这是因为新的Flutter版本吗?另外,我意识到这里有deactivate()方法,我应该使用deactivate()方法而不是dispose()方法吗?
似乎您正在尝试关闭AppProvider类中定义的内容。如果AppProvider类扩展了ChangeNotifier,则更改通知程序类提供了dispose方法,您可以重写它,然后仅在AppProvider类内调用close函数。
以上是关于在dispose()方法内部调用带有Provider.of(context)的方法会导致“查找已停用的小部件的祖先是不安全的。”的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中,方法 'dispose' 被调用为 null
更改“ReproClass”上的 Dispose 方法以在此字段上调用 Dispose 或 Close
我应该为流对象调用 Close() 或 Dispose() 吗?