shareTextAsFile static method

Future<void> shareTextAsFile({
  1. required String fileName,
  2. required String contents,
  3. required String mimeType,
})

Writes contents to a temporary file named fileName and opens the platform share sheet to share it as a file.

Note: on web this returns immediately because file sharing is not consistently supported; callers should provide a web fallback (e.g. copy to clipboard if supported).

Implementation

static Future<void> shareTextAsFile({
  required String fileName,
  required String contents,
  required String mimeType,
}) async {
  try {
    // On web, sharing a file isn't reliably supported; clipboard is used by caller.
    if (kIsWeb) {
      Clipboard.setData(ClipboardData(text: contents));
      showFeedbackSnackbar(Strings.copiedClipboard.tr, Symbols.content_copy, isInfo: true);
      return;
    }
    final Directory dir = await getTemporaryDirectory();
    final File file = File('${dir.path}/$fileName');
    await file.writeAsString(contents);
    await SharePlus.instance.share(
      ShareParams(
        files: [XFile(file.path, mimeType: mimeType, name: fileName)],
      ),
    );
  } catch (_) {
    Clipboard.setData(ClipboardData(text: contents));
    showFeedbackSnackbar(Strings.copiedClipboard.tr, Symbols.content_copy, isInfo: true);
    return;
  }
}