fix(player): 修正飘心Overlay生命周期
This commit is contained in:
1 parent
a7d01e0306
commit
c0f65042e6
4 files changed
+184
-28
No files matched your search
@@ -0,0 +1,52 @@
|
||||
// Author: fruit.com.cn
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
/// Tracks heart overlays for the lifetime of one player page.
|
||||
class PlayerHeartOverlayController {
|
||||
final Map<int, OverlayEntry> _entries = {};
|
||||
|
||||
void track(int id, OverlayEntry entry) {
|
||||
_entries[id] = entry;
|
||||
}
|
||||
|
||||
void untrack(int id) {
|
||||
_entries.remove(id);
|
||||
}
|
||||
|
||||
void dispose() {
|
||||
for (final entry in _entries.entries.toList()) {
|
||||
if (entry.value.mounted) entry.value.remove();
|
||||
entry.value.dispose();
|
||||
if (kDebugMode) {
|
||||
debugPrint(
|
||||
'[player] phase=heart-burst-entry-removed '
|
||||
'id=${entry.key} reason=page-dispose',
|
||||
);
|
||||
}
|
||||
}
|
||||
_entries.clear();
|
||||
}
|
||||
}
|
||||
|
||||
class PlayerHeartOverlayScope extends InheritedWidget {
|
||||
const PlayerHeartOverlayScope({
|
||||
super.key,
|
||||
required this.controller,
|
||||
required super.child,
|
||||
});
|
||||
|
||||
final PlayerHeartOverlayController controller;
|
||||
|
||||
static PlayerHeartOverlayController? maybeOf(BuildContext context) {
|
||||
return context
|
||||
.dependOnInheritedWidgetOfExactType<PlayerHeartOverlayScope>()
|
||||
?.controller;
|
||||
}
|
||||
|
||||
@override
|
||||
bool updateShouldNotify(PlayerHeartOverlayScope oldWidget) {
|
||||
return controller != oldWidget.controller;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user