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,12 +43,14 @@ 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(
() async {
final ScrollDirection direction = final ScrollDirection direction =
_bangumiController.scrollController.position.userScrollDirection; _bangumiController.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) { if (direction == ScrollDirection.forward) {
@@ -58,13 +60,11 @@ class _BangumiPageState extends State<BangumiPage>
mainStream.add(false); mainStream.add(false);
searchBarStream.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,8 +225,10 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
// 滑动事件监听 // 滑动事件监听
void scrollListener() { void scrollListener() {
_dynamicDetailController.scrollController.addListener( _dynamicDetailController.scrollController.addListener(listener);
() { }
void listener() {
// 标题 // 标题
if (_dynamicDetailController.scrollController.offset > 55 && if (_dynamicDetailController.scrollController.offset > 55 &&
!_visibleTitle) { !_visibleTitle) {
@@ -239,15 +241,13 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
} }
// fab按钮 // fab按钮
final ScrollDirection direction = _dynamicDetailController final ScrollDirection direction =
.scrollController.position.userScrollDirection; _dynamicDetailController.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) { if (direction == ScrollDirection.forward) {
_showFab(); _showFab();
} else if (direction == ScrollDirection.reverse) { } else if (direction == ScrollDirection.reverse) {
_hideFab(); _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);
}
}
void listener() {
if (_dynamicsController.scrollController.position.pixels >= if (_dynamicsController.scrollController.position.pixels >=
_dynamicsController.scrollController.position.maxScrollExtent - _dynamicsController.scrollController.position.maxScrollExtent - 300) {
300) {
EasyThrottle.throttle('following', const Duration(seconds: 1), () { EasyThrottle.throttle('following', const Duration(seconds: 1), () {
_dynamicsController.queryFollowing2(); _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);
() { }
void listener() {
if (_favDetailController.scrollController.offset > 160) { if (_favDetailController.scrollController.offset > 160) {
_favDetailController.titleCtr.value = true; _favDetailController.titleCtr.value = true;
} else if (_favDetailController.scrollController.offset <= 160) { } else if (_favDetailController.scrollController.offset <= 160) {
_favDetailController.titleCtr.value = false; _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 { }
void listener() {
if (scrollController.position.pixels >= if (scrollController.position.pixels >=
scrollController.position.maxScrollExtent - 200) { scrollController.position.maxScrollExtent - 200) {
EasyThrottle.throttle('follow', const Duration(seconds: 1), () { EasyThrottle.throttle('follow', const Duration(seconds: 1), () {
widget.ctr.queryFollowings('onLoad'); 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 { }
void listener() {
if (scrollController.position.pixels >= if (scrollController.position.pixels >=
scrollController.position.maxScrollExtent - 200) { scrollController.position.maxScrollExtent - 200) {
EasyThrottle.throttle('follow', const Duration(seconds: 1), () { EasyThrottle.throttle('follow', const Duration(seconds: 1), () {
followUpGroup('onLoad'); 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,12 +33,14 @@ 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 = final ScrollDirection direction =
_hotController.scrollController.position.userScrollDirection; _hotController.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) { if (direction == ScrollDirection.forward) {
@@ -48,13 +50,11 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
mainStream.add(false); mainStream.add(false);
searchBarStream.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,13 +113,15 @@ 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);
() { }
void listener() {
// 标题 // 标题
// if (scrollController.offset > 55 && !_visibleTitle) { // if (scrollController.offset > 55 && !_visibleTitle) {
// _visibleTitle = true; // _visibleTitle = true;
@@ -137,8 +139,6 @@ class _HtmlRenderPageState extends State<HtmlRenderPage>
} else if (direction == ScrollDirection.reverse) { } else if (direction == ScrollDirection.reverse) {
_hideFab(); _hideFab();
} }
},
);
} }
void _showFab() { void _showFab() {

View File

@@ -37,12 +37,14 @@ 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 = final ScrollDirection direction =
_controller.scrollController.position.userScrollDirection; _controller.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) { if (direction == ScrollDirection.forward) {
@@ -52,13 +54,11 @@ class _LivePageState extends State<LivePage>
mainStream.add(false); mainStream.add(false);
searchBarStream.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,7 +181,12 @@ class LiveRoomController extends GetxController {
} }
}); });
msgStream?.init(); msgStream?.init();
scrollController.addListener(() { scrollController.addListener(listener);
}
});
}
void listener() {
if (scrollController.position.userScrollDirection == if (scrollController.position.userScrollDirection ==
ScrollDirection.forward) { ScrollDirection.forward) {
disableAutoScroll.value = true; disableAutoScroll.value = true;
@@ -192,13 +197,11 @@ class LiveRoomController extends GetxController {
disableAutoScroll.value = false; disableAutoScroll.value = false;
} }
} }
});
}
});
} }
@override @override
void onClose() { void onClose() {
scrollController.removeListener(listener);
scrollController.dispose(); scrollController.dispose();
super.onClose(); super.onClose();
} }

View File

@@ -28,11 +28,12 @@ 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;
mediaController.scrollController.addListener(
() {
final ScrollDirection direction = final ScrollDirection direction =
mediaController.scrollController.position.userScrollDirection; mediaController.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) { if (direction == ScrollDirection.forward) {
@@ -40,13 +41,11 @@ class _MediaPageState extends State<MediaPage>
} else if (direction == ScrollDirection.reverse) { } else if (direction == ScrollDirection.reverse) {
mainStream.add(false); 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);
}
void listener() {
_userController.scrollRatio.value = _userController.scrollRatio.value =
min(1.0, _userController.scrollController.offset.round() / 120); 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);
() { }
void listener() {
final double offset = _extendNestCtr.position.pixels; final double offset = _extendNestCtr.position.pixels;
if (offset > 100) { if (offset > 100) {
appbarStream.add(true); appbarStream.add(true);
} else { } else {
appbarStream.add(false); 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);
() { }
void listener() {
if (_memberArchivesController.scrollController.position.pixels >= if (_memberArchivesController.scrollController.position.pixels >=
_memberArchivesController _memberArchivesController.scrollController.position.maxScrollExtent -
.scrollController.position.maxScrollExtent -
200) { 200) {
EasyThrottle.throttle( EasyThrottle.throttle(
'member_archives', const Duration(milliseconds: 500), () { 'member_archives', const Duration(milliseconds: 500), () {
_memberArchivesController.onLoad(); _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,8 +30,10 @@ class _MemberSeasonsPageState extends State<MemberSeasonsPage> {
super.initState(); super.initState();
_futureBuilderFuture = _futureBuilderFuture =
_memberSeasonsController.getSeasonDetail('onRefresh'); _memberSeasonsController.getSeasonDetail('onRefresh');
_memberSeasonsController.scrollController.addListener( _memberSeasonsController.scrollController.addListener(listener);
() { }
void listener() {
if (_memberSeasonsController.scrollController.position.pixels >= if (_memberSeasonsController.scrollController.position.pixels >=
_memberSeasonsController.scrollController.position.maxScrollExtent - _memberSeasonsController.scrollController.position.maxScrollExtent -
200) { 200) {
@@ -40,8 +42,6 @@ class _MemberSeasonsPageState extends State<MemberSeasonsPage> {
_memberSeasonsController.onLoad(); _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,12 +36,14 @@ 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 = final ScrollDirection direction =
_zoneController.scrollController.position.userScrollDirection; _zoneController.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) { if (direction == ScrollDirection.forward) {
@@ -51,13 +53,11 @@ class _ZonePageState extends State<ZonePage>
mainStream.add(false); mainStream.add(false);
searchBarStream.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,12 +32,14 @@ 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 = final ScrollDirection direction =
_controller.scrollController.position.userScrollDirection; _controller.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) { if (direction == ScrollDirection.forward) {
@@ -47,13 +49,11 @@ class _RcmdPageState extends State<RcmdPage>
mainStream.add(false); mainStream.add(false);
searchBarStream.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);
}
}
void listener() {
if (Get.isRegistered<SSearchController>()) { if (Get.isRegistered<SSearchController>()) {
Get.find<SSearchController>().initIndex = _tabController.index; 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);
void listener() {
page.value = controller.page!.round(); 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,8 +35,10 @@ 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);
() { }
void listener() {
if (_controller.offset > 160) { if (_controller.offset > 160) {
titleStreamC.add(true); titleStreamC.add(true);
} else if (_controller.offset <= 160) { } else if (_controller.offset <= 160) {
@@ -49,14 +51,12 @@ class _SubDetailPageState extends State<SubDetailPage> {
_subDetailController.onLoad(); _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,7 +82,11 @@ 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);
}
}
void listener() {
setState(() { setState(() {
_hideCircle = _animation?.value == -2 * pi; _hideCircle = _animation?.value == -2 * pi;
if (_hideCircle) { if (_hideCircle) {
@@ -92,8 +96,6 @@ class ActionItemState extends State<ActionItem> with TickerProviderStateMixin {
} }
} }
}); });
});
}
} }
void cancelTimer() { void cancelTimer() {
@@ -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,14 +75,16 @@ 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);
() { }
void listener() {
final ScrollDirection direction = final ScrollDirection direction =
_videoReplyController.scrollController.position.userScrollDirection; _videoReplyController.scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) { if (direction == ScrollDirection.forward) {
@@ -94,8 +96,6 @@ class _VideoReplyPanelState extends State<VideoReplyPanel>
_hideFab(); _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);
}
void listener() {
if (replyContentFocusNode.hasFocus) { if (replyContentFocusNode.hasFocus) {
setState(() { setState(() {
toolbarType = 'input'; 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('还原屏幕'),