shareUri method
Attempts to share a uri
via the Web Share API, and falls back to
mailto: when not available
cf https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share
No UTM tracking parameters are added to the uri
when sharing via the
Web Share API, as it provides no info on the selected sharing target.
Implementation
@override
Future<ShareResult> shareUri(Uri uri, {String? subject}) async {
final navigator = html.window.navigator;
try {
// Attempt to use the Web Share API
await navigator.share({'url': uri.toString()});
return ShareResult(true, uri);
} on NoSuchMethodError catch (_) {
// Web Share API is unavailable, fall back to mailto:
// Add the utm_source=mail parameter to the uri
final mailUri = uri.replace(
queryParameters: {
...uri.queryParameters,
'utm_source': 'mail',
'utm_medium': 'email',
},
);
final mailto = Uri(
scheme: 'mailto',
queryParameters: {
if (subject != null) 'subject': subject,
'body': mailUri.toString(),
},
);
try {
// Open e-mail client to share the link
html.window.open(mailto.toString(), '_blank');
return ShareResult(true, mailUri, target: "mail");
} catch (e) {
return ShareResult(false, mailUri);
}
}
}