@@ -10,7 +10,6 @@ import 'package:readeck_app/ui/core/ui/loading.dart';
1010import 'package:readeck_app/ui/bookmarks/view_models/bookmarks_viewmodel.dart' ;
1111import 'package:readeck_app/utils/network_error_exception.dart' ;
1212import 'package:readeck_app/ui/core/ui/snack_bar_helper.dart' ;
13- import 'package:readeck_app/ui/core/main_layout.dart' ;
1413
1514/// 书签列表页面的文案配置
1615class BookmarkListTexts {
@@ -45,10 +44,12 @@ class BookmarkListScreen<T extends BaseBookmarksViewmodel>
4544 super .key,
4645 required this .viewModel,
4746 required this .texts,
47+ this .scrollController,
4848 });
4949
5050 final T viewModel;
5151 final BookmarkListTexts texts;
52+ final ScrollController ? scrollController;
5253
5354 @override
5455 State <BookmarkListScreen <T >> createState () => _BookmarkListScreenState <T >();
@@ -92,37 +93,18 @@ class _BookmarkListScreenState<T extends BaseBookmarksViewmodel>
9293 void didChangeDependencies () {
9394 super .didChangeDependencies ();
9495
95- // 只有在没有外部提供ScrollController时才创建自己的
96- if (_scrollController == null ) {
97- _scrollController = ScrollController ();
98- _scrollController? .addListener (_onScroll);
99-
100- // 延迟到下一帧更新Provider,避免在build过程中触发rebuild
101- WidgetsBinding .instance.addPostFrameCallback ((_) {
102- if (mounted) {
103- try {
104- final provider = context.read <ScrollControllerProvider ?>();
105- provider? .setScrollController (_scrollController);
106- } catch (e) {
107- // 在测试环境中可能会失败,忽略
108- }
109- }
110- });
111- }
96+ // 使用外部提供的 ScrollController 或创建自己的
97+ _scrollController ?? = widget.scrollController ?? ScrollController ();
98+ _scrollController? .addListener (_onScroll);
11299 }
113100
114101 @override
115102 void dispose () {
116- // 清除Provider中的ScrollController引用
117- try {
118- final provider = context.read <ScrollControllerProvider ?>();
119- provider? .setScrollController (null );
120- } catch (e) {
121- // 在测试或context已失效时忽略错误
122- }
123-
124103 _scrollController? .removeListener (_onScroll);
125- _scrollController? .dispose ();
104+ // 只有自己创建的 ScrollController 才需要 dispose
105+ if (widget.scrollController == null ) {
106+ _scrollController? .dispose ();
107+ }
126108 _deleteSuccessSubscription.cancel ();
127109 super .dispose ();
128110 }
0 commit comments