From 7e046d43682f7342cb5946522ea97d40f9c09242 Mon Sep 17 00:00:00 2001 From: Viren Khatri <44755140+werainkhatri@users.noreply.github.com> Date: Mon, 24 Oct 2022 19:06:59 +0530 Subject: [PATCH] feat(share_plus): export XFile --- .../integration_test/share_plus_test.dart | 1 - .../share_plus/example/lib/main.dart | 6 +- .../share_plus/share_plus/lib/share_plus.dart | 3 +- .../share_plus/lib/src/share_plus_linux.dart | 1 - .../share_plus/lib/src/share_plus_web.dart | 1 - .../lib/src/share_plus_windows.dart | 1 - .../method_channel/method_channel_share.dart | 1 - .../share_plus_platform.dart | 153 ++++++++++++++++++ .../lib/share_plus_platform_interface.dart | 151 +---------------- .../share_plus_platform_interface_test.dart | 1 - 10 files changed, 160 insertions(+), 159 deletions(-) create mode 100644 packages/share_plus/share_plus_platform_interface/lib/platform_interface/share_plus_platform.dart diff --git a/packages/share_plus/share_plus/example/integration_test/share_plus_test.dart b/packages/share_plus/share_plus/example/integration_test/share_plus_test.dart index f50553ef13..aacc39dc82 100644 --- a/packages/share_plus/share_plus/example/integration_test/share_plus_test.dart +++ b/packages/share_plus/share_plus/example/integration_test/share_plus_test.dart @@ -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'; diff --git a/packages/share_plus/share_plus/example/lib/main.dart b/packages/share_plus/share_plus/example/lib/main.dart index 024c956e90..4d998bb55b 100644 --- a/packages/share_plus/share_plus/example/lib/main.dart +++ b/packages/share_plus/share_plus/example/lib/main.dart @@ -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'; diff --git a/packages/share_plus/share_plus/lib/share_plus.dart b/packages/share_plus/share_plus/lib/share_plus.dart index 52d667f27f..51bd7b80f3 100644 --- a/packages/share_plus/share_plus/lib/share_plus.dart +++ b/packages/share_plus/share_plus/lib/share_plus.dart @@ -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' diff --git a/packages/share_plus/share_plus/lib/src/share_plus_linux.dart b/packages/share_plus/share_plus/lib/src/share_plus_linux.dart index 6080fc81a7..8e92fd606f 100644 --- a/packages/share_plus/share_plus/lib/src/share_plus_linux.dart +++ b/packages/share_plus/share_plus/lib/src/share_plus_linux.dart @@ -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'; diff --git a/packages/share_plus/share_plus/lib/src/share_plus_web.dart b/packages/share_plus/share_plus/lib/src/share_plus_web.dart index 956cd29d9d..986fb37d5b 100644 --- a/packages/share_plus/share_plus/lib/src/share_plus_web.dart +++ b/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; diff --git a/packages/share_plus/share_plus/lib/src/share_plus_windows.dart b/packages/share_plus/share_plus/lib/src/share_plus_windows.dart index 9ee66de60e..205c3b57d8 100644 --- a/packages/share_plus/share_plus/lib/src/share_plus_windows.dart +++ b/packages/share_plus/share_plus/lib/src/share_plus_windows.dart @@ -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'; diff --git a/packages/share_plus/share_plus_platform_interface/lib/method_channel/method_channel_share.dart b/packages/share_plus/share_plus_platform_interface/lib/method_channel/method_channel_share.dart index 8bbed87007..d2a00119dd 100644 --- a/packages/share_plus/share_plus_platform_interface/lib/method_channel/method_channel_share.dart +++ b/packages/share_plus/share_plus_platform_interface/lib/method_channel/method_channel_share.dart @@ -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; diff --git a/packages/share_plus/share_plus_platform_interface/lib/platform_interface/share_plus_platform.dart b/packages/share_plus/share_plus_platform_interface/lib/platform_interface/share_plus_platform.dart new file mode 100644 index 0000000000..163d22962d --- /dev/null +++ b/packages/share_plus/share_plus_platform_interface/lib/platform_interface/share_plus_platform.dart @@ -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 share( + String text, { + String? subject, + Rect? sharePositionOrigin, + }) { + return _instance.share( + text, + subject: subject, + sharePositionOrigin: sharePositionOrigin, + ); + } + + /// Share files. + @Deprecated("Use shareXFiles instead.") + Future shareFiles( + List paths, { + List? mimeTypes, + String? subject, + String? text, + Rect? sharePositionOrigin, + }) { + return _instance.shareFiles( + paths, + mimeTypes: mimeTypes, + subject: subject, + text: text, + sharePositionOrigin: sharePositionOrigin, + ); + } + + /// Share text with Result. + Future 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 shareFilesWithResult( + List paths, { + List? 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 shareXFiles( + List 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, +); diff --git a/packages/share_plus/share_plus_platform_interface/lib/share_plus_platform_interface.dart b/packages/share_plus/share_plus_platform_interface/lib/share_plus_platform_interface.dart index 1212017fbc..f1e38b83bc 100644 --- a/packages/share_plus/share_plus_platform_interface/lib/share_plus_platform_interface.dart +++ b/packages/share_plus/share_plus_platform_interface/lib/share_plus_platform_interface.dart @@ -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 share( - String text, { - String? subject, - Rect? sharePositionOrigin, - }) { - return _instance.share( - text, - subject: subject, - sharePositionOrigin: sharePositionOrigin, - ); - } - - /// Share files. - @Deprecated("Use shareXFiles instead.") - Future shareFiles( - List paths, { - List? mimeTypes, - String? subject, - String? text, - Rect? sharePositionOrigin, - }) { - return _instance.shareFiles( - paths, - mimeTypes: mimeTypes, - subject: subject, - text: text, - sharePositionOrigin: sharePositionOrigin, - ); - } - - /// Share text with Result. - Future 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 shareFilesWithResult( - List paths, { - List? 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 shareXFiles( - List 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'; diff --git a/packages/share_plus/share_plus_platform_interface/test/share_plus_platform_interface_test.dart b/packages/share_plus/share_plus_platform_interface/test/share_plus_platform_interface_test.dart index 3a0bfa2b33..c01e1bbb75 100644 --- a/packages/share_plus/share_plus_platform_interface/test/share_plus_platform_interface_test.dart +++ b/packages/share_plus/share_plus_platform_interface/test/share_plus_platform_interface_test.dart @@ -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;