Quando un plugin Flutter deve funzionare su Android, iOS, Web e desktop, mettere tutto dentro un singolo package diventa rapidamente ingestibile: ogni nuova piattaforma obbliga a toccare il codice condiviso e chi mantiene una singola piattaforma deve avere i permessi sull'intero repository.
La risposta ufficiale del team Flutter è la federated plugin architecture: il plugin viene spezzato in più package con responsabilità separate.
- app-facing package: l'API pubblica che importano gli sviluppatori (
device_battery). - platform interface package: il contratto astratto che tutte le implementazioni devono rispettare (
device_battery_platform_interface). - platform implementation packages: una per piattaforma (
device_battery_android,device_battery_ios,device_battery_web, ...).
In questo tutorial costruiremo passo passo un plugin federato realistico che legge il livello della batteria e notifica i cambi di stato, con codice Kotlin, Swift e JS interop, test con mock della platform interface e pubblicazione su pub.dev.
Prerequisiti: buona conoscenza di Dart, dei MethodChannel/EventChannel, di Gradle e di CocoaPods. Flutter 3.22 o superiore (Dart 3.4+,
dart:js_interop).