mucke/lib/system/datasources/audio_player_task.dart

102 lines
2.5 KiB
Dart
Raw Normal View History

2020-04-11 20:23:02 +02:00
import 'dart:async';
import 'package:audio_service/audio_service.dart';
import 'package:just_audio/just_audio.dart';
const String SET_QUEUE = 'SET_QUEUE';
2020-04-11 20:23:02 +02:00
class AudioPlayerTask extends BackgroundAudioTask {
final _audioPlayer = AudioPlayer();
final _completer = Completer();
final _mediaItems = <String, MediaItem>{};
final _queue = <MediaItem>[];
2020-04-11 20:23:02 +02:00
Duration _position;
@override
2020-06-03 21:17:08 +02:00
Future<void> onStart(Map<String, dynamic> params) async {
2020-04-11 20:23:02 +02:00
_audioPlayer.getPositionStream().listen((duration) => _position = duration);
// AudioServiceBackground.setState(
// controls: [],
// basicState: BasicPlaybackState.none,
// );
await _completer.future;
}
@override
void onStop() {
_audioPlayer.stop();
_completer.complete();
}
@override
void onAddQueueItem(MediaItem mediaItem) {
_mediaItems[mediaItem.id] = mediaItem;
}
@override
Future<void> onPlayFromMediaId(String mediaId) async {
AudioServiceBackground.setState(
controls: [pauseControl, stopControl],
2020-06-03 21:17:08 +02:00
playing: true,
processingState: AudioProcessingState.ready,
2020-04-11 20:23:02 +02:00
);
await AudioServiceBackground.setMediaItem(_mediaItems[mediaId]);
await _audioPlayer.setFilePath(mediaId);
_audioPlayer.play();
}
@override
Future<void> onPlay() async {
AudioServiceBackground.setState(
controls: [pauseControl, stopControl],
2020-06-03 21:17:08 +02:00
processingState: AudioProcessingState.ready,
updateTime: Duration(milliseconds: DateTime.now().millisecondsSinceEpoch),
position: _position,
playing: true,
2020-04-11 20:23:02 +02:00
);
_audioPlayer.play();
}
@override
Future<void> onPause() async {
AudioServiceBackground.setState(
controls: [playControl, stopControl],
2020-06-03 21:17:08 +02:00
processingState: AudioProcessingState.ready,
updateTime: Duration(milliseconds: DateTime.now().millisecondsSinceEpoch),
position: _position,
playing: false,
2020-04-11 20:23:02 +02:00
);
await _audioPlayer.pause();
}
@override
Future<void> onCustomAction(String name, arguments) async {
switch (name) {
case SET_QUEUE:
break;
default:
}
}
2020-04-11 20:23:02 +02:00
}
MediaControl playControl = const MediaControl(
androidIcon: 'drawable/ic_action_play_arrow',
label: 'Play',
action: MediaAction.play,
);
MediaControl pauseControl = const MediaControl(
androidIcon: 'drawable/ic_action_pause',
label: 'Pause',
action: MediaAction.pause,
);
MediaControl stopControl = const MediaControl(
androidIcon: 'drawable/ic_action_stop',
label: 'Stop',
action: MediaAction.stop,
);