BlocBuilder 与 BlocListener

问题描述 投票:0回答:3

我在阅读文档时有一个非常具体的问题。

阅读完 BlocBuilder 文档后,我继续阅读 BlocListener。一切都很清楚,直到我读到这个:

监听器保证每个

state
仅被调用一次 与 BlocBuilder 中的构建器不同的变化。

据我了解,在 BlocBuilder 中,每次块

builder:
更改时,
state
都会被调用(当然,在省略
buildWhen:
的情况下,它总是返回 true 作为默认值)。在 BlocListener 中,会调用
listener:
来响应块中的
state
变化。

我似乎无法理解引用文本背后的概念。对于块的

builder:
中的每次更改,BlocBuilder 中的
state
是否也会被调用一次?我错过的“第二个”电话在哪里?

flutter bloc state-management cubit
3个回答
5
投票

构建器按照您所说的状态更改时运行。但是当框架认为有必要重建时,构建器函数也会运行。

监听器功能不受需要重建的框架的影响。


0
投票

每当区块发出新状态时,都会将其与前一个状态进行比较,如果它们不同,则会触发侦听器功能。

如果在您的情况下,您使用的 Equatable 仅包含

LoadedState
作为 props,这意味着当比较两个状态时,仅测试
LoadedState
。这样 BLoC 消费者就认为这两个状态是相等的,并且 do not 再次触发监听函数。

如果你想更新相同的状态,只需在调用更新状态之前添加一个状态,如果你想再次更新“

LoadedState
”状态,请在此之前调用“
LoadingState
”状态,然后调用“
LoadedState
”状态所以BlocListenerBlocBuilder会监听它


0
投票

每次渲染时都会使用当前状态调用 Blocbuilder,仅当状态更改时才会调用 Bloclistener

© www.soinside.com 2019 - 2024. All rights reserved.