颤振子小部件正在使用错误的 Theme.of(context).color 重建

Posted

技术标签:

【中文标题】颤振子小部件正在使用错误的 Theme.of(context).color 重建【英文标题】:Flutter child widget is rebuilding with wrong Theme.of(context).color 【发布时间】:2022-01-20 09:06:40 【问题描述】:

在更改颜色并设置整个屏幕的状态后,除了扩展磁贴(与您看到的列表视图具有相同的父级)之外,所有内容都使用正确的主题重建。扩展磁贴是我自己创建的小部件,我在其中复制了原始扩展磁贴的代码,只是更改了图标方向。 如果我切换到不同的选项卡并卷土重来,它会更新并具有正确的主题。 我正在使用 CupertinoTheme.of(context).barBackgroundColor,这适用于所有其他小部件,更新时效果很好。

enter image description here 这张图显示了底部的扩展图块在重建后仍然具有深色主题。

enter image description here 这张图显示了更新正常的 TodaysWorkoutListVIewBuilder() 和没有正确更新 Theme 的 TodaysCardioListViewBuilder()。

enter image description here 在这里,您可以看到 TodaysCardioListViewBuilder() 中的 ExpansionTile 的用法,当我在开始构建它时打印颜色时,我得到了正确的颜色(白色),但展开瓦片折叠的背景仍然是黑色。

如果您有任何想法我哪里出错了,请告诉我。

【问题讨论】:

【参考方案1】:

我找到了解决方案,但如果有人遇到同样的问题,我会把它留在这里。 错误是 MyCupertinoExpansionTile 没有密钥,所以它没有重建。解决方案是只将参数键添加到小部件:

MyCupertinoExpansionTile(
  key: UniqueKey(),
  ...
),

【讨论】:

以上是关于颤振子小部件正在使用错误的 Theme.of(context).color 重建的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 分配 Theme 文本样式

Flutter-当内容更改时淡入淡出动画文本小部件

亚马逊小部件和 SSL

Flutter:我正在尝试使用扩展类包装 Text 小部件,但出现“未定义命名参数‘child’”错误

在android活动中嵌入小部件 - 没有响应

用Flutter中的新小部件替换dismissed小部件