Flutter Container,装饰颜色监听提供者值

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

我只是想要一个

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 不知何故失败了。

我在这里缺少什么?如果您需要更多信息,请告诉我!

flutter dart containers flutter-provider
1个回答
0
投票

根据

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,
     ),
  ),
© www.soinside.com 2019 - 2024. All rights reserved.