mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-07-02 11:05:38 +02:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user