mod: close listener on dispose

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-12-25 14:40:47 +08:00
parent 169ae7d562
commit 6acba93c2c
13 changed files with 194 additions and 129 deletions

View File

@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:PiliPalaX/common/widgets/http_error.dart';
import 'package:PiliPalaX/http/loading_state.dart';
import 'package:flutter/material.dart';
@@ -43,6 +45,7 @@ class _BangumiIntroPanelState extends State<BangumiIntroPanel>
late BangumiIntroController bangumiIntroController;
late VideoDetailController videoDetailCtr;
late int cid;
StreamSubscription? _listener;
// 添加页面缓存
@override
@@ -55,13 +58,19 @@ class _BangumiIntroPanelState extends State<BangumiIntroPanel>
bangumiIntroController =
Get.put(BangumiIntroController(), tag: widget.heroTag);
videoDetailCtr = Get.find<VideoDetailController>(tag: widget.heroTag);
videoDetailCtr.cid.listen((int p0) {
_listener = videoDetailCtr.cid.listen((int p0) {
cid = p0;
if (!mounted) return;
setState(() {});
});
}
@override
void dispose() {
_listener?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
super.build(context);
@@ -140,6 +149,8 @@ class _BangumiInfoState extends State<BangumiInfo>
late final _coinKey = GlobalKey<ActionItemState>();
late final _favKey = GlobalKey<ActionItemState>();
StreamSubscription? _listener;
@override
void initState() {
super.initState();
@@ -149,13 +160,19 @@ class _BangumiInfoState extends State<BangumiInfo>
bangumiItem = bangumiIntroController.bangumiItem;
cid = widget.cid!;
debugPrint('cid: $cid');
videoDetailCtr.cid.listen((p0) {
_listener = videoDetailCtr.cid.listen((p0) {
cid = p0;
if (!mounted) return;
setState(() {});
});
}
@override
void dispose() {
_listener?.cancel();
super.dispose();
}
// 收藏
showFavBottomSheet() {
if (bangumiIntroController.userInfo == null) {

View File

@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:PiliPalaX/utils/utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
@@ -41,6 +43,7 @@ class _BangumiPanelState extends State<BangumiPanel> {
late int cid;
late final VideoDetailController videoDetailCtr;
final ItemScrollController itemScrollController = ItemScrollController();
StreamSubscription? _listener;
@override
void initState() {
@@ -54,7 +57,7 @@ class _BangumiPanelState extends State<BangumiPanel> {
}
videoDetailCtr = Get.find<VideoDetailController>(tag: widget.heroTag);
videoDetailCtr.cid.listen((int p0) {
_listener = videoDetailCtr.cid.listen((int p0) {
cid = p0;
currentIndex = widget.pages.indexWhere((EpisodeItem e) => e.cid == cid);
if (!mounted) return;
@@ -65,6 +68,7 @@ class _BangumiPanelState extends State<BangumiPanel> {
@override
void dispose() {
_listener?.cancel();
listViewScrollCtr.dispose();
listViewScrollCtr_2.dispose();
super.dispose();