First pass adding android auto and apple carplay support. Android auto tuned on emulator.

This commit is contained in:
2026-05-15 21:30:23 -07:00
parent 52f5ec577b
commit 83dd1a28b8
14 changed files with 382 additions and 33 deletions
+29
View File
@@ -127,6 +127,10 @@ class _MainPageState extends State<MainPage> {
return 'Stopped';
}
static const _playbackChannel = MethodChannel(
'kryz_go_flutter/playback/methods',
);
@override
void initState() {
super.initState();
@@ -134,6 +138,21 @@ class _MainPageState extends State<MainPage> {
_casting.addListener(_handleCastingStateChanged);
_liveInfo.addListener(_handleLiveInfoChanged);
_liveInfo.start();
_playbackChannel.setMethodCallHandler(_handlePlaybackMethodCall);
// Tell native that Flutter is ready to receive method calls.
// On Android this unblocks any pending auto_play from Android Auto.
if (defaultTargetPlatform == TargetPlatform.android) {
_playbackChannel.invokeMethod<void>('flutterReady');
}
}
Future<void> _handlePlaybackMethodCall(MethodCall call) async {
switch (call.method) {
case 'play':
await _play();
case 'stop':
await _stop();
}
}
void _handleAudioStateChanged() {
@@ -144,6 +163,16 @@ class _MainPageState extends State<MainPage> {
setState(() {
// Rebuild when playback state changes from the player.
});
_syncAutoPlaybackState();
}
void _syncAutoPlaybackState() {
if (defaultTargetPlatform != TargetPlatform.android) return;
_playbackChannel.invokeMethod<void>('updatePlaybackState', {
'isPlaying': _audio.isPlaying,
'isBuffering': _audio.isBuffering,
});
}
void _handleLiveInfoChanged() {