share method
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;
}