REST non è l'unica opzione per far dialogare un'app Flutter con il backend. Quando servono contratti tipizzati, payload binari compatti e streaming bidirezionale a bassa latenza, gRPC è spesso la scelta migliore: un unico file .proto genera sia il client Dart sia il server, eliminando intere categorie di bug di serializzazione.
In questo tutorial avanzato costruiamo un layer gRPC production-ready per un'app Flutter:
- generazione del codice Dart da Protocol Buffers con
protoceprotoc_plugin; - creazione di un
ClientChannelconfigurato per ambienti diversi (TLS, keepalive, deadline); - un
ClientInterceptorper iniettare il token di autenticazione e tracciare le chiamate; - mappatura di
GrpcErrorin errori di dominio, con retry esponenziale solo sui codici idempotenti/transitori; - consumo di uno stream server-side con riconnessione automatica e integrazione in UI tramite
StreamBuilder; - test di integrazione contro un server gRPC in-process.
Prerequisiti: Flutter 3.x, conoscenza di Dart async/Stream, un backend gRPC raggiungibile (o il server fake che costruiremo nei test). Su Flutter Web il protocollo nativo non è supportato dal browser: serve gRPC-Web dietro un proxy (Envoy) e il pacchetto
grpc/grpc_web.dart; lo vedremo in chiusura.