mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
mod: listener
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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('还原屏幕'),
|
||||
|
||||
Reference in New Issue
Block a user