Flutter 颤振提供程序-是方法O(N)的提供程序吗?

Flutter 颤振提供程序-是方法O(N)的提供程序吗?,flutter,flutter-provider,Flutter,Flutter Provider,我希望Provider.of方法是O(N),因为我认为它会沿着小部件树找到最近的提供者。然而,我看了看供应商,它说: 或者使用静态方法Provider.of(context),其行为类似于watch/read 这些方法将从小部件开始在小部件树中查找 与传递的BuildContext关联,并将返回最近的 找到类型为T的变量(如果找不到,则抛出) 值得注意的是,这个操作是O(1)。它不涉及 实际上是在小部件树中行走 我现在很困惑。文件上说这是O(1),但这怎么可能呢?供应商没有使用flutrapi,

我希望
Provider.of
方法是O(N),因为我认为它会沿着小部件树找到最近的提供者。然而,我看了看供应商,它说:

或者使用静态方法Provider.of(context),其行为类似于watch/read

这些方法将从小部件开始在小部件树中查找 与传递的BuildContext关联,并将返回最近的 找到类型为T的变量(如果找不到,则抛出)

值得注意的是,这个操作是O(1)。它不涉及 实际上是在小部件树中行走


我现在很困惑。文件上说这是O(1),但这怎么可能呢?供应商没有使用flutrapi,而是沿着小部件树走。提供者包中是否有类似hashmap的内容?我需要知道这一点,因为我在逐帧动画中使用提供者,在树的深处使用我的小部件。这可能会导致性能问题。

对于侦听和读取值(
Provider.of
),Provider是O(1),但是分派值(例如在
changeinnotifier
中调用
notifyListeners()
)是O(N^2),其中N是侦听器的数量,(
context.watch
Consumer
)为什么是O(N^2)?我相信它以前是O(N^2),但现在优化为O(N),因为Flatter文档说它是O(N),但是提供程序包可以在内部添加我不知道的东西,通知程序说“它是O(1)用于添加侦听器,O(N)用于删除侦听器和发送通知(其中N是侦听器的数量)。”哦,那么也许我已经过时了…Provider是O(1)用于侦听和读取值(
Provider.of
),但是分派值(例如在
changeinnotifier
中调用
notifyListeners()
)是O(N^2),其中N是侦听器的数量,(
上下文。watch
Consumer
)为什么是O(N^2)?我相信它以前是O(N^2),但现在优化为O(N),因为Flatter文档说它是O(N),但是提供程序包可能会在内部添加一些我不知道的东西,通知程序会说“它是O(1)用于添加侦听器,O(N)用于删除侦听器和发送通知(其中N是侦听器的数量)。“哦,那么我可能已经过时了。。。