一尘不染

didChangeDependencies和initState之间的区别是什么?

flutter

我是不熟悉的人,当我想在InitState中调用上下文时,会抛出一个错误:即将发生,
BuildContext.inheritFromWidgetOfExactType 但随后我使用didChangeDependencies即可正常工作。

现在我有两个问题:

1-为什么我们不能在initState中调用上下文,但是didChangeDependencies没有问题?(因为我在官方文档中读过This method is also called immediately after [initState],并且在build方法之前都将调用它们。)

2-为什么我们可以在build方法之外访问上下文(因为这里有build(BuildContext context),我们可以使用我们的上下文,但是在didChangeDependencies中我们没有类似的东西didChangeDependencies(BuildContext context),因此我们可以从哪里调用上下文来使用它)?


阅读 413

收藏
2020-08-13

共1个答案

一尘不染

从状态加载其依赖项的那一刻起,我们就可以使用状态的上下文。

在调用build时,上下文可供我们使用,并作为参数传递。

现在继续前进,在状态加载其依赖项之前会调用initstate,因此,如果没有上下文可用,并且如果您在initstate中使用上下文,则会收到错误消息。但是,在状态加载其依赖关系后不久,didChangeDependencies就被调用,此时上下文可以使用,因此您可以在这里使用上下文。

但是,在调用build之前先调用它们。唯一的区别是,一个在状态加载其依赖项之前被调用,而另一个在状态加载其依赖项之后被调用。

2020-08-13