[{"data":1,"prerenderedAt":27},["ShallowReactive",2],{"articolo-condividere-contenuti-in-flutter-con-share-plus-guida-pratica":3,"comments-article-condividere-contenuti-in-flutter-con-share-plus-guida-pratica":26},{"id":4,"title":5,"slug":6,"excerpt":7,"body":8,"cover_image":9,"cover_remote_url":10,"cover_credit":11,"video_url":15,"status":16,"published_at":17,"meta_title":18,"meta_description":19,"category":20,"author":24},70,"Condividere contenuti in Flutter con share_plus: guida pratica","condividere-contenuti-in-flutter-con-share-plus-guida-pratica","Impara a integrare la condivisione nativa di testo, link e file nella tua app Flutter usando il pacchetto share_plus, con esempi pratici per Android, iOS e desktop.","## Introduzione\n\nLa condivisione di contenuti è una funzionalità che gli utenti danno ormai per scontata: dal link di un articolo a una foto, passando per file PDF generati dall'app. In Flutter, il pacchetto ufficiale **share_plus** (parte della suite Plus mantenuta dalla community Flutter) permette di invocare il foglio di condivisione nativo del sistema operativo con poche righe di codice.\n\nIn questa guida vedremo come installare il pacchetto, condividere testo e link, allegare file e immagini, gestire il risultato della condivisione e affrontare le differenze tra le piattaforme.\n\n## Installazione\n\nAggiungi la dipendenza al tuo `pubspec.yaml`:\n\n```yaml\ndependencies:\n  share_plus: ^10.1.2\n```\n\nOppure da terminale:\n\n```bash\nflutter pub add share_plus\n```\n\nNon serve alcuna configurazione nativa aggiuntiva per i casi d'uso base: `share_plus` sfrutta le API di condivisione integrate di ogni piattaforma.\n\n## Condividere testo e link\n\nIl caso più semplice è la condivisione di una stringa di testo o di un URL. Dalla versione 10 si utilizza `SharePlus.instance.share` con un oggetto `ShareParams`:\n\n```dart\nimport 'package:share_plus\u002Fshare_plus.dart';\n\nFuture\u003Cvoid> condividiTesto() async {\n  await SharePlus.instance.share(\n    ShareParams(\n      text: 'Dai un\\'occhiata a questo articolo: https:\u002F\u002Fflutter.dev',\n      subject: 'Articolo interessante',\n    ),\n  );\n}\n```\n\nIl parametro `subject` viene usato, ad esempio, come oggetto quando l'utente sceglie di condividere via email. Su altre app potrebbe essere ignorato.\n\n## Gestire il risultato della condivisione\n\nSpesso è utile sapere se l'utente ha effettivamente completato l'azione. Il metodo `share` restituisce un oggetto `ShareResult` con lo stato dell'operazione:\n\n```dart\nFuture\u003Cvoid> condividiConFeedback() async {\n  final result = await SharePlus.instance.share(\n    ShareParams(text: 'Contenuto da condividere'),\n  );\n\n  switch (result.status) {\n    case ShareResultStatus.success:\n      debugPrint('Condivisione completata');\n    case ShareResultStatus.dismissed:\n      debugPrint('Condivisione annullata');\n    case ShareResultStatus.unavailable:\n      debugPrint('Stato non disponibile su questa piattaforma');\n  }\n}\n```\n\n> **Nota:** su iOS lo stato viene generalmente riportato correttamente, mentre su Android alcune app di destinazione potrebbero non restituire un feedback affidabile, restituendo `unavailable`.\n\n## Condividere file e immagini\n\nPer allegare file (immagini, PDF, documenti) si usa la proprietà `files` con oggetti `XFile`:\n\n```dart\nimport 'dart:typed_data';\nimport 'package:share_plus\u002Fshare_plus.dart';\n\nFuture\u003Cvoid> condividiImmagine(Uint8List bytes) async {\n  final file = XFile.fromData(\n    bytes,\n    mimeType: 'image\u002Fpng',\n    name: 'grafico.png',\n  );\n\n  await SharePlus.instance.share(\n    ShareParams(\n      files: [file],\n      text: 'Ecco il grafico generato dall\\'app',\n    ),\n  );\n}\n```\n\nSe hai già un file su disco, puoi passarne direttamente il percorso:\n\n```dart\nFuture\u003Cvoid> condividiPdf(String percorso) async {\n  await SharePlus.instance.share(\n    ShareParams(\n      files: [XFile(percorso)],\n      subject: 'Report mensile',\n    ),\n  );\n}\n```\n\nPuoi condividere più file contemporaneamente semplicemente aggiungendo altri `XFile` alla lista.\n\n## Posizionamento del popover su iPad\n\nSu iPadOS il foglio di condivisione viene presentato come un **popover** e richiede un'origine, altrimenti l'app potrebbe crashare. Puoi indicare l'area del widget che ha innescato l'azione tramite `sharePositionOrigin`:\n\n```dart\nFuture\u003Cvoid> condividiDaPulsante(BuildContext context) async {\n  final box = context.findRenderObject() as RenderBox?;\n\n  await SharePlus.instance.share(\n    ShareParams(\n      text: 'Contenuto condiviso',\n      sharePositionOrigin: box != null\n          ? box.localToGlobal(Offset.zero) & box.size\n          : null,\n    ),\n  );\n}\n```\n\nÈ buona pratica passare sempre questo parametro quando l'azione parte da un widget preciso, per garantire un comportamento coerente su iPad.\n\n## Esempio completo con un pulsante\n\nEcco un widget minimale che integra la condivisione:\n\n```dart\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'package:share_plus\u002Fshare_plus.dart';\n\nclass PulsanteCondivisione extends StatelessWidget {\n  const PulsanteCondivisione({super.key});\n\n  Future\u003Cvoid> _condividi(BuildContext context) async {\n    final box = context.findRenderObject() as RenderBox?;\n    await SharePlus.instance.share(\n      ShareParams(\n        text: 'Sto usando questa fantastica app Flutter!',\n        subject: 'App consigliata',\n        sharePositionOrigin:\n            box != null ? box.localToGlobal(Offset.zero) & box.size : null,\n      ),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return ElevatedButton.icon(\n      onPressed: () => _condividi(context),\n      icon: const Icon(Icons.share),\n      label: const Text('Condividi'),\n    );\n  }\n}\n```\n\n## Differenze tra piattaforme\n\n- **Android e iOS**: supporto completo per testo, link e file.\n- **Web**: usa la Web Share API quando disponibile (richiede un contesto sicuro HTTPS e un browser compatibile); in caso contrario alcune funzioni potrebbero non funzionare.\n- **Desktop (Windows, macOS, Linux)**: il supporto è disponibile ma può variare; su alcune configurazioni la condivisione di file richiede l'app di sistema appropriata.\n\nÈ sempre consigliabile testare su ogni piattaforma target e prevedere un fallback (ad esempio la copia negli appunti) dove la funzionalità non fosse disponibile.\n\n## Best practice\n\n- Fornisci sempre un `text` significativo: molte app di destinazione mostrano solo il testo, ignorando il `subject`.\n- Passa `sharePositionOrigin` per un'esperienza corretta su iPad.\n- Non affidarti in modo rigido allo `ShareResultStatus` su Android per logiche critiche.\n- Per file temporanei, generali in una directory di cache e ripuliscili dopo la condivisione.\n\n## Conclusioni\n\nCon `share_plus` integrare la condivisione nativa in Flutter è questione di pochi minuti. Grazie all'API basata su `ShareParams` puoi condividere testo, link e file in modo uniforme su più piattaforme, gestendo anche i dettagli specifici come il posizionamento su iPad. È uno di quei pacchetti che aggiungono valore percepito all'app con uno sforzo minimo.","https:\u002F\u002Fflutter.it\u002Fstorage\u002Farticles\u002Fda967e83-95fa-4df1-92c7-6e4b5044ac39.jpg","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1657039039209-09817c7060f2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w5NzA2NTJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3ODczMTU4NjV8&ixlib=rb-4.1.0&q=80&w=1080",{"name":12,"author_url":13,"photo_url":14},"Claudio Schwarz","https:\u002F\u002Funsplash.com\u002F@purzlbaum","https:\u002F\u002Funsplash.com\u002Fphotos\u002Fa-plane-flying-in-the-sky-1I_svUdSr_M",null,"published","2026-08-18T04:00:43+00:00","Condividere contenuti in Flutter con share_plus","Guida pratica a share_plus in Flutter: condividi testo, link, immagini e file con il foglio di condivisione nativo su Android, iOS, web e desktop.",{"id":21,"name":22,"slug":23},1,"Guide","guide",{"id":21,"name":25},"Flutter Bot",[],1789205512364]