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)
.animate(CurvedAnimation(parent: controller, curve: Curves.linear));
scaleAnimation = CurvedAnimation(parent: controller, curve: Curves.linear);
controller.addListener(() => setState(() {}));
controller.addListener(listener);
controller.forward();
}
void listener() {
setState(() {});
}
@override
void dispose() {
controller.removeListener(() {});
controller.removeListener(listener);
controller.dispose();
super.dispose();
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -47,23 +47,7 @@ class _DynamicsTabPageState extends State<DynamicsTabPage>
..mid = dynamicsController.mid.value,
tag: widget.dynamicsType,
);
_dynamicsTabController.scrollController.addListener(() {
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 (_) {}
});
_dynamicsTabController.scrollController.addListener(listener);
if (widget.dynamicsType == 'up') {
_listener = dynamicsController.mid.listen((mid) {
// debugPrint('midListen: $mid');
@@ -76,10 +60,28 @@ class _DynamicsTabPageState extends State<DynamicsTabPage>
.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
void dispose() {
_listener?.cancel();
_dynamicsTabController.scrollController.removeListener(() {});
_dynamicsTabController.scrollController.removeListener(listener);
dynamicsController.mid.close();
super.dispose();
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -181,24 +181,27 @@ class LiveRoomController extends GetxController {
}
});
msgStream?.init();
scrollController.addListener(() {
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;
}
}
});
scrollController.addListener(listener);
}
});
}
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
void onClose() {
scrollController.removeListener(listener);
scrollController.dispose();
super.onClose();
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -44,22 +44,6 @@ class RankController extends GetxController with GetTickerProviderStateMixin {
length: tabs.length,
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

View File

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

View File

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

View File

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

View File

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

View File

@@ -35,28 +35,28 @@ class _SubDetailPageState extends State<SubDetailPage> {
id = Get.parameters['id']!;
_futureBuilderFuture = _subDetailController.queryUserSubFolderDetail();
titleStreamC = StreamController<bool>();
_controller.addListener(
() {
if (_controller.offset > 160) {
titleStreamC.add(true);
} else if (_controller.offset <= 160) {
titleStreamC.add(false);
}
_controller.addListener(listener);
}
if (_controller.position.pixels >=
_controller.position.maxScrollExtent - 200) {
EasyThrottle.throttle('subDetail', const Duration(seconds: 1), () {
_subDetailController.onLoad();
});
}
},
);
void listener() {
if (_controller.offset > 160) {
titleStreamC.add(true);
} 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
void dispose() {
titleStreamC.close();
_controller.removeListener(() {});
_controller.removeListener(listener);
_controller.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!)
..addListener(() {
setState(() {
_hideCircle = _animation?.value == -2 * pi;
if (_hideCircle) {
controller?.reset();
if (_isThumbUp) {
widget.onLongPress?.call();
}
}
});
});
..addListener(listener);
}
}
void listener() {
setState(() {
_hideCircle = _animation?.value == -2 * pi;
if (_hideCircle) {
controller?.reset();
if (_isThumbUp) {
widget.onLongPress?.call();
}
}
});
}
void cancelTimer() {
_timer?.cancel();
_timer = null;
@@ -104,7 +106,7 @@ class ActionItemState extends State<ActionItem> with TickerProviderStateMixin {
@override
void dispose() {
cancelTimer();
_animation?.removeListener(() {});
_animation?.removeListener(listener);
controller?.dispose();
super.dispose();
}

View File

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

View File

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

View File

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