我只是想要一个
Container
,其中 color
内的 decoration
设置为提供者的值 (listen: true
)。
像这样:
child: AnimatedContainer(
duration: kThemeAnimationDuration,
decoration: BoxDecoration(
color: Provider.of<ThemeProvider>(context).color,
borderRadius: BorderRadius.circular(
defaultBorderRadius,
),
),
...
但这失败了:
尝试在生命周期中监听 InheritedWidget,但永远不会 再次被召唤。此错误通常在调用 Provider.of 时发生 与
到listen
,在听 提供者没有意义,例如:true
- StatefulWidget 的 initState
- 提供者的“创建”回调
这是不受欢迎的,因为这些生命周期仅被调用一次 小部件的生命周期。因此,虽然
是listen
,但 小部件无法处理更新场景。true
但我不太明白。为什么我不能在这里听到值?它不是一个按钮点击或任何东西。它是容器的背景颜色。
奇怪的是:当将
color
设置为简单的静态值,然后将其更改为提供程序值,然后热重载时,它按预期工作!即使更新也工作正常。只是 init 不知何故失败了。
我在这里缺少什么?如果您需要更多信息,请告诉我!
根据
provider
包文档,当您尝试在 Provider.of<ThemeProvider>
方法或 Create
(在您的情况下创建方法)中调用 State.initState
时,您需要将 listen
变量设置为 false
以便使那项工作:
child: AnimatedContainer(
duration: kThemeAnimationDuration,
decoration: BoxDecoration(
color: Provider.of<ThemeProvider>(context, listen: false).color, // <--- add this
borderRadius: BorderRadius.circular(
defaultBorderRadius,
),
),