✨ Mini player
This commit is contained in:
@ -1,8 +1,11 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:get/get.dart';
|
||||
import 'package:rhythm_box/providers/audio_player.dart';
|
||||
import 'package:rhythm_box/services/audio_player/audio_player.dart';
|
||||
import 'package:rhythm_box/services/sourced_track/models/source_info.dart';
|
||||
import 'package:rhythm_box/services/sourced_track/sourced_track.dart';
|
||||
import 'package:rhythm_box/widgets/tracks/querying_track_info.dart';
|
||||
|
||||
class ActiveSourcedTrackProvider extends GetxController {
|
||||
Rx<SourcedTrack?> state = Rx(null);
|
||||
@ -17,23 +20,32 @@ class ActiveSourcedTrackProvider extends GetxController {
|
||||
}
|
||||
|
||||
Future<void> swapSibling(SourceInfo sibling) async {
|
||||
if (state.value == null) return;
|
||||
await populateSibling();
|
||||
final newTrack = await state.value!.swapWithSibling(sibling);
|
||||
if (newTrack == null) return;
|
||||
final query = Get.find<QueryingTrackInfoProvider>();
|
||||
query.isQueryingTrackInfo.value = true;
|
||||
|
||||
state.value = newTrack;
|
||||
await audioPlayer.pause();
|
||||
try {
|
||||
if (state.value == null) return;
|
||||
await populateSibling();
|
||||
final newTrack = await state.value!.swapWithSibling(sibling);
|
||||
if (newTrack == null) return;
|
||||
|
||||
final playback = Get.find<AudioPlayerProvider>();
|
||||
final oldActiveIndex = audioPlayer.currentIndex;
|
||||
state.value = newTrack;
|
||||
await audioPlayer.pause();
|
||||
|
||||
await playback.addTracksAtFirst([newTrack]);
|
||||
await Future.delayed(const Duration(milliseconds: 300));
|
||||
await playback.jumpToTrack(newTrack);
|
||||
final playback = Get.find<AudioPlayerProvider>();
|
||||
final oldActiveIndex = audioPlayer.currentIndex;
|
||||
|
||||
await audioPlayer.removeTrack(oldActiveIndex);
|
||||
await playback.addTracksAtFirst([newTrack]);
|
||||
await Future.delayed(const Duration(milliseconds: 30));
|
||||
|
||||
await audioPlayer.resume();
|
||||
await audioPlayer.removeTrack(oldActiveIndex);
|
||||
await playback.jumpToTrack(newTrack);
|
||||
|
||||
await audioPlayer.resume();
|
||||
} catch (e, stack) {
|
||||
log('[Playback] Failed to swap with siblings. Error: $e; Trace:\n$stack');
|
||||
} finally {
|
||||
query.isQueryingTrackInfo.value = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user