Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ internal class Share(
val paths = (arguments["paths"] as List<*>?)?.filterIsInstance<String>()
val mimeTypes = (arguments["mimeTypes"] as List<*>?)?.filterIsInstance<String>()
val fileUris = paths?.let { getUrisForPaths(paths) }
val useNewTask = arguments["useNewTask"] as Boolean;

// Create Share Intent
val shareIntent = Intent()
Expand Down Expand Up @@ -148,6 +149,13 @@ internal class Share(
}
}

if (useNewTask) {
chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
chooserIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
} else if (activity == null) {
chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}

// Launch share intent
startActivity(chooserIntent, withResult)
}
Expand All @@ -160,7 +168,6 @@ internal class Share(
activity!!.startActivity(intent)
}
} else {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
if (withResult) {
// We need to cancel the callback to avoid deadlocking on the Dart side
manager.unavailable()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class MethodChannelShare extends SharePlatform {
if (params.subject != null) 'subject': params.subject,
if (params.title != null) 'title': params.title,
if (params.uri != null) 'uri': params.uri.toString(),
'useNewTask': params.useNewTask,
};

if (params.sharePositionOrigin != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,12 @@ class ShareParams {
/// Parameter ignored on other platforms.
final List<CupertinoActivityType>? excludedCupertinoActivities;

/// Whether to use a new task when sharing on Android.
///
/// * Supported platforms: Android
/// Parameter ignored on other platforms.
final bool useNewTask;

ShareParams({
this.text,
this.subject,
Expand All @@ -154,6 +160,7 @@ class ShareParams {
this.downloadFallbackEnabled = true,
this.mailToFallbackEnabled = true,
this.excludedCupertinoActivities,
this.useNewTask = false,
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ void main() {
);
verify(mockChannel.invokeMethod<String>('share', <String, dynamic>{
'uri': 'https://pub.dev/packages/share_plus',
'useNewTask': false,
'originX': 1.0,
'originY': 2.0,
'originWidth': 3.0,
Expand All @@ -89,6 +90,7 @@ void main() {
verify(mockChannel.invokeMethod<String>('share', <String, dynamic>{
'text': 'some text to share',
'subject': 'some subject to share',
'useNewTask': false,
'originX': 1.0,
'originY': 2.0,
'originWidth': 3.0,
Expand All @@ -112,6 +114,7 @@ void main() {
'mimeTypes': ['image/png'],
'subject': 'some subject to share',
'text': 'some text to share',
'useNewTask': false,
'originX': 1.0,
'originY': 2.0,
'originWidth': 3.0,
Expand All @@ -127,6 +130,7 @@ void main() {
verify(mockChannel.invokeMethod<String>('share', <String, dynamic>{
'paths': [fd.path],
'mimeTypes': ['image/png'],
'useNewTask': false,
}));
});
});
Expand All @@ -141,6 +145,7 @@ void main() {
verify(mockChannel.invokeMethod<String>('share', <String, dynamic>{
'paths': [fd.path],
'mimeTypes': ['*/*'],
'useNewTask': false,
}));
});
});
Expand Down Expand Up @@ -190,6 +195,7 @@ void main() {
verify(mockChannel.invokeMethod<String>('share', <String, dynamic>{
'text': 'some text to share',
'subject': 'some subject to share',
'useNewTask': false,
'originX': 1.0,
'originY': 2.0,
'originWidth': 3.0,
Expand All @@ -206,6 +212,7 @@ void main() {
verify(mockChannel.invokeMethod<String>('share', <String, dynamic>{
'paths': [fd.path],
'mimeTypes': ['image/png'],
'useNewTask': false,
}));
expect(result, success);
});
Expand Down
Loading