【发布时间】:2021-01-15 15:18:19
【问题描述】:
我正在使用如下所示的 Selector 小部件
它的构建方法没有问题,只有在值发生变化时才调用它。 但是,当我使用 Devtools 或 android studio 跟踪小部件重建时,它显示选择器在我滚动时会自行重建,无论是在列表中还是在任何其他支持滚动的小部件中。
是的,选择器在值更改之前没有调用构建方法,但这是正常的吗?
正如您所看到的其他 (2) 选择器不一定是触发器,但它们是。
对不起,我的英语不好,如果你不明白我可以在评论部分用另一种方式解释,并提前感谢。
编辑:
我想我知道为什么选择器正在重建它自己,因为我使用提供程序类作为侦听器来使用 changenotifier 滚动控制器方向。 这里的代码 在提供者类中:
bool isHideHomeScreenTabBar = false;
void hideShowTabBar(ScrollDirection scrollDirection) {
isHideHomeScreenTabBar = scrollDirection == ScrollDirection.reverse;
notifyListeners();
}
在我的主屏幕中:
_scrollController.addListener(() {
Provider.of<AppProvider>(context, listen: false).hideShowTabBar(
_scrollController.position.userScrollDirection);
});
所以基本上提供者在我每次滚动时都会触发 changenotifier,并且选择器会收到通知并重建它自己,但如果值没有改变,选择器将不会触发构建方法(所以它对孩子和选择器的 build 方法中的小部件)。
但即便如此这正常吗?为什么,其他选择器甚至没有监听滚动方向。
无论如何,我找到了一种替代方法(使用动画控制器),但如果有人能解释这里发生的事情,那就太好了,至少对我来说很重要,因为我可能会使用另一种状态管理。
【问题讨论】:
-
我可以知道你想通过这个实现什么吗?所以我们可以对此有更好的了解。
-
根据滚动控制器方向隐藏小部件。
-
你能显示更多代码吗?请复制并粘贴整个代码。我看不到包装选择器的小部件
-
你能检查一下 Selector 的父节点是否正在重建吗?也许你的
itemBuilder本身又被调用了 -
选择器的父级是一列,您可以看到它没有重建,因为它正在重建,然后您会在上面的屏幕截图中看到选择器的子级也在重建。我回家后会编辑问题。
标签: flutter dart flutter-dependencies