diff --git a/packages/battery_plus/battery_plus/lib/battery_plus.dart b/packages/battery_plus/battery_plus/lib/battery_plus.dart index 9da12b7474..73359ccf08 100644 --- a/packages/battery_plus/battery_plus/lib/battery_plus.dart +++ b/packages/battery_plus/battery_plus/lib/battery_plus.dart @@ -3,12 +3,8 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io' show Platform; -import 'package:flutter/foundation.dart' show kIsWeb; import 'package:battery_plus_platform_interface/battery_plus_platform_interface.dart'; -import 'package:battery_plus_platform_interface/method_channel_battery_plus.dart'; -import 'package:battery_plus_linux/battery_plus_linux.dart'; // Export enums from the platform_interface so plugin users can use them directly. export 'package:battery_plus_platform_interface/battery_plus_platform_interface.dart' @@ -31,22 +27,7 @@ class Battery { static Battery? _singleton; - static bool _manualDartRegistrationNeeded = true; - static BatteryPlatform get _platform { - // This is to manually endorse Dart implementations until automatic - // registration of Dart plugins is implemented. For details see - // https://github.com/flutter/flutter/issues/52267. - if (_manualDartRegistrationNeeded) { - // Only do the initial registration if it hasn't already been overridden - // with a non-default instance. - if (!kIsWeb && BatteryPlatform.instance is MethodChannelBattery) { - if (Platform.isLinux) { - BatteryPlatform.instance = BatteryPlusLinux(); - } - } - _manualDartRegistrationNeeded = false; - } return BatteryPlatform.instance; } diff --git a/packages/battery_plus/battery_plus_linux/lib/src/battery_plus_linux_real.dart b/packages/battery_plus/battery_plus_linux/lib/src/battery_plus_linux_real.dart index 362f9be6c1..525908f2cc 100644 --- a/packages/battery_plus/battery_plus_linux/lib/src/battery_plus_linux_real.dart +++ b/packages/battery_plus/battery_plus_linux/lib/src/battery_plus_linux_real.dart @@ -26,6 +26,11 @@ typedef UPowerDeviceFactory = UPowerDevice Function(); /// The Linux implementation of BatteryPlatform. class BatteryPlusLinux extends BatteryPlatform { + /// Register this dart class as the platform implementation for linux + static void registerWith() { + BatteryPlatform.instance = BatteryPlusLinux(); + } + /// Returns the current battery level in percent. @override Future get batteryLevel { diff --git a/packages/battery_plus/battery_plus_linux/pubspec.yaml b/packages/battery_plus/battery_plus_linux/pubspec.yaml index bc50d334c8..909b5c29ee 100644 --- a/packages/battery_plus/battery_plus_linux/pubspec.yaml +++ b/packages/battery_plus/battery_plus_linux/pubspec.yaml @@ -22,6 +22,7 @@ dev_dependencies: flutter: plugin: + implements: battery_plus platforms: linux: dartPluginClass: BatteryLinux diff --git a/packages/battery_plus/battery_plus_linux/test/battery_plus_linux_test.dart b/packages/battery_plus/battery_plus_linux/test/battery_plus_linux_test.dart index 0d416136d0..e3d448ba03 100644 --- a/packages/battery_plus/battery_plus_linux/test/battery_plus_linux_test.dart +++ b/packages/battery_plus/battery_plus_linux/test/battery_plus_linux_test.dart @@ -9,6 +9,10 @@ import 'package:dbus/src/dbus_value.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { + test('registered instance', () { + BatteryPlusLinux.registerWith(); + expect(BatteryPlatform.instance, isA()); + }); test('battery level', () async { final battery = BatteryPlusLinux(); battery.createDevice = () { diff --git a/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart b/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart index c0dd5e573e..7e2ba98778 100644 --- a/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart +++ b/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart @@ -3,12 +3,8 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io' show Platform; -import 'package:flutter/foundation.dart' show kIsWeb; import 'package:connectivity_plus_platform_interface/connectivity_plus_platform_interface.dart'; -import 'package:connectivity_plus_platform_interface/method_channel_connectivity.dart'; -import 'package:connectivity_plus_linux/connectivity_plus_linux.dart'; // Export enums from the platform_interface so plugin users can use them directly. export 'package:connectivity_plus_platform_interface/connectivity_plus_platform_interface.dart' @@ -31,23 +27,7 @@ class Connectivity { static Connectivity? _singleton; - static bool _manualDartRegistrationNeeded = true; - - // This is to manually endorse Dart implementations until automatic - // registration of Dart plugins is implemented. For details see - // https://github.com/flutter/flutter/issues/52267. static ConnectivityPlatform get _platform { - if (_manualDartRegistrationNeeded) { - // Only do the initial registration if it hasn't already been overridden - // with a non-default instance. - if (!kIsWeb && - ConnectivityPlatform.instance is MethodChannelConnectivity) { - if (Platform.isLinux) { - ConnectivityPlatform.instance = ConnectivityLinux(); - } - } - _manualDartRegistrationNeeded = false; - } return ConnectivityPlatform.instance; } diff --git a/packages/connectivity_plus/connectivity_plus_linux/lib/src/connectivity_real.dart b/packages/connectivity_plus/connectivity_plus_linux/lib/src/connectivity_real.dart index e1e7505e3f..dd82ce640c 100644 --- a/packages/connectivity_plus/connectivity_plus_linux/lib/src/connectivity_real.dart +++ b/packages/connectivity_plus/connectivity_plus_linux/lib/src/connectivity_real.dart @@ -12,6 +12,11 @@ typedef NetworkManagerClientFactory = NetworkManagerClient Function(); /// The Linux implementation of ConnectivityPlatform. class ConnectivityLinux extends ConnectivityPlatform { + /// Register this dart class as the platform implementation for linux + static void registerWith() { + ConnectivityPlatform.instance = ConnectivityLinux(); + } + /// Checks the connection status of the device. @override Future checkConnectivity() async { diff --git a/packages/connectivity_plus/connectivity_plus_linux/pubspec.yaml b/packages/connectivity_plus/connectivity_plus_linux/pubspec.yaml index ad1a82ea0e..615e2d1330 100644 --- a/packages/connectivity_plus/connectivity_plus_linux/pubspec.yaml +++ b/packages/connectivity_plus/connectivity_plus_linux/pubspec.yaml @@ -25,6 +25,7 @@ dev_dependencies: flutter: plugin: + implements: connectivity_plus platforms: linux: dartPluginClass: ConnectivityLinux diff --git a/packages/connectivity_plus/connectivity_plus_linux/test/connectivity_plus_linux_test.dart b/packages/connectivity_plus/connectivity_plus_linux/test/connectivity_plus_linux_test.dart index 262831a148..647974b2e2 100644 --- a/packages/connectivity_plus/connectivity_plus_linux/test/connectivity_plus_linux_test.dart +++ b/packages/connectivity_plus/connectivity_plus_linux/test/connectivity_plus_linux_test.dart @@ -9,6 +9,10 @@ import 'connectivity_plus_linux_test.mocks.dart'; @GenerateMocks([NetworkManagerClient]) void main() { + test('registered instance', () { + ConnectivityLinux.registerWith(); + expect(ConnectivityPlatform.instance, isA()); + }); test('wireless', () async { final linux = ConnectivityLinux(); linux.createClient = () { diff --git a/packages/device_info_plus/device_info_plus/lib/device_info_plus.dart b/packages/device_info_plus/device_info_plus/lib/device_info_plus.dart index 4f0c918148..81ad1e8a27 100644 --- a/packages/device_info_plus/device_info_plus/lib/device_info_plus.dart +++ b/packages/device_info_plus/device_info_plus/lib/device_info_plus.dart @@ -3,12 +3,8 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io' show Platform; -import 'package:flutter/foundation.dart' show kIsWeb, visibleForTesting; import 'package:device_info_plus_platform_interface/device_info_plus_platform_interface.dart'; -import 'package:device_info_plus_linux/device_info_plus_linux.dart'; -import 'package:device_info_plus_windows/device_info_plus_windows.dart'; export 'package:device_info_plus_platform_interface/device_info_plus_platform_interface.dart' show AndroidBuildVersion, @@ -26,33 +22,11 @@ class DeviceInfoPlugin { /// repeatedly or in performance-sensitive blocks. DeviceInfoPlugin(); - /// Disables the platform override in order to use a manually registered - /// [DeviceInfoPlatform] for testing purposes. - /// See https://github.com/flutter/flutter/issues/52267 for more details. - @visibleForTesting - static set disableDeviceInfoPlatformOverride(bool override) { - _disablePlatformOverride = override; - } - - static bool _disablePlatformOverride = false; - static DeviceInfoPlatform? __platform; - // This is to manually endorse the Linux plugin until automatic registration // of dart plugins is implemented. // See https://github.com/flutter/flutter/issues/52267 for more details. static DeviceInfoPlatform get _platform { - if (__platform == null) { - if (!_disablePlatformOverride && !kIsWeb) { - if (Platform.isLinux) { - __platform = DeviceInfoLinux(); - } else if (Platform.isWindows) { - __platform = DeviceInfoWindows(); - } - } - __platform ??= DeviceInfoPlatform.instance; - } - - return __platform!; + return DeviceInfoPlatform.instance; } /// This information does not change from call to call. Cache it. diff --git a/packages/device_info_plus/device_info_plus_linux/lib/src/device_info.dart b/packages/device_info_plus/device_info_plus_linux/lib/src/device_info.dart index 0ba800e137..ab952e4e8c 100644 --- a/packages/device_info_plus/device_info_plus_linux/lib/src/device_info.dart +++ b/packages/device_info_plus/device_info_plus_linux/lib/src/device_info.dart @@ -7,6 +7,11 @@ import 'package:meta/meta.dart'; /// See [DeviceInfoPlatform] class DeviceInfoLinux extends DeviceInfoPlatform { + /// Register this dart class as the platform implementation for linux + static void registerWith() { + DeviceInfoPlatform.instance = DeviceInfoLinux(); + } + LinuxDeviceInfo? _cache; final FileSystem _fileSystem; diff --git a/packages/device_info_plus/device_info_plus_linux/pubspec.yaml b/packages/device_info_plus/device_info_plus_linux/pubspec.yaml index 8f43e23732..476d51029a 100644 --- a/packages/device_info_plus/device_info_plus_linux/pubspec.yaml +++ b/packages/device_info_plus/device_info_plus_linux/pubspec.yaml @@ -19,3 +19,10 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^1.0.4 + +flutter: + plugin: + implements: device_info_plus + platforms: + linux: + dartPluginClass: DeviceInfoLinux \ No newline at end of file diff --git a/packages/device_info_plus/device_info_plus_linux/test/device_info_plus_linux_test.dart b/packages/device_info_plus/device_info_plus_linux/test/device_info_plus_linux_test.dart index 1bb5754776..097a934400 100644 --- a/packages/device_info_plus/device_info_plus_linux/test/device_info_plus_linux_test.dart +++ b/packages/device_info_plus/device_info_plus_linux/test/device_info_plus_linux_test.dart @@ -1,8 +1,13 @@ import 'package:device_info_plus_linux/device_info_plus_linux.dart'; +import 'package:device_info_plus_platform_interface/device_info_plus_platform_interface.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:file/memory.dart'; void main() { + test('registered instance', () { + DeviceInfoLinux.registerWith(); + expect(DeviceInfoPlatform.instance, isA()); + }); test('os-release', () async { final fs = MemoryFileSystem.test(); final file = fs.file('/etc/os-release')..createSync(recursive: true); diff --git a/packages/device_info_plus/device_info_plus_windows/lib/src/device_info_plus_windows_real.dart b/packages/device_info_plus/device_info_plus_windows/lib/src/device_info_plus_windows_real.dart index 6d9c682c9b..94af98c355 100644 --- a/packages/device_info_plus/device_info_plus_windows/lib/src/device_info_plus_windows_real.dart +++ b/packages/device_info_plus/device_info_plus_windows/lib/src/device_info_plus_windows_real.dart @@ -9,6 +9,11 @@ import 'package:win32/win32.dart'; /// The Windows implementation of [DeviceInfoPlatform]. class DeviceInfoWindows extends DeviceInfoPlatform { + /// Register this dart class as the platform implementation for linux + static void registerWith() { + DeviceInfoPlatform.instance = DeviceInfoWindows(); + } + /// Returns a [WindowsDeviceInfo] with information about the device. @override Future windowsInfo() { diff --git a/packages/device_info_plus/device_info_plus_windows/pubspec.yaml b/packages/device_info_plus/device_info_plus_windows/pubspec.yaml index f89222a19d..1188f0950d 100644 --- a/packages/device_info_plus/device_info_plus_windows/pubspec.yaml +++ b/packages/device_info_plus/device_info_plus_windows/pubspec.yaml @@ -18,3 +18,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + +flutter: + plugin: + implements: device_info_plus + platforms: + windows: + dartPluginClass: DeviceInfoWindows \ No newline at end of file diff --git a/packages/device_info_plus/device_info_plus_windows/test/device_info_plus_test.dart b/packages/device_info_plus/device_info_plus_windows/test/device_info_plus_test.dart new file mode 100644 index 0000000000..d82af99456 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_windows/test/device_info_plus_test.dart @@ -0,0 +1,10 @@ +import 'package:device_info_plus_platform_interface/device_info_plus_platform_interface.dart'; +import 'package:device_info_plus_windows/src/device_info_plus_windows_real.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + test('registered instance', () { + DeviceInfoWindows.registerWith(); + expect(DeviceInfoPlatform.instance, isA()); + }); +} diff --git a/packages/network_info_plus/network_info_plus/lib/network_info_plus.dart b/packages/network_info_plus/network_info_plus/lib/network_info_plus.dart index f77b5c1571..3719a6bd95 100644 --- a/packages/network_info_plus/network_info_plus/lib/network_info_plus.dart +++ b/packages/network_info_plus/network_info_plus/lib/network_info_plus.dart @@ -3,13 +3,9 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io' show Platform; import 'package:flutter/services.dart'; -import 'package:flutter/foundation.dart' show kIsWeb; import 'package:network_info_plus_platform_interface/network_info_plus_platform_interface.dart'; -import 'package:network_info_plus_platform_interface/method_channel_network_info.dart'; -import 'package:network_info_plus_linux/network_info_plus_linux.dart'; // Export enums from the platform_interface so plugin users can use them directly. export 'package:network_info_plus_platform_interface/network_info_plus_platform_interface.dart' @@ -32,22 +28,10 @@ class NetworkInfo { static NetworkInfo? _singleton; - static bool _manualDartRegistrationNeeded = true; - // This is to manually endorse Dart implementations until automatic // registration of Dart plugins is implemented. For details see // https://github.com/flutter/flutter/issues/52267. static NetworkInfoPlatform get _platform { - if (_manualDartRegistrationNeeded) { - // Only do the initial registration if it hasn't already been overridden - // with a non-default instance. - if (!kIsWeb && NetworkInfoPlatform.instance is MethodChannelNetworkInfo) { - if (Platform.isLinux) { - NetworkInfoPlatform.instance = NetworkInfoLinux(); - } - } - _manualDartRegistrationNeeded = false; - } return NetworkInfoPlatform.instance; } diff --git a/packages/network_info_plus/network_info_plus_linux/lib/src/network_info_real.dart b/packages/network_info_plus/network_info_plus_linux/lib/src/network_info_real.dart index 72e7a7e76f..01169e736a 100644 --- a/packages/network_info_plus/network_info_plus_linux/lib/src/network_info_real.dart +++ b/packages/network_info_plus/network_info_plus_linux/lib/src/network_info_real.dart @@ -17,6 +17,11 @@ typedef NetworkManagerClientFactory = NetworkManagerClient Function(); /// The Linux implementation of NetworkInfoPlatform. class NetworkInfoLinux extends NetworkInfoPlatform { + /// Register this dart class as the platform implementation for linux + static void registerWith() { + NetworkInfoPlatform.instance = NetworkInfoLinux(); + } + /// Obtains the wifi name (SSID) of the connected network @override Future getWifiName() { diff --git a/packages/network_info_plus/network_info_plus_linux/pubspec.yaml b/packages/network_info_plus/network_info_plus_linux/pubspec.yaml index a1a471f211..4539e02ce4 100644 --- a/packages/network_info_plus/network_info_plus_linux/pubspec.yaml +++ b/packages/network_info_plus/network_info_plus_linux/pubspec.yaml @@ -23,6 +23,7 @@ dev_dependencies: flutter: plugin: + implements: network_info_plus platforms: linux: dartPluginClass: NetworkInfoLinux diff --git a/packages/network_info_plus/network_info_plus_linux/test/device_info_plus_linux_test.dart b/packages/network_info_plus/network_info_plus_linux/test/device_info_plus_linux_test.dart new file mode 100644 index 0000000000..96c9826065 --- /dev/null +++ b/packages/network_info_plus/network_info_plus_linux/test/device_info_plus_linux_test.dart @@ -0,0 +1,10 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:network_info_plus_linux/src/network_info_real.dart'; +import 'package:network_info_plus_platform_interface/network_info_plus_platform_interface.dart'; + +void main() { + test('registered instance', () { + NetworkInfoLinux.registerWith(); + expect(NetworkInfoPlatform.instance, isA()); + }); +} diff --git a/packages/package_info_plus/package_info_plus/lib/package_info_plus.dart b/packages/package_info_plus/package_info_plus/lib/package_info_plus.dart index 369f95a3dc..9b11a3b5a6 100644 --- a/packages/package_info_plus/package_info_plus/lib/package_info_plus.dart +++ b/packages/package_info_plus/package_info_plus/lib/package_info_plus.dart @@ -3,12 +3,9 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io' show Platform; -import 'package:flutter/foundation.dart' show kIsWeb, visibleForTesting; -import 'package:package_info_plus_linux/package_info_plus_linux.dart'; +import 'package:flutter/foundation.dart' show visibleForTesting; import 'package:package_info_plus_platform_interface/package_info_platform_interface.dart'; -import 'package:package_info_plus_windows/package_info_plus_windows.dart'; /// Application metadata. Provides application bundle information on iOS and /// application package information on Android. @@ -27,34 +24,6 @@ class PackageInfo { this.buildSignature = '', }); - /// Disables the platform override in order to use a manually registered - /// [PackageInfoPlatform] for testing purposes. - /// See https://github.com/flutter/flutter/issues/52267 for more details. - @visibleForTesting - static set disablePackageInfoPlatformOverride(bool override) { - _disablePlatformOverride = override; - } - - static bool _disablePlatformOverride = false; - static PackageInfoPlatform? __platform; - - // This is to manually endorse the Desktop plugins until automatic - // registration of Dart plugins is implemented. - // See https://github.com/flutter/flutter/issues/52267 for more details. - static PackageInfoPlatform get _platform { - if (__platform == null) { - if (!_disablePlatformOverride && !kIsWeb) { - if (Platform.isLinux) { - __platform = PackageInfoLinux(); - } else if (Platform.isWindows) { - __platform = PackageInfoWindows(); - } - } - __platform ??= PackageInfoPlatform.instance; - } - return __platform!; - } - static PackageInfo? _fromPlatform; /// Retrieves package information from the platform. @@ -64,7 +33,7 @@ class PackageInfo { return _fromPlatform!; } - final platformData = await _platform.getAll(); + final platformData = await PackageInfoPlatform.instance.getAll(); _fromPlatform = PackageInfo( appName: platformData.appName, packageName: platformData.packageName, diff --git a/packages/package_info_plus/package_info_plus/test/package_info_test.dart b/packages/package_info_plus/package_info_plus/test/package_info_test.dart index a23c434985..4d84db11ec 100644 --- a/packages/package_info_plus/package_info_plus/test/package_info_test.dart +++ b/packages/package_info_plus/package_info_plus/test/package_info_test.dart @@ -28,10 +28,6 @@ void main() { } }); - setUp(() { - PackageInfo.disablePackageInfoPlatformOverride = true; - }); - tearDown(() { log.clear(); }); diff --git a/packages/package_info_plus/package_info_plus_linux/lib/src/package_info.dart b/packages/package_info_plus/package_info_plus_linux/lib/src/package_info.dart index 2f9832cb83..b8164fbff7 100644 --- a/packages/package_info_plus/package_info_plus_linux/lib/src/package_info.dart +++ b/packages/package_info_plus/package_info_plus_linux/lib/src/package_info.dart @@ -7,6 +7,11 @@ import 'package:path/path.dart' as path; /// The Linux implementation of [PackageInfoPlatform]. class PackageInfoLinux extends PackageInfoPlatform { + /// Register this dart class as the platform implementation for linux + static void registerWith() { + PackageInfoPlatform.instance = PackageInfoLinux(); + } + /// Returns a map with the following keys: /// appName, packageName, version, buildNumber @override diff --git a/packages/package_info_plus/package_info_plus_linux/pubspec.yaml b/packages/package_info_plus/package_info_plus_linux/pubspec.yaml index 8c38b792a6..d5e4bb13ec 100644 --- a/packages/package_info_plus/package_info_plus_linux/pubspec.yaml +++ b/packages/package_info_plus/package_info_plus_linux/pubspec.yaml @@ -18,3 +18,11 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^1.0.4 + +flutter: + plugin: + implements: package_info_plus + platforms: + linux: + dartPluginClass: PackageInfoLinux + pluginClass: none \ No newline at end of file diff --git a/packages/package_info_plus/package_info_plus_linux/test/package_info_plus_linux_test.dart b/packages/package_info_plus/package_info_plus_linux/test/package_info_plus_linux_test.dart new file mode 100644 index 0000000000..c496908e60 --- /dev/null +++ b/packages/package_info_plus/package_info_plus_linux/test/package_info_plus_linux_test.dart @@ -0,0 +1,10 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:package_info_plus_linux/src/package_info.dart'; +import 'package:package_info_plus_platform_interface/package_info_platform_interface.dart'; + +void main() { + test('registered instance', () { + PackageInfoLinux.registerWith(); + expect(PackageInfoPlatform.instance, isA()); + }); +} diff --git a/packages/package_info_plus/package_info_plus_windows/lib/src/package_info_plus_windows_real.dart b/packages/package_info_plus/package_info_plus_windows/lib/src/package_info_plus_windows_real.dart index 3a935eff61..b2a2ecd6b0 100644 --- a/packages/package_info_plus/package_info_plus_windows/lib/src/package_info_plus_windows_real.dart +++ b/packages/package_info_plus/package_info_plus_windows/lib/src/package_info_plus_windows_real.dart @@ -13,6 +13,11 @@ part 'file_version_info.dart'; /// The Windows implementation of [PackageInfoPlatform]. class PackageInfoWindows extends PackageInfoPlatform { + /// Register this dart class as the platform implementation for linux + static void registerWith() { + PackageInfoPlatform.instance = PackageInfoWindows(); + } + /// Returns a map with the following keys: /// appName, packageName, version, buildNumber @override diff --git a/packages/package_info_plus/package_info_plus_windows/pubspec.yaml b/packages/package_info_plus/package_info_plus_windows/pubspec.yaml index 7476f9b85a..6a91cf86ef 100644 --- a/packages/package_info_plus/package_info_plus_windows/pubspec.yaml +++ b/packages/package_info_plus/package_info_plus_windows/pubspec.yaml @@ -19,3 +19,11 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^1.0.4 + +flutter: + plugin: + implements: package_info_plus + platforms: + windows: + dartPluginClass: PackageInfoWindows + pluginClass: none \ No newline at end of file diff --git a/packages/package_info_plus/package_info_plus_windows/test/package_info_plus_windows_test.dart b/packages/package_info_plus/package_info_plus_windows/test/package_info_plus_windows_test.dart new file mode 100644 index 0000000000..e2b65a9a9f --- /dev/null +++ b/packages/package_info_plus/package_info_plus_windows/test/package_info_plus_windows_test.dart @@ -0,0 +1,10 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:package_info_plus_platform_interface/package_info_platform_interface.dart'; +import 'package:package_info_plus_windows/src/package_info_plus_windows_real.dart'; + +void main() { + test('registered instance', () { + PackageInfoWindows.registerWith(); + expect(PackageInfoPlatform.instance, isA()); + }); +} diff --git a/packages/share_plus/share_plus/lib/share_plus.dart b/packages/share_plus/share_plus/lib/share_plus.dart index 99776f7476..22973861c6 100644 --- a/packages/share_plus/share_plus/lib/share_plus.dart +++ b/packages/share_plus/share_plus/lib/share_plus.dart @@ -3,43 +3,13 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io' show Platform; import 'dart:ui'; -import 'package:flutter/foundation.dart' show kIsWeb, visibleForTesting; import 'package:share_plus_platform_interface/share_plus_platform_interface.dart'; -import 'package:share_plus_linux/share_plus_linux.dart'; -import 'package:share_plus_windows/share_plus_windows.dart'; /// Plugin for summoning a platform share sheet. class Share { - /// Disables the platform override in order to use a manually registered - /// [SharePlatform] for testing purposes. - /// See https://github.com/flutter/flutter/issues/52267 for more details. - @visibleForTesting - static set disableSharePlatformOverride(bool override) { - _disablePlatformOverride = override; - } - - static bool _disablePlatformOverride = false; - static SharePlatform? __platform; - - // This is to manually endorse the Linux plugin until automatic registration - // of dart plugins is implemented. - // See https://github.com/flutter/flutter/issues/52267 for more details. - static SharePlatform get _platform { - if (__platform == null) { - if (!_disablePlatformOverride && !kIsWeb) { - if (Platform.isLinux) { - __platform = ShareLinux(); - } else if (Platform.isWindows) { - __platform = ShareWindows(); - } - } - __platform ??= SharePlatform.instance; - } - return __platform!; - } + static SharePlatform get _platform => SharePlatform.instance; /// Summons the platform's share sheet to share text. /// diff --git a/packages/share_plus/share_plus_linux/lib/share_plus_linux.dart b/packages/share_plus/share_plus_linux/lib/share_plus_linux.dart index a011bf35f6..dfab4e3354 100644 --- a/packages/share_plus/share_plus_linux/lib/share_plus_linux.dart +++ b/packages/share_plus/share_plus_linux/lib/share_plus_linux.dart @@ -8,6 +8,11 @@ import 'package:url_launcher/url_launcher.dart'; /// The Linux implementation of SharePlatform. class ShareLinux extends SharePlatform { + /// Register this dart class as the platform implementation for linux + static void registerWith() { + SharePlatform.instance = ShareLinux(); + } + /// Share text. /// Throws a [PlatformException] if `mailto:` scheme cannot be handled. @override diff --git a/packages/share_plus/share_plus_linux/pubspec.yaml b/packages/share_plus/share_plus_linux/pubspec.yaml index 8fe597ca3b..a9164b1617 100644 --- a/packages/share_plus/share_plus_linux/pubspec.yaml +++ b/packages/share_plus/share_plus_linux/pubspec.yaml @@ -21,3 +21,11 @@ dev_dependencies: sdk: flutter flutter_lints: ^1.0.4 url_launcher_platform_interface: ^2.0.2 + +flutter: + plugin: + implements: share_plus + platforms: + linux: + dartPluginClass: ShareLinux + pluginClass: none \ No newline at end of file diff --git a/packages/share_plus/share_plus_linux/test/share_plus_linux_test.dart b/packages/share_plus/share_plus_linux/test/share_plus_linux_test.dart index aaf4529f2e..1b990673ed 100644 --- a/packages/share_plus/share_plus_linux/test/share_plus_linux_test.dart +++ b/packages/share_plus/share_plus_linux/test/share_plus_linux_test.dart @@ -1,9 +1,14 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:share_plus_linux/share_plus_linux.dart'; +import 'package:share_plus_platform_interface/share_plus_platform_interface.dart'; import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; import 'package:url_launcher_platform_interface/link.dart'; void main() { + test('registered instance', () { + ShareLinux.registerWith(); + expect(SharePlatform.instance, isA()); + }); test('url encoding is correct for &', () async { final mock = MockUrlLauncherPlatform(); UrlLauncherPlatform.instance = mock; diff --git a/packages/share_plus/share_plus_windows/lib/share_plus_windows.dart b/packages/share_plus/share_plus_windows/lib/share_plus_windows.dart index ba7a1807cd..3d21607bcb 100644 --- a/packages/share_plus/share_plus_windows/lib/share_plus_windows.dart +++ b/packages/share_plus/share_plus_windows/lib/share_plus_windows.dart @@ -8,6 +8,11 @@ import 'package:share_plus_platform_interface/share_plus_platform_interface.dart /// The Windows implementation of SharePlatform. class ShareWindows extends SharePlatform { + /// Register this dart class as the platform implementation for linux + static void registerWith() { + SharePlatform.instance = ShareWindows(); + } + /// Share text. @override Future share( diff --git a/packages/share_plus/share_plus_windows/pubspec.yaml b/packages/share_plus/share_plus_windows/pubspec.yaml index 1fcdba4684..a441e11059 100644 --- a/packages/share_plus/share_plus_windows/pubspec.yaml +++ b/packages/share_plus/share_plus_windows/pubspec.yaml @@ -20,3 +20,11 @@ dev_dependencies: sdk: flutter flutter_lints: ^1.0.4 url_launcher_platform_interface: ^2.0.2 + +flutter: + plugin: + implements: share_plus + platforms: + windows: + dartPluginClass: ShareWindows + pluginClass: none \ No newline at end of file diff --git a/packages/share_plus/share_plus_windows/test/share_plus_windows_test.dart b/packages/share_plus/share_plus_windows/test/share_plus_windows_test.dart index 8f009fa02f..3618120d1f 100644 --- a/packages/share_plus/share_plus_windows/test/share_plus_windows_test.dart +++ b/packages/share_plus/share_plus_windows/test/share_plus_windows_test.dart @@ -1,9 +1,14 @@ import 'package:flutter_test/flutter_test.dart'; +import 'package:share_plus_platform_interface/share_plus_platform_interface.dart'; import 'package:share_plus_windows/share_plus_windows.dart'; import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; import 'package:url_launcher_platform_interface/link.dart'; void main() { + test('registered instance', () { + ShareWindows.registerWith(); + expect(SharePlatform.instance, isA()); + }); test('url encoding is correct for &', () async { final mock = MockUrlLauncherPlatform(); UrlLauncherPlatform.instance = mock;