mod: listener

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-02-25 12:38:20 +08:00
parent 0e69e23606
commit e236485bc7
29 changed files with 348 additions and 334 deletions

View File

@@ -31,13 +31,17 @@ class AnimatedDialogState extends State<AnimatedDialog>
opacityAnimation = Tween<double>(begin: 0.0, end: 0.6) opacityAnimation = Tween<double>(begin: 0.0, end: 0.6)
.animate(CurvedAnimation(parent: controller, curve: Curves.linear)); .animate(CurvedAnimation(parent: controller, curve: Curves.linear));
scaleAnimation = CurvedAnimation(parent: controller, curve: Curves.linear); scaleAnimation = CurvedAnimation(parent: controller, curve: Curves.linear);
controller.addListener(() => setState(() {})); controller.addListener(listener);
controller.forward(); controller.forward();
} }
void listener() {
setState(() {});
}
@override @override
void dispose() { void dispose() {
controller.removeListener(() {}); controller.removeListener(listener);
controller.dispose(); controller.dispose();
super.dispose(); super.dispose();
} }

View File

@@ -127,10 +127,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
_animationController = AnimationController( _animationController = AnimationController(
vsync: this, vsync: this,
duration: const Duration(milliseconds: 300), duration: const Duration(milliseconds: 300),
)..addListener(() { )..addListener(listener);
_transformationController!.value =
_animation?.value ?? Matrix4.identity();
});
if (widget.setStatusBar != false) { if (widget.setStatusBar != false) {
setStatusBar(); setStatusBar();
@@ -141,6 +138,10 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
} }
} }
void listener() {
_transformationController!.value = _animation?.value ?? Matrix4.identity();
}
setStatusBar() async { setStatusBar() async {
if (Platform.isIOS || Platform.isAndroid) { if (Platform.isIOS || Platform.isAndroid) {
await StatusBarControl.setHidden( await StatusBarControl.setHidden(
@@ -155,7 +156,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
widget.onClose?.call(true); widget.onClose?.call(true);
_player?.dispose(); _player?.dispose();
_pageController?.dispose(); _pageController?.dispose();
_animationController.removeListener(() {}); _animationController.removeListener(listener);
_animationController.dispose(); _animationController.dispose();
if (widget.setStatusBar != false) { if (widget.setStatusBar != false) {
if (Platform.isIOS || Platform.isAndroid) { if (Platform.isIOS || Platform.isAndroid) {

View File

@@ -105,6 +105,10 @@ class _ListSheetContentState extends State<ListSheetContent>
.indexWhere((e) => e.cid == widget.currentCid) .indexWhere((e) => e.cid == widget.currentCid)
: episodes.indexWhere((e) => e.cid == widget.currentCid)); : episodes.indexWhere((e) => e.cid == widget.currentCid));
void listener() {
_indexStream?.add(_ctr?.index);
}
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@@ -114,9 +118,7 @@ class _ListSheetContentState extends State<ListSheetContent>
vsync: this, vsync: this,
length: widget.season.sections.length, length: widget.season.sections.length,
initialIndex: _index, initialIndex: _index,
)..addListener(() { )..addListener(listener);
_indexStream?.add(_ctr?.index);
});
} }
itemScrollController = _isList itemScrollController = _isList
? List.generate( ? List.generate(
@@ -148,7 +150,7 @@ class _ListSheetContentState extends State<ListSheetContent>
_favStream = null; _favStream = null;
_indexStream?.close(); _indexStream?.close();
_indexStream = null; _indexStream = null;
_ctr?.removeListener(() {}); _ctr?.removeListener(listener);
_ctr?.dispose(); _ctr?.dispose();
super.dispose(); super.dispose();
} }

View File

@@ -43,28 +43,28 @@ class _BangumiPageState extends State<BangumiPage>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_bangumiController.scrollController.addListener(listener);
}
void listener() {
StreamController<bool> mainStream = StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream; Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream = StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream; Get.find<HomeController>().searchBarStream;
_bangumiController.scrollController.addListener( final ScrollDirection direction =
() async { _bangumiController.scrollController.position.userScrollDirection;
final ScrollDirection direction = if (direction == ScrollDirection.forward) {
_bangumiController.scrollController.position.userScrollDirection; mainStream.add(true);
if (direction == ScrollDirection.forward) { searchBarStream.add(true);
mainStream.add(true); } else if (direction == ScrollDirection.reverse) {
searchBarStream.add(true); mainStream.add(false);
} else if (direction == ScrollDirection.reverse) { searchBarStream.add(false);
mainStream.add(false); }
searchBarStream.add(false);
}
},
);
} }
@override @override
void dispose() { void dispose() {
_bangumiController.scrollController.removeListener(() {}); _bangumiController.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }

View File

@@ -225,29 +225,29 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
// 滑动事件监听 // 滑动事件监听
void scrollListener() { void scrollListener() {
_dynamicDetailController.scrollController.addListener( _dynamicDetailController.scrollController.addListener(listener);
() { }
// 标题
if (_dynamicDetailController.scrollController.offset > 55 &&
!_visibleTitle) {
_visibleTitle = true;
_titleStreamC.add(true);
} else if (_dynamicDetailController.scrollController.offset <= 55 &&
_visibleTitle) {
_visibleTitle = false;
_titleStreamC.add(false);
}
// fab按钮 void listener() {
final ScrollDirection direction = _dynamicDetailController // 标题
.scrollController.position.userScrollDirection; if (_dynamicDetailController.scrollController.offset > 55 &&
if (direction == ScrollDirection.forward) { !_visibleTitle) {
_showFab(); _visibleTitle = true;
} else if (direction == ScrollDirection.reverse) { _titleStreamC.add(true);
_hideFab(); } else if (_dynamicDetailController.scrollController.offset <= 55 &&
} _visibleTitle) {
}, _visibleTitle = false;
); _titleStreamC.add(false);
}
// fab按钮
final ScrollDirection direction =
_dynamicDetailController.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) {
_showFab();
} else if (direction == ScrollDirection.reverse) {
_hideFab();
}
} }
void _showFab() { void _showFab() {
@@ -269,7 +269,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
_titleStreamC.close(); _titleStreamC.close();
_fabAnimationCtr?.dispose(); _fabAnimationCtr?.dispose();
_fabAnimationCtr = null; _fabAnimationCtr = null;
_dynamicDetailController.scrollController.removeListener(() {}); _dynamicDetailController.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }

View File

@@ -47,23 +47,7 @@ class _DynamicsTabPageState extends State<DynamicsTabPage>
..mid = dynamicsController.mid.value, ..mid = dynamicsController.mid.value,
tag: widget.dynamicsType, tag: widget.dynamicsType,
); );
_dynamicsTabController.scrollController.addListener(() { _dynamicsTabController.scrollController.addListener(listener);
try {
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream;
final ScrollDirection direction = _dynamicsTabController
.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) {
mainStream.add(true);
searchBarStream.add(true);
} else if (direction == ScrollDirection.reverse) {
mainStream.add(false);
searchBarStream.add(false);
}
} catch (_) {}
});
if (widget.dynamicsType == 'up') { if (widget.dynamicsType == 'up') {
_listener = dynamicsController.mid.listen((mid) { _listener = dynamicsController.mid.listen((mid) {
// debugPrint('midListen: $mid'); // debugPrint('midListen: $mid');
@@ -76,10 +60,28 @@ class _DynamicsTabPageState extends State<DynamicsTabPage>
.get(SettingBoxKey.dynamicsWaterfallFlow, defaultValue: true); .get(SettingBoxKey.dynamicsWaterfallFlow, defaultValue: true);
} }
void listener() {
try {
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream;
final ScrollDirection direction =
_dynamicsTabController.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) {
mainStream.add(true);
searchBarStream.add(true);
} else if (direction == ScrollDirection.reverse) {
mainStream.add(false);
searchBarStream.add(false);
}
} catch (_) {}
}
@override @override
void dispose() { void dispose() {
_listener?.cancel(); _listener?.cancel();
_dynamicsTabController.scrollController.removeListener(() {}); _dynamicsTabController.scrollController.removeListener(listener);
dynamicsController.mid.close(); dynamicsController.mid.close();
super.dispose(); super.dispose();
} }

View File

@@ -82,22 +82,22 @@ class _DynamicsPageState extends State<DynamicsPage>
debugPrint('upPanelPosition: $upPanelPosition'); debugPrint('upPanelPosition: $upPanelPosition');
if (GStorage.setting if (GStorage.setting
.get(SettingBoxKey.dynamicsShowAllFollowedUp, defaultValue: false)) { .get(SettingBoxKey.dynamicsShowAllFollowedUp, defaultValue: false)) {
_dynamicsController.scrollController.addListener(() { _dynamicsController.scrollController.addListener(listener);
if (_dynamicsController.scrollController.position.pixels >= }
_dynamicsController.scrollController.position.maxScrollExtent - }
300) {
EasyThrottle.throttle('following', const Duration(seconds: 1), () { void listener() {
_dynamicsController.queryFollowing2(); if (_dynamicsController.scrollController.position.pixels >=
}); _dynamicsController.scrollController.position.maxScrollExtent - 300) {
} EasyThrottle.throttle('following', const Duration(seconds: 1), () {
_dynamicsController.queryFollowing2();
}); });
} }
} }
@override @override
void dispose() { void dispose() {
_dynamicsController.tabController.removeListener(() {}); _dynamicsController.scrollController.removeListener(listener);
_dynamicsController.scrollController.removeListener(() {});
super.dispose(); super.dispose();
} }

View File

@@ -33,20 +33,20 @@ class _FavDetailPageState extends State<FavDetailPage> {
void initState() { void initState() {
super.initState(); super.initState();
mediaId = Get.parameters['mediaId']!; mediaId = Get.parameters['mediaId']!;
_favDetailController.scrollController.addListener( _favDetailController.scrollController.addListener(listener);
() { }
if (_favDetailController.scrollController.offset > 160) {
_favDetailController.titleCtr.value = true; void listener() {
} else if (_favDetailController.scrollController.offset <= 160) { if (_favDetailController.scrollController.offset > 160) {
_favDetailController.titleCtr.value = false; _favDetailController.titleCtr.value = true;
} } else if (_favDetailController.scrollController.offset <= 160) {
}, _favDetailController.titleCtr.value = false;
); }
} }
@override @override
void dispose() { void dispose() {
_favDetailController.scrollController.removeListener(() {}); _favDetailController.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }

View File

@@ -27,21 +27,21 @@ class _FollowListState extends State<FollowList> {
void initState() { void initState() {
super.initState(); super.initState();
_futureBuilderFuture = widget.ctr.queryFollowings('init'); _futureBuilderFuture = widget.ctr.queryFollowings('init');
scrollController.addListener( scrollController.addListener(listener);
() async { }
if (scrollController.position.pixels >=
scrollController.position.maxScrollExtent - 200) { void listener() {
EasyThrottle.throttle('follow', const Duration(seconds: 1), () { if (scrollController.position.pixels >=
widget.ctr.queryFollowings('onLoad'); scrollController.position.maxScrollExtent - 200) {
}); EasyThrottle.throttle('follow', const Duration(seconds: 1), () {
} widget.ctr.queryFollowings('onLoad');
}, });
); }
} }
@override @override
void dispose() { void dispose() {
scrollController.removeListener(() {}); scrollController.removeListener(listener);
scrollController.dispose(); scrollController.dispose();
super.dispose(); super.dispose();
} }

View File

@@ -37,16 +37,16 @@ class _OwnerFollowListState extends State<OwnerFollowList>
mid = widget.ctr.mid; mid = widget.ctr.mid;
tagItem = widget.tagItem!; tagItem = widget.tagItem!;
_futureBuilderFuture = followUpGroup('init'); _futureBuilderFuture = followUpGroup('init');
scrollController.addListener( scrollController.addListener(listener);
() async { }
if (scrollController.position.pixels >=
scrollController.position.maxScrollExtent - 200) { void listener() {
EasyThrottle.throttle('follow', const Duration(seconds: 1), () { if (scrollController.position.pixels >=
followUpGroup('onLoad'); scrollController.position.maxScrollExtent - 200) {
}); EasyThrottle.throttle('follow', const Duration(seconds: 1), () {
} followUpGroup('onLoad');
}, });
); }
} }
// 获取分组下up // 获取分组下up
@@ -70,7 +70,7 @@ class _OwnerFollowListState extends State<OwnerFollowList>
@override @override
void dispose() { void dispose() {
scrollController.removeListener(() {}); scrollController.removeListener(listener);
scrollController.dispose(); scrollController.dispose();
super.dispose(); super.dispose();
} }

View File

@@ -33,28 +33,28 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_hotController.scrollController.addListener(listener);
}
void listener() {
StreamController<bool> mainStream = StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream; Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream = StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream; Get.find<HomeController>().searchBarStream;
_hotController.scrollController.addListener( final ScrollDirection direction =
() { _hotController.scrollController.position.userScrollDirection;
final ScrollDirection direction = if (direction == ScrollDirection.forward) {
_hotController.scrollController.position.userScrollDirection; mainStream.add(true);
if (direction == ScrollDirection.forward) { searchBarStream.add(true);
mainStream.add(true); } else if (direction == ScrollDirection.reverse) {
searchBarStream.add(true); mainStream.add(false);
} else if (direction == ScrollDirection.reverse) { searchBarStream.add(false);
mainStream.add(false); }
searchBarStream.add(false);
}
},
);
} }
@override @override
void dispose() { void dispose() {
_hotController.scrollController.removeListener(() {}); _hotController.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }

View File

@@ -113,32 +113,32 @@ class _HtmlRenderPageState extends State<HtmlRenderPage>
@override @override
void dispose() { void dispose() {
fabAnimationCtr.dispose(); fabAnimationCtr.dispose();
_htmlRenderCtr.scrollController.removeListener(() {}); _htmlRenderCtr.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }
void scrollListener() { void scrollListener() {
_htmlRenderCtr.scrollController.addListener( _htmlRenderCtr.scrollController.addListener(listener);
() { }
// 标题
// if (scrollController.offset > 55 && !_visibleTitle) {
// _visibleTitle = true;
// titleStreamC.add(true);
// } else if (scrollController.offset <= 55 && _visibleTitle) {
// _visibleTitle = false;
// titleStreamC.add(false);
// }
// fab按钮 void listener() {
final ScrollDirection direction = // 标题
_htmlRenderCtr.scrollController.position.userScrollDirection; // if (scrollController.offset > 55 && !_visibleTitle) {
if (direction == ScrollDirection.forward) { // _visibleTitle = true;
_showFab(); // titleStreamC.add(true);
} else if (direction == ScrollDirection.reverse) { // } else if (scrollController.offset <= 55 && _visibleTitle) {
_hideFab(); // _visibleTitle = false;
} // titleStreamC.add(false);
}, // }
);
// fab按钮
final ScrollDirection direction =
_htmlRenderCtr.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) {
_showFab();
} else if (direction == ScrollDirection.reverse) {
_hideFab();
}
} }
void _showFab() { void _showFab() {

View File

@@ -37,28 +37,28 @@ class _LivePageState extends State<LivePage>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_controller.scrollController.addListener(listener);
}
void listener() {
StreamController<bool> mainStream = StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream; Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream = StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream; Get.find<HomeController>().searchBarStream;
_controller.scrollController.addListener( final ScrollDirection direction =
() { _controller.scrollController.position.userScrollDirection;
final ScrollDirection direction = if (direction == ScrollDirection.forward) {
_controller.scrollController.position.userScrollDirection; mainStream.add(true);
if (direction == ScrollDirection.forward) { searchBarStream.add(true);
mainStream.add(true); } else if (direction == ScrollDirection.reverse) {
searchBarStream.add(true); mainStream.add(false);
} else if (direction == ScrollDirection.reverse) { searchBarStream.add(false);
mainStream.add(false); }
searchBarStream.add(false);
}
},
);
} }
@override @override
void dispose() { void dispose() {
_controller.scrollController.removeListener(() {}); _controller.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }

View File

@@ -181,24 +181,27 @@ class LiveRoomController extends GetxController {
} }
}); });
msgStream?.init(); msgStream?.init();
scrollController.addListener(() { scrollController.addListener(listener);
if (scrollController.position.userScrollDirection ==
ScrollDirection.forward) {
disableAutoScroll.value = true;
} else if (scrollController.position.userScrollDirection ==
ScrollDirection.reverse) {
final pos = scrollController.position;
if (pos.maxScrollExtent - pos.pixels <= 100) {
disableAutoScroll.value = false;
}
}
});
} }
}); });
} }
void listener() {
if (scrollController.position.userScrollDirection ==
ScrollDirection.forward) {
disableAutoScroll.value = true;
} else if (scrollController.position.userScrollDirection ==
ScrollDirection.reverse) {
final pos = scrollController.position;
if (pos.maxScrollExtent - pos.pixels <= 100) {
disableAutoScroll.value = false;
}
}
}
@override @override
void onClose() { void onClose() {
scrollController.removeListener(listener);
scrollController.dispose(); scrollController.dispose();
super.onClose(); super.onClose();
} }

View File

@@ -28,25 +28,24 @@ class _MediaPageState extends State<MediaPage>
void initState() { void initState() {
super.initState(); super.initState();
mediaController = Get.put(MediaController()); mediaController = Get.put(MediaController());
mediaController.scrollController.addListener(listener);
}
void listener() {
StreamController<bool> mainStream = StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream; Get.find<MainController>().bottomBarStream;
final ScrollDirection direction =
mediaController.scrollController.addListener( mediaController.scrollController.position.userScrollDirection;
() { if (direction == ScrollDirection.forward) {
final ScrollDirection direction = mainStream.add(true);
mediaController.scrollController.position.userScrollDirection; } else if (direction == ScrollDirection.reverse) {
if (direction == ScrollDirection.forward) { mainStream.add(false);
mainStream.add(true); }
} else if (direction == ScrollDirection.reverse) {
mainStream.add(false);
}
},
);
} }
@override @override
void dispose() { void dispose() {
mediaController.scrollController.removeListener(() {}); mediaController.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }

View File

@@ -41,10 +41,18 @@ class _MemberPageNewState extends State<MemberPageNew>
MemberControllerNew(mid: _mid), MemberControllerNew(mid: _mid),
tag: _heroTag, tag: _heroTag,
); );
_userController.scrollController.addListener(() { _userController.scrollController.addListener(listener);
_userController.scrollRatio.value = }
min(1.0, _userController.scrollController.offset.round() / 120);
}); void listener() {
_userController.scrollRatio.value =
min(1.0, _userController.scrollController.offset.round() / 120);
}
@override
void dispose() {
_userController.scrollController.removeListener(listener);
super.dispose();
} }
@override @override

View File

@@ -44,21 +44,21 @@ class _MemberPageState extends State<MemberPage>
_futureBuilderFuture = _memberController.getInfo(); _futureBuilderFuture = _memberController.getInfo();
_memberSeasonsFuture = _memberController.getMemberSeasons(); _memberSeasonsFuture = _memberController.getMemberSeasons();
_memberCoinsFuture = _memberController.getRecentCoinVideo(); _memberCoinsFuture = _memberController.getRecentCoinVideo();
_extendNestCtr.addListener( _extendNestCtr.addListener(listener);
() { }
final double offset = _extendNestCtr.position.pixels;
if (offset > 100) { void listener() {
appbarStream.add(true); final double offset = _extendNestCtr.position.pixels;
} else { if (offset > 100) {
appbarStream.add(false); appbarStream.add(true);
} } else {
}, appbarStream.add(false);
); }
} }
@override @override
void dispose() { void dispose() {
_extendNestCtr.removeListener(() {}); _extendNestCtr.removeListener(listener);
_extendNestCtr.dispose(); _extendNestCtr.dispose();
appbarStream.close(); appbarStream.close();
super.dispose(); super.dispose();

View File

@@ -22,7 +22,7 @@ class _MemberArchivePageState extends State<MemberArchivePage> {
@override @override
void dispose() { void dispose() {
_memberArchivesController.scrollController.removeListener(() {}); _memberArchivesController.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }
@@ -34,19 +34,18 @@ class _MemberArchivePageState extends State<MemberArchivePage> {
_memberArchivesController = _memberArchivesController =
Get.put(MemberArchiveController(), tag: heroTag); Get.put(MemberArchiveController(), tag: heroTag);
_futureBuilderFuture = _memberArchivesController.getMemberArchive('init'); _futureBuilderFuture = _memberArchivesController.getMemberArchive('init');
_memberArchivesController.scrollController.addListener( _memberArchivesController.scrollController.addListener(listener);
() { }
if (_memberArchivesController.scrollController.position.pixels >=
_memberArchivesController void listener() {
.scrollController.position.maxScrollExtent - if (_memberArchivesController.scrollController.position.pixels >=
200) { _memberArchivesController.scrollController.position.maxScrollExtent -
EasyThrottle.throttle( 200) {
'member_archives', const Duration(milliseconds: 500), () { EasyThrottle.throttle(
_memberArchivesController.onLoad(); 'member_archives', const Duration(milliseconds: 500), () {
}); _memberArchivesController.onLoad();
} });
}, }
);
} }
@override @override

View File

@@ -21,7 +21,7 @@ class _MemberSeasonsPageState extends State<MemberSeasonsPage> {
@override @override
void dispose() { void dispose() {
_memberSeasonsController.scrollController.removeListener(() {}); _memberSeasonsController.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }
@@ -30,18 +30,18 @@ class _MemberSeasonsPageState extends State<MemberSeasonsPage> {
super.initState(); super.initState();
_futureBuilderFuture = _futureBuilderFuture =
_memberSeasonsController.getSeasonDetail('onRefresh'); _memberSeasonsController.getSeasonDetail('onRefresh');
_memberSeasonsController.scrollController.addListener( _memberSeasonsController.scrollController.addListener(listener);
() { }
if (_memberSeasonsController.scrollController.position.pixels >=
_memberSeasonsController.scrollController.position.maxScrollExtent - void listener() {
200) { if (_memberSeasonsController.scrollController.position.pixels >=
EasyThrottle.throttle( _memberSeasonsController.scrollController.position.maxScrollExtent -
'member_archives', const Duration(milliseconds: 500), () { 200) {
_memberSeasonsController.onLoad(); EasyThrottle.throttle(
}); 'member_archives', const Duration(milliseconds: 500), () {
} _memberSeasonsController.onLoad();
}, });
); }
} }
@override @override

View File

@@ -44,22 +44,6 @@ class RankController extends GetxController with GetTickerProviderStateMixin {
length: tabs.length, length: tabs.length,
vsync: this, vsync: this,
); );
// 监听 tabController 切换
// if (enableGradientBg) {
// tabController.animation!.addListener(() {
// if (tabController.indexIsChanging) {
// if (initialIndex.value != tabController.index) {
// initialIndex.value = tabController.index;
// }
// } else {
// final int temp = tabController.animation!.value.round();
// if (initialIndex.value != temp) {
// initialIndex.value = temp;
// tabController.index = initialIndex.value;
// }
// }
// });
// }
} }
@override @override

View File

@@ -36,28 +36,28 @@ class _ZonePageState extends State<ZonePage>
super.initState(); super.initState();
_zoneController = _zoneController =
Get.put(ZoneController(zoneID: widget.rid), tag: widget.rid.toString()); Get.put(ZoneController(zoneID: widget.rid), tag: widget.rid.toString());
_zoneController.scrollController.addListener(listener);
}
void listener() {
StreamController<bool> mainStream = StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream; Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream = StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream; Get.find<HomeController>().searchBarStream;
_zoneController.scrollController.addListener( final ScrollDirection direction =
() { _zoneController.scrollController.position.userScrollDirection;
final ScrollDirection direction = if (direction == ScrollDirection.forward) {
_zoneController.scrollController.position.userScrollDirection; mainStream.add(true);
if (direction == ScrollDirection.forward) { searchBarStream.add(true);
mainStream.add(true); } else if (direction == ScrollDirection.reverse) {
searchBarStream.add(true); mainStream.add(false);
} else if (direction == ScrollDirection.reverse) { searchBarStream.add(false);
mainStream.add(false); }
searchBarStream.add(false);
}
},
);
} }
@override @override
void dispose() { void dispose() {
_zoneController.scrollController.removeListener(() {}); _zoneController.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }

View File

@@ -32,28 +32,28 @@ class _RcmdPageState extends State<RcmdPage>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_controller.scrollController.addListener(listener);
}
void listener() {
StreamController<bool> mainStream = StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream; Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream = StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream; Get.find<HomeController>().searchBarStream;
_controller.scrollController.addListener( final ScrollDirection direction =
() { _controller.scrollController.position.userScrollDirection;
final ScrollDirection direction = if (direction == ScrollDirection.forward) {
_controller.scrollController.position.userScrollDirection; mainStream.add(true);
if (direction == ScrollDirection.forward) { searchBarStream.add(true);
mainStream.add(true); } else if (direction == ScrollDirection.reverse) {
searchBarStream.add(true); mainStream.add(false);
} else if (direction == ScrollDirection.reverse) { searchBarStream.add(false);
mainStream.add(false); }
searchBarStream.add(false);
}
},
);
} }
@override @override
void dispose() { void dispose() {
_controller.scrollController.removeListener(() {}); _controller.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }

View File

@@ -35,17 +35,19 @@ class _SearchResultPageState extends State<SearchResultPage>
); );
if (Get.arguments is int) { if (Get.arguments is int) {
_tabController.addListener(() { _tabController.addListener(listener);
if (Get.isRegistered<SSearchController>()) { }
Get.find<SSearchController>().initIndex = _tabController.index; }
}
}); void listener() {
if (Get.isRegistered<SSearchController>()) {
Get.find<SSearchController>().initIndex = _tabController.index;
} }
} }
@override @override
void dispose() { void dispose() {
_tabController.removeListener(() {}); _tabController.removeListener(listener);
_tabController.dispose(); _tabController.dispose();
super.dispose(); super.dispose();
} }

View File

@@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@@ -21,9 +22,12 @@ class _SetDisplayModeState extends State<SetDisplayMode> {
final ValueNotifier<int> page = ValueNotifier<int>(0); final ValueNotifier<int> page = ValueNotifier<int>(0);
late final PageController controller = PageController() late final PageController controller = PageController()
..addListener(() { ..addListener(listener);
page.value = controller.page!.round();
}); void listener() {
page.value = controller.page!.round();
}
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@@ -35,7 +39,7 @@ class _SetDisplayModeState extends State<SetDisplayMode> {
@override @override
void dispose() { void dispose() {
controller.removeListener(() {}); controller.removeListener(listener);
controller.dispose(); controller.dispose();
super.dispose(); super.dispose();
} }

View File

@@ -35,28 +35,28 @@ class _SubDetailPageState extends State<SubDetailPage> {
id = Get.parameters['id']!; id = Get.parameters['id']!;
_futureBuilderFuture = _subDetailController.queryUserSubFolderDetail(); _futureBuilderFuture = _subDetailController.queryUserSubFolderDetail();
titleStreamC = StreamController<bool>(); titleStreamC = StreamController<bool>();
_controller.addListener( _controller.addListener(listener);
() { }
if (_controller.offset > 160) {
titleStreamC.add(true);
} else if (_controller.offset <= 160) {
titleStreamC.add(false);
}
if (_controller.position.pixels >= void listener() {
_controller.position.maxScrollExtent - 200) { if (_controller.offset > 160) {
EasyThrottle.throttle('subDetail', const Duration(seconds: 1), () { titleStreamC.add(true);
_subDetailController.onLoad(); } else if (_controller.offset <= 160) {
}); titleStreamC.add(false);
} }
},
); if (_controller.position.pixels >=
_controller.position.maxScrollExtent - 200) {
EasyThrottle.throttle('subDetail', const Duration(seconds: 1), () {
_subDetailController.onLoad();
});
}
} }
@override @override
void dispose() { void dispose() {
titleStreamC.close(); titleStreamC.close();
_controller.removeListener(() {}); _controller.removeListener(listener);
_controller.dispose(); _controller.dispose();
super.dispose(); super.dispose();
} }

View File

@@ -82,20 +82,22 @@ class ActionItemState extends State<ActionItem> with TickerProviderStateMixin {
); );
_animation = Tween<double>(begin: 0, end: -2 * pi).animate(controller!) _animation = Tween<double>(begin: 0, end: -2 * pi).animate(controller!)
..addListener(() { ..addListener(listener);
setState(() {
_hideCircle = _animation?.value == -2 * pi;
if (_hideCircle) {
controller?.reset();
if (_isThumbUp) {
widget.onLongPress?.call();
}
}
});
});
} }
} }
void listener() {
setState(() {
_hideCircle = _animation?.value == -2 * pi;
if (_hideCircle) {
controller?.reset();
if (_isThumbUp) {
widget.onLongPress?.call();
}
}
});
}
void cancelTimer() { void cancelTimer() {
_timer?.cancel(); _timer?.cancel();
_timer = null; _timer = null;
@@ -104,7 +106,7 @@ class ActionItemState extends State<ActionItem> with TickerProviderStateMixin {
@override @override
void dispose() { void dispose() {
cancelTimer(); cancelTimer();
_animation?.removeListener(() {}); _animation?.removeListener(listener);
controller?.dispose(); controller?.dispose();
super.dispose(); super.dispose();
} }

View File

@@ -75,27 +75,27 @@ class _VideoReplyPanelState extends State<VideoReplyPanel>
@override @override
void dispose() { void dispose() {
_videoReplyController.scrollController.removeListener(() {}); _videoReplyController.scrollController.removeListener(listener);
fabAnimationCtr.dispose(); fabAnimationCtr.dispose();
super.dispose(); super.dispose();
} }
void scrollListener() { void scrollListener() {
_videoReplyController.scrollController.addListener( _videoReplyController.scrollController.addListener(listener);
() { }
final ScrollDirection direction =
_videoReplyController.scrollController.position.userScrollDirection; void listener() {
if (direction == ScrollDirection.forward) { final ScrollDirection direction =
if (mounted) { _videoReplyController.scrollController.position.userScrollDirection;
_showFab(); if (direction == ScrollDirection.forward) {
} if (mounted) {
} else if (direction == ScrollDirection.reverse) { _showFab();
if (mounted) { }
_hideFab(); } else if (direction == ScrollDirection.reverse) {
} if (mounted) {
} _hideFab();
}, }
); }
} }
void _showFab() { void _showFab() {

View File

@@ -60,19 +60,21 @@ class _VideoReplyNewDialogState extends State<VideoReplyNewDialog>
_autoFocus() async { _autoFocus() async {
await Future.delayed(const Duration(milliseconds: 300)); await Future.delayed(const Duration(milliseconds: 300));
if (context.mounted) { if (mounted) {
FocusScope.of(context).requestFocus(replyContentFocusNode); FocusScope.of(context).requestFocus(replyContentFocusNode);
} }
} }
_focusListener() { _focusListener() {
replyContentFocusNode.addListener(() { replyContentFocusNode.addListener(listener);
if (replyContentFocusNode.hasFocus) { }
setState(() {
toolbarType = 'input'; void listener() {
}); if (replyContentFocusNode.hasFocus) {
} setState(() {
}); toolbarType = 'input';
});
}
} }
Future submitReplyAdd() async { Future submitReplyAdd() async {
@@ -140,7 +142,7 @@ class _VideoReplyNewDialogState extends State<VideoReplyNewDialog>
_publishStream.close(); _publishStream.close();
WidgetsBinding.instance.removeObserver(this); WidgetsBinding.instance.removeObserver(this);
_replyContentController.dispose(); _replyContentController.dispose();
replyContentFocusNode.removeListener(() {}); replyContentFocusNode.removeListener(listener);
replyContentFocusNode.dispose(); replyContentFocusNode.dispose();
super.dispose(); super.dispose();
} }

View File

@@ -1193,11 +1193,13 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
CurveTween(curve: Curves.easeOut) CurveTween(curve: Curves.easeOut)
.animate(animController), .animate(animController),
); );
animController.addListener(() { void listener() {
transformationController.value = anim.value; transformationController.value = anim.value;
}); }
animController.addListener(listener);
await animController.forward(from: 0); await animController.forward(from: 0);
animController.removeListener(() {}); animController.removeListener(listener);
animController.dispose(); animController.dispose();
}, },
child: Text('还原屏幕'), child: Text('还原屏幕'),