我在阅读文档时有一个非常具体的问题。
阅读完 BlocBuilder 文档后,我继续阅读 BlocListener。一切都很清楚,直到我读到这个:
监听器保证每个
仅被调用一次 与 BlocBuilder 中的构建器不同的变化。state
据我了解,在 BlocBuilder 中,每次块
builder:
更改时,state
都会被调用(当然,在省略 buildWhen:
的情况下,它总是返回 true 作为默认值)。在 BlocListener 中,会调用 listener:
来响应块中的 state
变化。
我似乎无法理解引用文本背后的概念。对于块的
builder:
中的每次更改,BlocBuilder 中的 state
是否也会被调用一次?我错过的“第二个”电话在哪里?
构建器按照您所说的状态更改时运行。但是当框架认为有必要重建时,构建器函数也会运行。
监听器功能不受需要重建的框架的影响。
每当区块发出新状态时,都会将其与前一个状态进行比较,如果它们不同,则会触发侦听器功能。
如果在您的情况下,您使用的 Equatable 仅包含
LoadedState
作为 props,这意味着当比较两个状态时,仅测试 LoadedState
。这样 BLoC 消费者就认为这两个状态是相等的,并且 do not 再次触发监听函数。
如果你想更新相同的状态,只需在调用更新状态之前添加一个状态,如果你想再次更新“
LoadedState
”状态,请在此之前调用“LoadingState
”状态,然后调用“LoadedState
”状态所以BlocListener和BlocBuilder会监听它
每次渲染时都会使用当前状态调用 Blocbuilder,仅当状态更改时才会调用 Bloclistener