Salta al contenuto principale

Flutter e AI: come ho rivoluzionato le mie app senza riscriverle da zero

·1003 parole·5 minuti
Andrea Luciano
Autore
Andrea Luciano
Founder of Luciosoft, specialized in native mobile development.

Tutto è iniziato con una lamentela
#

Vi racconto una cosa. Circa un anno fa stavo guardando le recensioni di Send to Kindle — la mia app per inviare documenti al Kindle — e mi sono imbattuto in una recensione che diceva più o meno: “L’app funziona ma il PDF convertito fa schifo, è illeggibile”. Una stella, ovviamente.

Ora, la conversione dei PDF è sempre stata una rogna. Chi lavora con i documenti lo sa: un PDF può contenere di tutto. Testo, immagini, tabelle, layout assurdi. E convertirlo in un formato leggibile su Kindle senza perdere la formattazione è un’impresa. Per anni ho usato Calibre lato server per fare il lavoro sporco, e funzionava… più o meno.

Ma quella recensione mi ha fatto pensare. Mi sà che è arrivato il momento di fare un salto di qualità.

L’illuminazione: l’AI non è solo per le chat
#

Parliamoci chiaro: quando la gente sente “intelligenza artificiale” pensa subito a ChatGPT, ai chatbot, a quelle cose che ti scrivono le email. Ma l’AI è molto di più, soprattutto per chi sviluppa app mobile.

Io l’ho capito lavorando su Send to Police, la mia app per l’invio delle schedine alloggiati. Lì avevo già integrato Google MLKit per leggere i documenti d’identità e Gemini Flash come fallback per i casi più disperati. E funzionava da dio. Allora mi sono detto: se l’AI riesce a leggere una carta d’identità cartacea del 1987, mezza stropicciata e con la foto sbiadita, perchè non può aiutarmi anche con i PDF?

Cosa ho fatto in pratica
#

Ho iniziato ad integrare l’AI in punti strategici delle mie app Flutter, senza riscrivere tutto da zero. Questo è il punto importante: non serve buttare via il codice esistente. L’AI si innesta come un layer aggiuntivo.

1. Riconoscimento intelligente dei documenti
#

In Send to Police ho costruito un sistema a cascata:

  • Prima prova: MLKit on-device, veloce e privato. Funziona benissimo per passaporti e CIE.
  • Seconda prova: algoritmo proprietario per le vecchie carte d’identità italiane (quelle che manco tua nonna riesce a leggere).
  • Terza prova: Gemini Flash via API, solo con consenso dell’utente.

Il bello di Flutter è che gestire questa cascata è naturale. Un try-catch ben strutturato, un po’ di async/await, e il gioco è fatto. L’utente non si accorge di nulla: scatta la foto e i dati appaiono.

2. Conversione PDF più intelligente
#

In Send to Kindle ho aggiunto un layer di analisi pre-conversione. Prima di mandare il PDF al container Calibre, l’app ora analizza il documento per capire se è un PDF scansionato (praticamente un’immagine), un PDF con testo reale, o un mix dei due. Questa analisi determina che tipo di conversione applicare.

Per i PDF scansionati ho integrato l’OCR con supporto AI, che riconosce il testo nelle immagini. Il risultato? Conversioni che prima erano illeggibili adesso escono pulite. Quella recensione da una stella magari adesso ne varrebbe almeno tre. Forse.

3. Firebase come collante
#

Una cosa che ho imparato in questi anni è che Firebase è il miglior amico dello sviluppatore indie. In entrambe le app uso:

  • Firebase Remote Config per gestire feature flag senza rilasciare aggiornamenti
  • Cloud Functions per il backend leggero
  • Firebase Storage per gestire i file
  • Pub/Sub per comunicare con i container di conversione

L’integrazione con Flutter è impeccabile grazie ai plugin FlutterFire. Se non li conoscete ancora, vi consiglio di provarli.

Se vi interessa vedere come uso questi strumenti nei miei progetti, passate da luciosoft.it.

I problemi che nessuno ti racconta
#

Però non è tutto rose e fiori, eh. Vi racconto qualche disavventura:

La memoria che esplode — Quando ho deployato il container di conversione PDF su Cloud Run, i file grossi facevano crashare tutto. Ho dovuto passare da 2GB a 4GB di RAM, e per i file davvero enormi servono 8GB. A un certo punto ho pensato: mi sà che sto facendo girare una centrale nucleare per convertire un PDF. Ma funziona.

Il bug del -1017 — Firebase Storage ha un errore misterioso, il codice -1017, che appare quando carichi file scaricati da Google Drive. Ho perso due giorni a debuggare prima di capire che il problema era nel modo in cui iOS gestisce i file temporanei. La soluzione? Usare putData invece di putFile. Due righe di codice, due giorni di lavoro. Classico.

Le carte d’identità del nonno — Il mio algoritmo di riconoscimento per le vecchie CI cartacee funziona bene nel 90% dei casi. Ma quel 10% restante… gente con documenti piegati in quattro, tenuti nel portafoglio per vent’anni, con la foto che ormai sembra un quadro impressionista. Per quelli c’è Gemini Flash, che a volte riesce a tirar fuori i dati anche da quelle situazioni disperate.

Consigli per chi vuole iniziare
#

Se sviluppate app Flutter e volete integrare l’AI, ecco cosa vi suggerisco dalla mia esperienza:

  1. Partite dal problema, non dalla tecnologia. Non mettete l’AI perchè fa figo. Mettetela dove risolve un problema reale degli utenti.

  2. Usate un approccio a cascata. L’AI non è infallibile. Avere un fallback (o due, o tre) è fondamentale. L’on-device prima, il cloud dopo.

  3. La privacy prima di tutto. Soprattutto con dati sensibili come documenti d’identità. I dati devono viaggiare il meno possibile.

  4. Firebase Remote Config è vostro amico. Potete attivare e disattivare feature AI senza rilasciare un aggiornamento. Credete a me, ne avrete bisogno.

  5. Testate con file reali. I test con file perfetti vanno sempre bene. Ma poi arriva l’utente con il PDF da 50MB generato da uno scanner del 2003 e tutto esplode.

E adesso?
#

Sto lavorando su nuove integrazioni. L’idea è usare modelli AI più leggeri direttamente on-device per certi task, senza dover passare dal cloud. Flutter con i suoi plugin e la community che cresce ogni giorno rende tutto questo possibile.

Se volete provare le mie app:

E se vi va, passate da luciosoft.it per vedere cos’altro combino. Spoiler: altre app, altri esperimenti, e probabilmente altri bug da sistemare.