8.7 KiB
8.7 KiB
Cheatsheet Debug – Plugin google_cast
Guida ultra-rapida per capire subito dove guardare quando qualcosa non funziona.
1. Flusso mentale in 10 secondi
UI Flutter
↓
cast_controller.dart
↓
google_cast_controller.dart / custom_cast_controller.dart
↓
MethodChannel('google_cast')
↓
FlutterCastFrameworkPlugin.kt
↓
CastMediaClient / CastQueueManager / CastCustomReceiver / SessionHandler
↓
TV / Chromecast / Custom Receiver
2. Se succede X → apri questi file
Connessione device non parte
lib/widgets/collection/app_bar/cast/cast_icon_button.dartplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/FlutterCastFrameworkPlugin.ktplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/cast/CastDialogLauncher.ktplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/cast/CastSessionHandler.kt
Il device si connette ma non parte nessun media
lib/widgets/collection/app_bar/cast/cast_bar_inline.dartlib/widgets/cast/google_cast_controller.dartplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/cast/CastQueueManager.kt
Google Cast fa Invalid Request appena scelgo il device
lib/widgets/cast/google_cast_controller.dartplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/cast/CastMediaClient.kt
Controlla subito:
- polling avviato troppo presto in
onCastReady - sessione connessa ma queue ancora vuota
MediaQueue error 2001
lib/widgets/cast/google_cast_controller.dartplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/cast/CastQueueManager.ktplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/cast/CastMediaClient.kt
Controlla subito:
- queue non caricata davvero
- startIndex invalido
- callback media attiva senza media reale
Slideshow fa prima e seconda foto poi si ferma
lib/widgets/cast/google_cast_controller.dartplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/cast/CastMediaClient.kt
Segnale tipico:
non arriva più onQueueIndexChanged
In slideshow un video viene saltato dopo 5 secondi
lib/widgets/cast/google_cast_controller.dartlib/widgets/cast/custom_cast_controller.dart
Regola corretta:
- foto → timer
- video → nessun timer, deve finire da solo
In manuale/fullscreen le foto avanzano da sole
lib/widgets/cast/google_cast_controller.dartlib/widgets/cast/custom_cast_controller.dart
Regola corretta:
- foto manuali/fullscreen → ferme finché non premi next/prev
- video → a fine video vanno al successivo
Invalid startIndex: X
lib/widgets/collection/app_bar/cast/cast_bar_inline.dartlib/widgets/cast/google_cast_controller.dartlib/widgets/cast/custom_cast_controller.dartplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/cast/CastQueueManager.kt
Controlla subito:
startIndexpiù grande dientries.length - 1- indice vecchio riusato su nuova selezione
Seek cambia sulla TV ma non sul telefono
lib/widgets/cast/google_cast_controller.dartlib/widgets/viewer/fullscreen_cast_viewer.dart
Controlla subito:
seekCast()aggiornapositionNotifierVideoWidgetlocale ascoltapositionNotifier/isPlayingNotifier
Il volume compare ma la barra non si aggiorna
lib/widgets/cast/google_cast_controller.dartlib/widgets/collection/app_bar/cast/cast_controls_sheet.dartlib/widgets/viewer/fullscreen_cast_viewer.dartplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/cast/CastMediaClient.kt
Controlla subito:
- dopo
setVolumeesetMutefairefreshVolumeStatus() - nello slider separa
onChangedeonChangeEnd
Scelgo Google ma sembra partire Custom
lib/widgets/collection/app_bar/cast/cast_icon_button.dartlib/widgets/cast/cast_controller.dartlib/widgets/cast/custom_cast_controller.dartlib/widgets/cast/google_cast_controller.dart
Controlla subito:
- backend attivo (
_backend) allineato col backend scelto - icona Cast solo connect-only
- media avviati solo dalla cast bar
In selection mode la app bar “tocca” anche le foto sotto
lib/widgets/collection/app_bar/collection_app_bar.dartlib/widgets/common/identity/aves_app_bar.dartlib/widgets/collection/collection_page.dart
Controlla subito:
- la barra assorbe i tap?
- è presente
AInkResponseo equivalente? pinned+ altezza header coerenti col body?
Custom receiver: progress bar duplicate / overlay strani sulla TV
lib/widgets/cast/custom_cast_controller.dartplugins/google_cast/android/src/main/kotlin/com/aves/google_cast/cast/CastCustomReceiver.ktreceiver.html- eventuale JS del receiver
Controlla subito:
- il DOM viene pulito prima di ridisegnare?
- stai creando un nuovo overlay a ogni update?
Volume Custom non cambia davvero il video
lib/widgets/cast/custom_cast_controller.dartreceiver.html- JS del receiver
Controlla subito:
- il receiver gestisce davvero
SET_VOLUME? - aggiorna
video.volume? - risponde con
VOLUME_STATUS?
3. Comando → dove passa
showCastDialog
CastIconButton
→ cast_controller.dart
→ google/custom controller
→ MethodChannel('google_cast')
→ FlutterCastFrameworkPlugin.kt
→ CastDialogLauncher.kt
loadQueue
CastBarInline / slideshow / fullscreen
→ cast_controller.dart
→ google_cast_controller.dart
→ MethodChannel('google_cast')
→ FlutterCastFrameworkPlugin.kt
→ CastQueueManager.kt
play / pause / seekTo
UI controlli
→ cast_controller.dart
→ google/custom controller
→ MethodChannel('google_cast')
→ FlutterCastFrameworkPlugin.kt
→ CastMediaClient.kt
setVolume / setMute
UI volume slider / mute
→ cast_controller.dart
→ google/custom controller
→ MethodChannel('google_cast')
→ FlutterCastFrameworkPlugin.kt
→ CastMediaClient.kt (Google)
oppure
→ receiver custom via JSON (Custom)
4. Evento → da dove torna
onCastReady
CastSessionHandler.kt
→ FlutterCastFrameworkPlugin.kt
→ MethodChannel callback
→ google_cast_controller.dart / custom controller
onQueueIndexChanged
RemoteMediaClient.Callback in CastMediaClient.kt
→ Flutter invokeMethod
→ google_cast_controller.dart
onVideoFinished
RemoteMediaClient.Callback in CastMediaClient.kt
→ Flutter invokeMethod
→ google_cast_controller.dart
MEDIA_STATUS / VOLUME_STATUS (Custom)
receiver web
→ messaggio custom
→ plugin Android
→ custom_cast_controller.dart
5. Google vs Custom: differenza operativa
Google Cast standard
Usa:
- queue nativa Cast
- volume di sessione Cast
- callback
RemoteMediaClient
Se qualcosa non va, guarda prima:
google_cast_controller.dartCastMediaClient.ktCastQueueManager.kt
Custom Receiver
Usa:
- messaggi JSON custom
- receiver web / CAF
- player HTML5 lato TV
Se qualcosa non va, guarda prima:
custom_cast_controller.dartCastCustomReceiver.ktreceiver.html- JS del receiver
6. Regole d’oro
Regola 1
Se la TV fa la cosa giusta ma il telefono no: 👉 problema quasi sempre lato Flutter/controller/viewer.
Guarda:
google_cast_controller.dartcustom_cast_controller.dartfullscreen_cast_viewer.dart
Regola 2
Se Flutter crede di essere corretto ma la TV fa cose strane: 👉 problema spesso lato plugin Android o receiver.
Guarda:
CastMediaClient.ktCastQueueManager.ktCastCustomReceiver.kt- receiver JS/HTML
Regola 3
Se il problema nasce subito dopo la connessione device: 👉 controlla sempre la distinzione tra:
- sessione Cast pronta
- media davvero caricato
Guarda:
CastSessionHandler.ktgoogle_cast_controller.dartCastMediaClient.kt
Regola 4
Se il bug riguarda selection mode / app bar / tocchi: 👉 il plugin Cast probabilmente non c’entra.
Guarda:
collection_app_bar.dartaves_app_bar.dartcollection_page.dart
7. Checklist rapidissima prima di impazzire
- Hai salvato tutti i file?
- Hai eliminato eventuali backtick markdown rimasti nel file?
- Hai fatto
flutter cleanse i simboli sembrano “mancare” senza senso? - Il backend attivo è davvero quello giusto?
- Il problema è Flutter-side, Android-side o receiver-side?
8. Formula finale da ricordare
Flutter decide l’UX → il plugin Android parla con Cast → il receiver riproduce davvero
Quindi ogni bug va classificato subito così:
A. Flutter / UI
- notifier
- app bar
- selection
- cast bar
- fullscreen viewer
B. Plugin Android
- sessione
- queue
- callback media
- volume nativo
C. Receiver
- volume custom
- overlay/progress
- player HTML5
- messaggi custom