Skip to content

Commit

Permalink
fix(share_plus): export XFile (#1286)
Browse files Browse the repository at this point in the history
  • Loading branch information
werainkhatri committed Oct 25, 2022
1 parent 4ce5575 commit 1f1786c
Show file tree
Hide file tree
Showing 10 changed files with 160 additions and 159 deletions.
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

0 comments on commit 1f1786c

Please sign in to comment.