Closed mdddj closed 1 year ago
调整代码:
+ import 'package:extended_list/src/rendering/sliver_list.dart';
- customTargetRenderSliverType: (p0) => true,
+ customTargetRenderSliverType: (p0) {
+ return p0 is ExtendedRenderSliverList;
+ },
观察第三方库的滚动视图时,需要判断滚动视图所对应的 RenderObject
类型,你这里直接在 customTargetRenderSliverType
里返回 true
是不对的,会拿到错误的对象。
emm,一些场景下还是不太行,我再试试能不能复现
第一次 build 后小部件,跳转没反应,添加 key后跳转生效
问题复现了: https://github.com/mdddj/ops_bug_demo 加了一个等待时间: await Future.delayed(const Duration(seconds: 3));
class _SourceRepository extends LoadingModel<String> {
@override
Future<bool> loadData([bool isLoadMoreAction = false]) async {
await Future.delayed(const Duration(seconds: 3));
addAll(List.generate(100, (index) => "$index"));
return true;
}
}
这个第三方库里的滚动视图是在拿到数据后才被渲染的,所以 ListViewObserver
在被渲染时拿不到相应的数据
重写 LoadingModel
里的 refresh
方法,在该方法内调用 ListObserverController
的 reattach
重新附加一下就好
class _SourceRepository extends LoadingModel<String> {
+ _State state;
+
+ _SourceRepository(this.state) : super();
+
+ @override
+ Future<bool> refresh([bool notifyStateChanged = false]) {
+ final result = super.refresh(notifyStateChanged);
+ result.then((value) {
+ WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
+ state._ss.reattach();
+ });
+ });
+ return result;
+ }
@override
Future<bool> loadData([bool isLoadMoreAction = false]) async {
await Future.delayed(const Duration(seconds: 3));
addAll(List.generate(100, (index) => "$index"));
return true;
}
}
- sourceList: _SourceRepository(),
+ sourceList: _SourceRepository(model),
太强了大佬👍👍
以前关联的问题: https://github.com/LinXunFeng/flutter_scrollview_observer/issues/18 复现代码: https://github.com/mdddj/ops_bug_demo
也可能我的用法不对
依赖
截图如下
点击按钮没有响应