fix: preview player lifecycle and minor safety cleanups

- search_screen caches PreviewPlayerController in initState to avoid
  ref access during dispose
- extension_provider: convert enabledExtensions/searchProviders getters
  to methods
- artist_screen: drop redundant null assertions on motion banner inputs
This commit is contained in:
zarzet
2026-06-29 06:46:47 +07:00
parent 1550eedc12
commit e0e28aee38
3 changed files with 8 additions and 8 deletions
+3 -5
View File
@@ -1670,7 +1670,7 @@ class ExtensionNotifier extends Notifier<ExtensionState> {
}
}
List<Extension> get enabledExtensions {
List<Extension> enabledExtensions() {
return state.extensions.where((ext) => ext.enabled).toList();
}
@@ -1747,7 +1747,7 @@ class ExtensionNotifier extends Notifier<ExtensionState> {
return result;
}
List<Extension> get searchProviders {
List<Extension> searchProviders() {
return state.extensions
.where((ext) => ext.enabled && ext.hasCustomSearch)
.toList();
@@ -1761,9 +1761,7 @@ class ExtensionNotifier extends Notifier<ExtensionState> {
void scan(Object? settingsList) {
if (settingsList is! List) return;
for (final entry in settingsList) {
if (entry is Map &&
entry['secret'] == true &&
entry['key'] is String) {
if (entry is Map && entry['secret'] == true && entry['key'] is String) {
keys.add(entry['key'] as String);
}
}
+2 -2
View File
@@ -1206,10 +1206,10 @@ class _ArtistScreenState extends ConsumerState<ArtistScreen> {
children: [
if (hasMotionBanner)
MotionHeaderBanner(
videoUrl: headerVideoUrl!,
videoUrl: headerVideoUrl,
fallback: hasValidImage
? CachedCoverImage(
imageUrl: imageUrl!,
imageUrl: imageUrl,
fit: BoxFit.cover,
alignment: Alignment.topCenter,
memCacheWidth: 800,
+3 -1
View File
@@ -25,11 +25,13 @@ class SearchScreen extends ConsumerStatefulWidget {
class _SearchScreenState extends ConsumerState<SearchScreen> {
late TextEditingController _searchController;
late PreviewPlayerController _previewPlayerController;
@override
void initState() {
super.initState();
_searchController = TextEditingController(text: widget.query);
_previewPlayerController = ref.read(previewPlayerProvider.notifier);
if (widget.query.isNotEmpty) {
WidgetsBinding.instance.addPostFrameCallback((_) {
ref.read(trackProvider.notifier).search(widget.query);
@@ -39,7 +41,7 @@ class _SearchScreenState extends ConsumerState<SearchScreen> {
@override
void dispose() {
ref.read(previewPlayerProvider.notifier).stop();
_previewPlayerController.stop();
_searchController.dispose();
super.dispose();
}