Closed villainlin0321 closed 7 months ago
做如下调整即可:
set sliverListViewContext(BuildContext? value) {
if (value != null && _sliverListViewContext != value) {
_sliverListViewContext = value;
+ observerController.reattach();
- observerController.sliverContexts.add(value);
- ListViewOnceObserveNotification().dispatch(_sliverListViewContext);
Future.delayed(Duration(milliseconds: 300), () {
+ ListViewOnceObserveNotification().dispatch(_sliverListViewContext);
chatObserver.observeSwitchShrinkWrap();
});
}
}
PS: 不要手动去给 observerController.sliverContexts
赋值~
onObserve
方法不走的原因就是因为当前 sliverContexts
里有两个 ctx
,但是这个回调只会取第一个 ctx
的数据给你,但是它已经无了,没有数据的,当前观察结果与上次的结果一致,所以就不走了。你用 onObserveAll
回调就可以拿到所有 ctx
的数据,但不建议,按上述调整一下代码就可以了
我发现我的sliverContexts一直是空的, 之前observerController.sliverContexts.add(value);时就是去年10月份沟通的,手动调用observeSwitchShrinkWrap 也是一样的
之前observerController.sliverContexts.add(value);时就是去年10月份沟通的
这个是不是当时理解错了?当时是说可以手动指定对应的 ctx
,并抛出了wiki
和 demo
的链接而已。
现在按上述说明改了之后还会有问题吗?
demo没问题了,实际项目还有问题
observerController.sliverContexts.add(value); 必须加了这一行然后再去执行observeSwitchShrinkWrap 才有效,当时得出来的结论是可能跟我视图层级有关
demo没问题了,实际项目还有问题
我需要有可复现的 demo
才能定位问题
observerController.sliverContexts.add(value); 必须加了这一行然后再去执行observeSwitchShrinkWrap 才有效,当时得出来的结论是可能跟我视图层级有关
如果你实在需要这么做,可以改为使用 onObserveAll
回调,然后用 ctx
去取观察结果。或者先把 sliverContexts
清空再 add
Version
1.16.5
Platforms
Web
Device Model
web
flutter info
How to reproduce?
数据源切换之后,onObserve方法不走
Logs
No response
Example code (optional)
Contact
No response