From e0293b4898587de5e8cdd5d12217dabf18e4afc7 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sat, 12 Dec 2020 12:42:36 +0100 Subject: [PATCH] [connectivity_plus] eliminate indirect FFI dependency (#65) Same as - package_info_plus_windows: https://github.com/fluttercommunity/plus_plugins/commit/cf13721d4daf7b838fff6b7442f41a8a67b9fd34 - path_provider_windows: https://github.com/flutter/plugins/commit/25957033132ac17094e82bec58e429fac073a483 - ... Moves the real implementation of connectivity_plus_linux behind a conditional export, instead exporting a stub on platforms that don't support dart:ffi. This avoids build breakage in web projects that have transitive dependencies on connectivity_plus (and thus connectivity_plus_linux due to manual endorsement). This will no longer be necessary once https://github.com/flutter/flutter/issues/52267 is fixed, since only Linux builds will ever need to have code-level dependency on connectivity_plus_linux. --- .../lib/connectivity_plus_linux.dart | 6 +++++- ...{connectivity.dart => connectivity_real.dart} | 0 .../lib/src/connectivity_stub.dart | 16 ++++++++++++++++ .../test/connectivity_plus_linux_test.dart | 2 +- 4 files changed, 22 insertions(+), 2 deletions(-) rename packages/connectivity_plus_linux/lib/src/{connectivity.dart => connectivity_real.dart} (100%) create mode 100644 packages/connectivity_plus_linux/lib/src/connectivity_stub.dart diff --git a/packages/connectivity_plus_linux/lib/connectivity_plus_linux.dart b/packages/connectivity_plus_linux/lib/connectivity_plus_linux.dart index 8d035e5da7..08c815673a 100644 --- a/packages/connectivity_plus_linux/lib/connectivity_plus_linux.dart +++ b/packages/connectivity_plus_linux/lib/connectivity_plus_linux.dart @@ -1,4 +1,8 @@ /// The Linux implementation of `connectivity_plus`. library connectivity_plus_linux; -export 'src/connectivity.dart'; +// connectivity_plus_linux depends on dbus which uses FFI internally; export +// a stub for platforms that don't support FFI (e.g., web) to avoid having +// transitive dependencies break web compilation. +export 'src/connectivity_stub.dart' + if (dart.library.ffi) 'src/connectivity_real.dart'; diff --git a/packages/connectivity_plus_linux/lib/src/connectivity.dart b/packages/connectivity_plus_linux/lib/src/connectivity_real.dart similarity index 100% rename from packages/connectivity_plus_linux/lib/src/connectivity.dart rename to packages/connectivity_plus_linux/lib/src/connectivity_real.dart diff --git a/packages/connectivity_plus_linux/lib/src/connectivity_stub.dart b/packages/connectivity_plus_linux/lib/src/connectivity_stub.dart new file mode 100644 index 0000000000..c080737b07 --- /dev/null +++ b/packages/connectivity_plus_linux/lib/src/connectivity_stub.dart @@ -0,0 +1,16 @@ +import 'package:connectivity_plus_platform_interface/connectivity_plus_platform_interface.dart'; + +/// A stub implementation to satisfy compilation of multi-platform packages that +/// depend on connectivity_plus_linux. This should never actually be created. +/// +/// Notably, because connectivity_plus needs to manually register +/// connectivity_plus_linux, anything with a transitive dependency on +/// connectivity_plus will also depend on connectivity_plus_linux, not just at +/// the pubspec level but the code level. +class ConnectivityLinux extends ConnectivityPlatform { + /// Errors on attempted instantiation of the stub. It exists only to satisfy + /// compile-time dependencies, and should never actually be created. + ConnectivityLinux() { + assert(false); + } +} diff --git a/packages/connectivity_plus_linux/test/connectivity_plus_linux_test.dart b/packages/connectivity_plus_linux/test/connectivity_plus_linux_test.dart index 5f60e8c6f0..0201f04e55 100644 --- a/packages/connectivity_plus_linux/test/connectivity_plus_linux_test.dart +++ b/packages/connectivity_plus_linux/test/connectivity_plus_linux_test.dart @@ -1,4 +1,4 @@ -import 'package:connectivity_plus_linux/src/connectivity.dart'; +import 'package:connectivity_plus_linux/src/connectivity_real.dart'; import 'package:connectivity_plus_linux/src/network_manager.dart'; import 'package:connectivity_plus_platform_interface/connectivity_plus_platform_interface.dart'; import 'package:flutter_test/flutter_test.dart';