mod: 控制器监听事件移除
This commit is contained in:
@ -23,13 +23,15 @@ class _BangumiPageState extends State<BangumiPage>
|
|||||||
with AutomaticKeepAliveClientMixin {
|
with AutomaticKeepAliveClientMixin {
|
||||||
final BangumiController _bangumidController = Get.put(BangumiController());
|
final BangumiController _bangumidController = Get.put(BangumiController());
|
||||||
late Future? _futureBuilderFuture;
|
late Future? _futureBuilderFuture;
|
||||||
|
late ScrollController scrollController;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
ScrollController scrollController = _bangumidController.scrollController;
|
scrollController = _bangumidController.scrollController;
|
||||||
StreamController<bool> mainStream =
|
StreamController<bool> mainStream =
|
||||||
Get.find<MainController>().bottomBarStream;
|
Get.find<MainController>().bottomBarStream;
|
||||||
_futureBuilderFuture = _bangumidController.queryBangumiListFeed();
|
_futureBuilderFuture = _bangumidController.queryBangumiListFeed();
|
||||||
@ -54,6 +56,12 @@ class _BangumiPageState extends State<BangumiPage>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
super.build(context);
|
super.build(context);
|
||||||
|
@ -46,6 +46,7 @@ class _BlackListPageState extends State<BlackListPage> {
|
|||||||
List<int> blackMidsList =
|
List<int> blackMidsList =
|
||||||
_blackListController.blackList.map<int>((e) => e.mid!).toList();
|
_blackListController.blackList.map<int>((e) => e.mid!).toList();
|
||||||
setting.put(SettingBoxKey.blackMidsList, blackMidsList);
|
setting.put(SettingBoxKey.blackMidsList, blackMidsList);
|
||||||
|
scrollController.removeListener(() {});
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,6 +95,12 @@ class _DynamicDetailPageState extends State<DynamicDetailPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
@ -32,6 +32,7 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
bool _isLoadingMore = false;
|
bool _isLoadingMore = false;
|
||||||
Box user = GStrorage.user;
|
Box user = GStrorage.user;
|
||||||
EventBus eventBus = EventBus();
|
EventBus eventBus = EventBus();
|
||||||
|
late ScrollController scrollController;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
@ -41,7 +42,7 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
super.initState();
|
super.initState();
|
||||||
_futureBuilderFuture = _dynamicsController.queryFollowDynamic();
|
_futureBuilderFuture = _dynamicsController.queryFollowDynamic();
|
||||||
_futureBuilderFutureUp = _dynamicsController.queryFollowUp();
|
_futureBuilderFutureUp = _dynamicsController.queryFollowUp();
|
||||||
ScrollController scrollController = _dynamicsController.scrollController;
|
scrollController = _dynamicsController.scrollController;
|
||||||
StreamController<bool> mainStream =
|
StreamController<bool> mainStream =
|
||||||
Get.find<MainController>().bottomBarStream;
|
Get.find<MainController>().bottomBarStream;
|
||||||
scrollController.addListener(
|
scrollController.addListener(
|
||||||
@ -74,6 +75,12 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
super.build(context);
|
super.build(context);
|
||||||
|
@ -37,6 +37,12 @@ class _FansPageState extends State<FansPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
@ -37,6 +37,12 @@ class _FollowPageState extends State<FollowPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import 'package:easy_debounce/easy_throttle.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:pilipala/common/skeleton/video_card_h.dart';
|
import 'package:pilipala/common/skeleton/video_card_h.dart';
|
||||||
@ -17,25 +18,33 @@ class HistoryPage extends StatefulWidget {
|
|||||||
class _HistoryPageState extends State<HistoryPage> {
|
class _HistoryPageState extends State<HistoryPage> {
|
||||||
final HistoryController _historyController = Get.put(HistoryController());
|
final HistoryController _historyController = Get.put(HistoryController());
|
||||||
Future? _futureBuilderFuture;
|
Future? _futureBuilderFuture;
|
||||||
|
late ScrollController scrollController;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
_futureBuilderFuture = _historyController.queryHistoryList();
|
_futureBuilderFuture = _historyController.queryHistoryList();
|
||||||
super.initState();
|
super.initState();
|
||||||
|
scrollController = _historyController.scrollController;
|
||||||
_historyController.scrollController.addListener(
|
scrollController.addListener(
|
||||||
() {
|
() {
|
||||||
if (_historyController.scrollController.position.pixels >=
|
if (scrollController.position.pixels >=
|
||||||
_historyController.scrollController.position.maxScrollExtent -
|
scrollController.position.maxScrollExtent - 300) {
|
||||||
300) {
|
|
||||||
if (!_historyController.isLoadingMore.value) {
|
if (!_historyController.isLoadingMore.value) {
|
||||||
_historyController.onLoad();
|
EasyThrottle.throttle('history', const Duration(seconds: 1), () {
|
||||||
|
_historyController.onLoad();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
@ -23,6 +23,7 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
|
|||||||
final HotController _hotController = Get.put(HotController());
|
final HotController _hotController = Get.put(HotController());
|
||||||
List videoList = [];
|
List videoList = [];
|
||||||
Future? _futureBuilderFuture;
|
Future? _futureBuilderFuture;
|
||||||
|
late ScrollController scrollController;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
@ -31,7 +32,7 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_futureBuilderFuture = _hotController.queryHotFeed('init');
|
_futureBuilderFuture = _hotController.queryHotFeed('init');
|
||||||
ScrollController scrollController = _hotController.scrollController;
|
scrollController = _hotController.scrollController;
|
||||||
StreamController<bool> mainStream =
|
StreamController<bool> mainStream =
|
||||||
Get.find<MainController>().bottomBarStream;
|
Get.find<MainController>().bottomBarStream;
|
||||||
scrollController.addListener(
|
scrollController.addListener(
|
||||||
@ -55,6 +56,12 @@ class _HotPageState extends State<HotPage> with AutomaticKeepAliveClientMixin {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
super.build(context);
|
super.build(context);
|
||||||
|
@ -24,12 +24,13 @@ class LivePage extends StatefulWidget {
|
|||||||
class _LivePageState extends State<LivePage> {
|
class _LivePageState extends State<LivePage> {
|
||||||
final LiveController _liveController = Get.put(LiveController());
|
final LiveController _liveController = Get.put(LiveController());
|
||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
|
late ScrollController scrollController;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_futureBuilderFuture = _liveController.queryLiveList('init');
|
_futureBuilderFuture = _liveController.queryLiveList('init');
|
||||||
ScrollController scrollController = _liveController.scrollController;
|
scrollController = _liveController.scrollController;
|
||||||
StreamController<bool> mainStream =
|
StreamController<bool> mainStream =
|
||||||
Get.find<MainController>().bottomBarStream;
|
Get.find<MainController>().bottomBarStream;
|
||||||
scrollController.addListener(
|
scrollController.addListener(
|
||||||
@ -53,6 +54,12 @@ class _LivePageState extends State<LivePage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return Container(
|
||||||
|
@ -43,6 +43,12 @@ class _MemberPageState extends State<MemberPage>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_extendNestCtr.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
@ -41,7 +41,8 @@ class _RcmdPageState extends State<RcmdPage>
|
|||||||
() {
|
() {
|
||||||
if (scrollController.position.pixels >=
|
if (scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 200) {
|
scrollController.position.maxScrollExtent - 200) {
|
||||||
EasyThrottle.throttle('my-throttler', const Duration(seconds: 1), () {
|
EasyThrottle.throttle(
|
||||||
|
'my-throttler', const Duration(milliseconds: 500), () {
|
||||||
_rcmdController.isLoadingMore = true;
|
_rcmdController.isLoadingMore = true;
|
||||||
_rcmdController.onLoad();
|
_rcmdController.onLoad();
|
||||||
});
|
});
|
||||||
@ -58,6 +59,12 @@ class _RcmdPageState extends State<RcmdPage>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_rcmdController.scrollController.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
super.build(context);
|
super.build(context);
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import 'package:easy_debounce/easy_throttle.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:pilipala/common/skeleton/media_bangumi.dart';
|
import 'package:pilipala/common/skeleton/media_bangumi.dart';
|
||||||
@ -29,6 +30,7 @@ class _SearchPanelState extends State<SearchPanel>
|
|||||||
|
|
||||||
bool _isLoadingMore = false;
|
bool _isLoadingMore = false;
|
||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
|
late ScrollController scrollController;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
@ -43,20 +45,24 @@ class _SearchPanelState extends State<SearchPanel>
|
|||||||
),
|
),
|
||||||
tag: widget.searchType!.type,
|
tag: widget.searchType!.type,
|
||||||
);
|
);
|
||||||
ScrollController scrollController = _searchPanelController.scrollController;
|
scrollController = _searchPanelController.scrollController;
|
||||||
scrollController.addListener(() async {
|
scrollController.addListener(() async {
|
||||||
if (scrollController.position.pixels >=
|
if (scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 100) {
|
scrollController.position.maxScrollExtent - 100) {
|
||||||
if (!_isLoadingMore) {
|
EasyThrottle.throttle('history', const Duration(seconds: 1), () {
|
||||||
_isLoadingMore = true;
|
_searchPanelController.onSearch(type: 'onLoad');
|
||||||
await _searchPanelController.onSearch(type: 'onLoad');
|
});
|
||||||
_isLoadingMore = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
_futureBuilderFuture = _searchPanelController.onSearch();
|
_futureBuilderFuture = _searchPanelController.onSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
scrollController.removeListener(() {});
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
super.build(context);
|
super.build(context);
|
||||||
|
@ -34,6 +34,7 @@ class _VideoReplyPanelState extends State<VideoReplyPanel>
|
|||||||
with AutomaticKeepAliveClientMixin, TickerProviderStateMixin {
|
with AutomaticKeepAliveClientMixin, TickerProviderStateMixin {
|
||||||
late VideoReplyController _videoReplyController;
|
late VideoReplyController _videoReplyController;
|
||||||
late AnimationController fabAnimationCtr;
|
late AnimationController fabAnimationCtr;
|
||||||
|
late ScrollController scrollController;
|
||||||
|
|
||||||
Future? _futureBuilderFuture;
|
Future? _futureBuilderFuture;
|
||||||
bool _isFabVisible = true;
|
bool _isFabVisible = true;
|
||||||
@ -61,18 +62,18 @@ class _VideoReplyPanelState extends State<VideoReplyPanel>
|
|||||||
vsync: this, duration: const Duration(milliseconds: 300));
|
vsync: this, duration: const Duration(milliseconds: 300));
|
||||||
|
|
||||||
_futureBuilderFuture = _videoReplyController.queryReplyList();
|
_futureBuilderFuture = _videoReplyController.queryReplyList();
|
||||||
_videoReplyController.scrollController.addListener(
|
scrollController = _videoReplyController.scrollController;
|
||||||
|
scrollController.addListener(
|
||||||
() {
|
() {
|
||||||
if (_videoReplyController.scrollController.position.pixels >=
|
if (scrollController.position.pixels >=
|
||||||
_videoReplyController.scrollController.position.maxScrollExtent -
|
scrollController.position.maxScrollExtent - 300) {
|
||||||
300) {
|
|
||||||
EasyThrottle.throttle('replylist', const Duration(seconds: 2), () {
|
EasyThrottle.throttle('replylist', const Duration(seconds: 2), () {
|
||||||
_videoReplyController.onLoad();
|
_videoReplyController.onLoad();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
final ScrollDirection direction =
|
final ScrollDirection direction =
|
||||||
_videoReplyController.scrollController.position.userScrollDirection;
|
scrollController.position.userScrollDirection;
|
||||||
if (direction == ScrollDirection.forward) {
|
if (direction == ScrollDirection.forward) {
|
||||||
_showFab();
|
_showFab();
|
||||||
} else if (direction == ScrollDirection.reverse) {
|
} else if (direction == ScrollDirection.reverse) {
|
||||||
@ -113,7 +114,7 @@ class _VideoReplyPanelState extends State<VideoReplyPanel>
|
|||||||
void dispose() {
|
void dispose() {
|
||||||
super.dispose();
|
super.dispose();
|
||||||
fabAnimationCtr.dispose();
|
fabAnimationCtr.dispose();
|
||||||
_videoReplyController.scrollController.dispose();
|
scrollController.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -38,6 +38,7 @@ class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
|
|||||||
Box localCache = GStrorage.localCache;
|
Box localCache = GStrorage.localCache;
|
||||||
late double sheetHeight;
|
late double sheetHeight;
|
||||||
Future? _futureBuilderFuture;
|
Future? _futureBuilderFuture;
|
||||||
|
late ScrollController scrollController;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -48,12 +49,11 @@ class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
// 上拉加载更多
|
// 上拉加载更多
|
||||||
_videoReplyReplyController.scrollController.addListener(
|
scrollController = _videoReplyReplyController.scrollController;
|
||||||
|
scrollController.addListener(
|
||||||
() {
|
() {
|
||||||
if (_videoReplyReplyController.scrollController.position.pixels >=
|
if (scrollController.position.pixels >=
|
||||||
_videoReplyReplyController
|
scrollController.position.maxScrollExtent - 300) {
|
||||||
.scrollController.position.maxScrollExtent -
|
|
||||||
300) {
|
|
||||||
if (!_videoReplyReplyController.isLoadingMore) {
|
if (!_videoReplyReplyController.isLoadingMore) {
|
||||||
_videoReplyReplyController.onLoad();
|
_videoReplyReplyController.onLoad();
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
// _videoReplyReplyController.scrollController.dispose();
|
scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,6 +229,7 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
|
|||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
animationController.dispose();
|
animationController.dispose();
|
||||||
|
FlutterVolumeController.removeListener();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,12 +22,17 @@ class GStrorage {
|
|||||||
await Hive.initFlutter('$path/hive');
|
await Hive.initFlutter('$path/hive');
|
||||||
regAdapter();
|
regAdapter();
|
||||||
// 用户信息
|
// 用户信息
|
||||||
user = await Hive.openBox('user');
|
user = await Hive.openBox(
|
||||||
|
'user',
|
||||||
|
compactionStrategy: (entries, deletedEntries) {
|
||||||
|
return deletedEntries > 10;
|
||||||
|
},
|
||||||
|
);
|
||||||
// 首页推荐视频
|
// 首页推荐视频
|
||||||
recVideo = await Hive.openBox(
|
recVideo = await Hive.openBox(
|
||||||
'recVideo',
|
'recVideo',
|
||||||
compactionStrategy: (entries, deletedEntries) {
|
compactionStrategy: (entries, deletedEntries) {
|
||||||
return deletedEntries > 20;
|
return deletedEntries > 12;
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
// 登录用户信息
|
// 登录用户信息
|
||||||
|
Reference in New Issue
Block a user