Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(share_plus): export XFile #1286

Merged
merged 1 commit into from Oct 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -6,7 +6,6 @@

import 'dart:io';

import 'package:file_selector/file_selector.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:share_plus/share_plus.dart';
Expand Down
6 changes: 4 additions & 2 deletions packages/share_plus/share_plus/example/lib/main.dart
Expand Up @@ -6,10 +6,12 @@

import 'dart:io';

import 'package:file_selector/file_selector.dart';
import 'package:file_selector/file_selector.dart'
hide XFile; // hides to test if share_plus exports XFile
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:image_picker/image_picker.dart';
import 'package:image_picker/image_picker.dart'
hide XFile; // hides to test if share_plus exports XFile
import 'package:share_plus/share_plus.dart';

import 'image_previews.dart';
Expand Down
3 changes: 1 addition & 2 deletions packages/share_plus/share_plus/lib/share_plus.dart
Expand Up @@ -5,11 +5,10 @@
import 'dart:async';
import 'dart:ui';

import 'package:cross_file/cross_file.dart';
import 'package:share_plus_platform_interface/share_plus_platform_interface.dart';

export 'package:share_plus_platform_interface/share_plus_platform_interface.dart'
show ShareResult, ShareResultStatus;
show ShareResult, ShareResultStatus, XFile;

export 'src/share_plus_linux.dart';
export 'src/share_plus_windows.dart'
Expand Down
Expand Up @@ -3,7 +3,6 @@ library share_plus_linux;

import 'dart:ui';

import 'package:cross_file/cross_file.dart';
import 'package:share_plus_platform_interface/share_plus_platform_interface.dart';
import 'package:url_launcher/url_launcher.dart';

Expand Down
1 change: 0 additions & 1 deletion packages/share_plus/share_plus/lib/src/share_plus_web.dart
@@ -1,7 +1,6 @@
import 'dart:html' as html;
import 'dart:typed_data';

import 'package:cross_file/cross_file.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
import 'package:mime/mime.dart' show lookupMimeType;
Expand Down
Expand Up @@ -3,7 +3,6 @@ library share_plus_windows;

import 'dart:ui';

import 'package:cross_file/cross_file.dart';
import 'package:share_plus/src/windows_version_helper.dart';
import 'package:share_plus_platform_interface/share_plus_platform_interface.dart';
import 'package:url_launcher/url_launcher.dart';
Expand Down
Expand Up @@ -9,7 +9,6 @@ import 'dart:io';
// ignore: unnecessary_import
import 'dart:ui';

import 'package:cross_file/cross_file.dart';
import 'package:flutter/services.dart';
import 'package:meta/meta.dart' show visibleForTesting;
import 'package:mime/mime.dart' show extensionFromMime, lookupMimeType;
Expand Down
@@ -0,0 +1,153 @@
// Copyright 2019 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';
import 'dart:ui';

import 'package:cross_file/cross_file.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';

import '../method_channel/method_channel_share.dart';

/// The interface that implementations of `share_plus` must implement.
class SharePlatform extends PlatformInterface {
/// Constructs a SharePlatform.
SharePlatform() : super(token: _token);

static final Object _token = Object();

static SharePlatform _instance = MethodChannelShare();

/// The default instance of [SharePlatform] to use.
///
/// Defaults to [MethodChannelShare].
static SharePlatform get instance => _instance;

/// Platform-specific plugins should set this with their own platform-specific
/// class that extends [SharePlatform] when they register themselves.
static set instance(SharePlatform instance) {
PlatformInterface.verifyToken(instance, _token);
_instance = instance;
}

/// Share text.
Future<void> share(
String text, {
String? subject,
Rect? sharePositionOrigin,
}) {
return _instance.share(
text,
subject: subject,
sharePositionOrigin: sharePositionOrigin,
);
}

/// Share files.
@Deprecated("Use shareXFiles instead.")
Future<void> shareFiles(
List<String> paths, {
List<String>? mimeTypes,
String? subject,
String? text,
Rect? sharePositionOrigin,
}) {
return _instance.shareFiles(
paths,
mimeTypes: mimeTypes,
subject: subject,
text: text,
sharePositionOrigin: sharePositionOrigin,
);
}

/// Share text with Result.
Future<ShareResult> shareWithResult(
String text, {
String? subject,
Rect? sharePositionOrigin,
}) async {
await _instance.share(
text,
subject: subject,
sharePositionOrigin: sharePositionOrigin,
);

return _resultUnavailable;
}

/// Share files with Result.
@Deprecated("Use shareXFiles instead.")
Future<ShareResult> shareFilesWithResult(
List<String> paths, {
List<String>? mimeTypes,
String? subject,
String? text,
Rect? sharePositionOrigin,
}) async {
await _instance.shareFiles(
paths,
mimeTypes: mimeTypes,
subject: subject,
text: text,
sharePositionOrigin: sharePositionOrigin,
);

return _resultUnavailable;
}

/// Share [XFile] objects with Result.
Future<ShareResult> shareXFiles(
List<XFile> files, {
String? subject,
String? text,
Rect? sharePositionOrigin,
}) async {
return _instance.shareXFiles(
files,
subject: subject,
text: text,
sharePositionOrigin: sharePositionOrigin,
);
}
}

/// The result of a share to determine what action the
/// user has taken.
///
/// [status] provides an easy way to determine how the
/// share-sheet was handled by the user, while [raw] provides
/// possible access to the action selected.
class ShareResult {
/// The raw return value from the share.
///
/// Note that an empty string means the share-sheet was
/// dismissed without any action and the special value
/// `dev.fluttercommunity.plus/share/unavailable` points
/// to the current environment not supporting share results.
final String raw;

/// The action the user has taken
final ShareResultStatus status;

const ShareResult(this.raw, this.status);
}

/// How the user handled the share-sheet
enum ShareResultStatus {
/// The user has selected an action
success,

/// The user dismissed the share-sheet
dismissed,

/// The status can not be determined
unavailable,
}

/// Returned if the platform is not supported
const _resultUnavailable = ShareResult(
'dev.fluttercommunity.plus/share/unavailable',
ShareResultStatus.unavailable,
);
Expand Up @@ -2,152 +2,5 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';
import 'dart:ui';

import 'package:cross_file/cross_file.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';

import 'method_channel/method_channel_share.dart';

/// The interface that implementations of `share_plus` must implement.
class SharePlatform extends PlatformInterface {
/// Constructs a SharePlatform.
SharePlatform() : super(token: _token);

static final Object _token = Object();

static SharePlatform _instance = MethodChannelShare();

/// The default instance of [SharePlatform] to use.
///
/// Defaults to [MethodChannelShare].
static SharePlatform get instance => _instance;

/// Platform-specific plugins should set this with their own platform-specific
/// class that extends [SharePlatform] when they register themselves.
static set instance(SharePlatform instance) {
PlatformInterface.verifyToken(instance, _token);
_instance = instance;
}

/// Share text.
Future<void> share(
String text, {
String? subject,
Rect? sharePositionOrigin,
}) {
return _instance.share(
text,
subject: subject,
sharePositionOrigin: sharePositionOrigin,
);
}

/// Share files.
@Deprecated("Use shareXFiles instead.")
Future<void> shareFiles(
List<String> paths, {
List<String>? mimeTypes,
String? subject,
String? text,
Rect? sharePositionOrigin,
}) {
return _instance.shareFiles(
paths,
mimeTypes: mimeTypes,
subject: subject,
text: text,
sharePositionOrigin: sharePositionOrigin,
);
}

/// Share text with Result.
Future<ShareResult> shareWithResult(
String text, {
String? subject,
Rect? sharePositionOrigin,
}) async {
await _instance.share(
text,
subject: subject,
sharePositionOrigin: sharePositionOrigin,
);

return _resultUnavailable;
}

/// Share files with Result.
@Deprecated("Use shareXFiles instead.")
Future<ShareResult> shareFilesWithResult(
List<String> paths, {
List<String>? mimeTypes,
String? subject,
String? text,
Rect? sharePositionOrigin,
}) async {
await _instance.shareFiles(
paths,
mimeTypes: mimeTypes,
subject: subject,
text: text,
sharePositionOrigin: sharePositionOrigin,
);

return _resultUnavailable;
}

/// Share [XFile] objects with Result.
Future<ShareResult> shareXFiles(
List<XFile> files, {
String? subject,
String? text,
Rect? sharePositionOrigin,
}) async {
return _instance.shareXFiles(
files,
subject: subject,
text: text,
sharePositionOrigin: sharePositionOrigin,
);
}
}

/// The result of a share to determine what action the
/// user has taken.
///
/// [status] provides an easy way to determine how the
/// share-sheet was handled by the user, while [raw] provides
/// possible access to the action selected.
class ShareResult {
/// The raw return value from the share.
///
/// Note that an empty string means the share-sheet was
/// dismissed without any action and the special value
/// `dev.fluttercommunity.plus/share/unavailable` points
/// to the current environment not supporting share results.
final String raw;

/// The action the user has taken
final ShareResultStatus status;

const ShareResult(this.raw, this.status);
}

/// How the user handled the share-sheet
enum ShareResultStatus {
/// The user has selected an action
success,

/// The user dismissed the share-sheet
dismissed,

/// The status can not be determined
unavailable,
}

/// Returned if the platform is not supported
const _resultUnavailable = ShareResult(
'dev.fluttercommunity.plus/share/unavailable',
ShareResultStatus.unavailable,
);
export 'package:cross_file/cross_file.dart';
export 'platform_interface/share_plus_platform.dart';
Expand Up @@ -4,7 +4,6 @@

import 'dart:io';

import 'package:cross_file/cross_file.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart'
show TestDefaultBinaryMessengerBinding, TestWidgetsFlutterBinding;
Expand Down