feat(flutter/player): MinstrelAudioHandler + just_audio + audio_service
audio_service runs the handler in a background isolate; UI watches playbackState/mediaItem/queue streams through Riverpod. AndroidManifest gets the foreground-service media-playback permission; Info.plist gets UIBackgroundModes=audio. Bearer token attached to stream URLs via just_audio's per-source headers.
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import 'package:minstrel/player/audio_handler.dart';
|
||||
import 'package:minstrel/player/player_provider.dart';
|
||||
|
||||
void main() {
|
||||
test('audioHandlerProvider must be overridden — bare read throws', () {
|
||||
final container = ProviderContainer();
|
||||
addTearDown(container.dispose);
|
||||
expect(() => container.read(audioHandlerProvider), throwsA(isA<UnimplementedError>()));
|
||||
});
|
||||
|
||||
test('overridden audioHandlerProvider exposes playbackState stream', () {
|
||||
final handler = MinstrelAudioHandler();
|
||||
final container = ProviderContainer(overrides: [
|
||||
audioHandlerProvider.overrideWithValue(handler),
|
||||
]);
|
||||
addTearDown(container.dispose);
|
||||
expect(container.read(audioHandlerProvider), same(handler));
|
||||
final sub = container.listen(playbackStateProvider, (_, __) {});
|
||||
sub.close();
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user