mod: 控制器监听事件移除

This commit is contained in:
guozhigq
2023-08-20 09:12:31 +08:00
parent 6bbbdd7710
commit 8627869309
16 changed files with 114 additions and 31 deletions

View File

@ -23,13 +23,15 @@ class _BangumiPageState extends State<BangumiPage>
with AutomaticKeepAliveClientMixin {
final BangumiController _bangumidController = Get.put(BangumiController());
late Future? _futureBuilderFuture;
late ScrollController scrollController;
@override
bool get wantKeepAlive => true;
@override
void initState() {
super.initState();
ScrollController scrollController = _bangumidController.scrollController;
scrollController = _bangumidController.scrollController;
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
_futureBuilderFuture = _bangumidController.queryBangumiListFeed();
@ -54,6 +56,12 @@ class _BangumiPageState extends State<BangumiPage>
);
}
@override
void dispose() {
scrollController.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
super.build(context);

View File

@ -46,6 +46,7 @@ class _BlackListPageState extends State<BlackListPage> {
List<int> blackMidsList =
_blackListController.blackList.map<int>((e) => e.mid!).toList();
setting.put(SettingBoxKey.blackMidsList, blackMidsList);
scrollController.removeListener(() {});
super.dispose();
}

View File

@ -95,6 +95,12 @@ class _DynamicDetailPageState extends State<DynamicDetailPage> {
);
}
@override
void dispose() {
scrollController.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(

View File

@ -32,6 +32,7 @@ class _DynamicsPageState extends State<DynamicsPage>
bool _isLoadingMore = false;
Box user = GStrorage.user;
EventBus eventBus = EventBus();
late ScrollController scrollController;
@override
bool get wantKeepAlive => true;
@ -41,7 +42,7 @@ class _DynamicsPageState extends State<DynamicsPage>
super.initState();
_futureBuilderFuture = _dynamicsController.queryFollowDynamic();
_futureBuilderFutureUp = _dynamicsController.queryFollowUp();
ScrollController scrollController = _dynamicsController.scrollController;
scrollController = _dynamicsController.scrollController;
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
scrollController.addListener(
@ -74,6 +75,12 @@ class _DynamicsPageState extends State<DynamicsPage>
});
}
@override
void dispose() {
scrollController.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
super.build(context);

View File

@ -37,6 +37,12 @@ class _FansPageState extends State<FansPage> {
);
}
@override
void dispose() {
scrollController.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(

View File

@ -37,6 +37,12 @@ class _FollowPageState extends State<FollowPage> {
);
}
@override
void dispose() {
scrollController.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(

View File

@ -1,3 +1,4 @@
import 'package:easy_debounce/easy_throttle.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pilipala/common/skeleton/video_card_h.dart';
@ -17,25 +18,33 @@ class HistoryPage extends StatefulWidget {
class _HistoryPageState extends State<HistoryPage> {
final HistoryController _historyController = Get.put(HistoryController());
Future? _futureBuilderFuture;
late ScrollController scrollController;
@override
void initState() {
_futureBuilderFuture = _historyController.queryHistoryList();
super.initState();
_historyController.scrollController.addListener(
scrollController = _historyController.scrollController;
scrollController.addListener(
() {
if (_historyController.scrollController.position.pixels >=
_historyController.scrollController.position.maxScrollExtent -
300) {
if (scrollController.position.pixels >=
scrollController.position.maxScrollExtent - 300) {
if (!_historyController.isLoadingMore.value) {
_historyController.onLoad();
EasyThrottle.throttle('history', const Duration(seconds: 1), () {
_historyController.onLoad();
});
}
}
},
);
}
@override
void dispose() {
scrollController.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(

View File

@ -23,6 +23,7 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
final HotController _hotController = Get.put(HotController());
List videoList = [];
Future? _futureBuilderFuture;
late ScrollController scrollController;
@override
bool get wantKeepAlive => true;
@ -31,7 +32,7 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
void initState() {
super.initState();
_futureBuilderFuture = _hotController.queryHotFeed('init');
ScrollController scrollController = _hotController.scrollController;
scrollController = _hotController.scrollController;
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
scrollController.addListener(
@ -55,6 +56,12 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
);
}
@override
void dispose() {
scrollController.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
super.build(context);

View File

@ -24,12 +24,13 @@ class LivePage extends StatefulWidget {
class _LivePageState extends State<LivePage> {
final LiveController _liveController = Get.put(LiveController());
late Future _futureBuilderFuture;
late ScrollController scrollController;
@override
void initState() {
super.initState();
_futureBuilderFuture = _liveController.queryLiveList('init');
ScrollController scrollController = _liveController.scrollController;
scrollController = _liveController.scrollController;
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
scrollController.addListener(
@ -53,6 +54,12 @@ class _LivePageState extends State<LivePage> {
);
}
@override
void dispose() {
scrollController.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(

View File

@ -43,6 +43,12 @@ class _MemberPageState extends State<MemberPage>
);
}
@override
void dispose() {
_extendNestCtr.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(

View File

@ -41,7 +41,8 @@ class _RcmdPageState extends State<RcmdPage>
() {
if (scrollController.position.pixels >=
scrollController.position.maxScrollExtent - 200) {
EasyThrottle.throttle('my-throttler', const Duration(seconds: 1), () {
EasyThrottle.throttle(
'my-throttler', const Duration(milliseconds: 500), () {
_rcmdController.isLoadingMore = true;
_rcmdController.onLoad();
});
@ -58,6 +59,12 @@ class _RcmdPageState extends State<RcmdPage>
);
}
@override
void dispose() {
_rcmdController.scrollController.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
super.build(context);

View File

@ -1,3 +1,4 @@
import 'package:easy_debounce/easy_throttle.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pilipala/common/skeleton/media_bangumi.dart';
@ -29,6 +30,7 @@ class _SearchPanelState extends State<SearchPanel>
bool _isLoadingMore = false;
late Future _futureBuilderFuture;
late ScrollController scrollController;
@override
bool get wantKeepAlive => true;
@ -43,20 +45,24 @@ class _SearchPanelState extends State<SearchPanel>
),
tag: widget.searchType!.type,
);
ScrollController scrollController = _searchPanelController.scrollController;
scrollController = _searchPanelController.scrollController;
scrollController.addListener(() async {
if (scrollController.position.pixels >=
scrollController.position.maxScrollExtent - 100) {
if (!_isLoadingMore) {
_isLoadingMore = true;
await _searchPanelController.onSearch(type: 'onLoad');
_isLoadingMore = false;
}
EasyThrottle.throttle('history', const Duration(seconds: 1), () {
_searchPanelController.onSearch(type: 'onLoad');
});
}
});
_futureBuilderFuture = _searchPanelController.onSearch();
}
@override
void dispose() {
scrollController.removeListener(() {});
super.dispose();
}
@override
Widget build(BuildContext context) {
super.build(context);

View File

@ -34,6 +34,7 @@ class _VideoReplyPanelState extends State<VideoReplyPanel>
with AutomaticKeepAliveClientMixin, TickerProviderStateMixin {
late VideoReplyController _videoReplyController;
late AnimationController fabAnimationCtr;
late ScrollController scrollController;
Future? _futureBuilderFuture;
bool _isFabVisible = true;
@ -61,18 +62,18 @@ class _VideoReplyPanelState extends State<VideoReplyPanel>
vsync: this, duration: const Duration(milliseconds: 300));
_futureBuilderFuture = _videoReplyController.queryReplyList();
_videoReplyController.scrollController.addListener(
scrollController = _videoReplyController.scrollController;
scrollController.addListener(
() {
if (_videoReplyController.scrollController.position.pixels >=
_videoReplyController.scrollController.position.maxScrollExtent -
300) {
if (scrollController.position.pixels >=
scrollController.position.maxScrollExtent - 300) {
EasyThrottle.throttle('replylist', const Duration(seconds: 2), () {
_videoReplyController.onLoad();
});
}
final ScrollDirection direction =
_videoReplyController.scrollController.position.userScrollDirection;
scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) {
_showFab();
} else if (direction == ScrollDirection.reverse) {
@ -113,7 +114,7 @@ class _VideoReplyPanelState extends State<VideoReplyPanel>
void dispose() {
super.dispose();
fabAnimationCtr.dispose();
_videoReplyController.scrollController.dispose();
scrollController.dispose();
}
@override

View File

@ -38,6 +38,7 @@ class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
Box localCache = GStrorage.localCache;
late double sheetHeight;
Future? _futureBuilderFuture;
late ScrollController scrollController;
@override
void initState() {
@ -48,12 +49,11 @@ class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
super.initState();
// 上拉加载更多
_videoReplyReplyController.scrollController.addListener(
scrollController = _videoReplyReplyController.scrollController;
scrollController.addListener(
() {
if (_videoReplyReplyController.scrollController.position.pixels >=
_videoReplyReplyController
.scrollController.position.maxScrollExtent -
300) {
if (scrollController.position.pixels >=
scrollController.position.maxScrollExtent - 300) {
if (!_videoReplyReplyController.isLoadingMore) {
_videoReplyReplyController.onLoad();
}
@ -69,7 +69,7 @@ class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
@override
void dispose() {
// _videoReplyReplyController.scrollController.dispose();
scrollController.dispose();
super.dispose();
}

View File

@ -229,6 +229,7 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
@override
void dispose() {
animationController.dispose();
FlutterVolumeController.removeListener();
super.dispose();
}

View File

@ -22,12 +22,17 @@ class GStrorage {
await Hive.initFlutter('$path/hive');
regAdapter();
// 用户信息
user = await Hive.openBox('user');
user = await Hive.openBox(
'user',
compactionStrategy: (entries, deletedEntries) {
return deletedEntries > 10;
},
);
// 首页推荐视频
recVideo = await Hive.openBox(
'recVideo',
compactionStrategy: (entries, deletedEntries) {
return deletedEntries > 20;
return deletedEntries > 12;
},
);
// 登录用户信息