share method

  1. @override
Future<ShareResult> share(
  1. ShareParams params
)
override

Implementation

@override
Future<ShareResult> share(ShareParams params) async {
  if (params.files?.isNotEmpty == true) {
    throw UnimplementedError('Sharing files not supported on Linux');
  }

  final queryParameters = {
    if (params.subject != null) 'subject': params.subject,
    if (params.uri != null) 'body': params.uri.toString(),
    if (params.text != null) 'body': params.text,
  };

  // see https://github.com/dart-lang/sdk/issues/43838#issuecomment-823551891
  final uri = Uri(
    scheme: 'mailto',
    query: queryParameters.entries
        .map((e) =>
            '${Uri.encodeComponent(e.key)}=${Uri.encodeComponent(e.value ?? '')}')
        .join('&'),
  );

  final launchResult = await urlLauncher.launchUrl(
    uri.toString(),
    const LaunchOptions(),
  );
  if (!launchResult) {
    throw Exception('Failed to launch $uri');
  }

  return ShareResult.unavailable;
}