diff --git a/packages/connectivity_plus/connectivity_plus/README.md b/packages/connectivity_plus/connectivity_plus/README.md index 1a4990116d..b97f80d2ab 100644 --- a/packages/connectivity_plus/connectivity_plus/README.md +++ b/packages/connectivity_plus/connectivity_plus/README.md @@ -40,6 +40,11 @@ import 'package:connectivity_plus/connectivity_plus.dart'; final List connectivityResult = await (Connectivity().checkConnectivity()); +// Determines whether any active network connection exists. +if (connectivityResult.hasConnectivity) { + // Connectivity available (regardless of the underlying transport). +} + // This condition is for demo purposes only to explain every connection type. // Use conditions which work for your requirements. if (connectivityResult.contains(ConnectivityResult.mobile)) { diff --git a/packages/connectivity_plus/connectivity_plus/example/lib/main.dart b/packages/connectivity_plus/connectivity_plus/example/lib/main.dart index 29927da5dc..67fc4689b0 100644 --- a/packages/connectivity_plus/connectivity_plus/example/lib/main.dart +++ b/packages/connectivity_plus/connectivity_plus/example/lib/main.dart @@ -101,6 +101,10 @@ class _MyHomePageState extends State { mainAxisSize: MainAxisSize.min, children: [ const Spacer(flex: 2), + Text(_connectionStatus.hasConnectivity + ? 'Connectivity available' + : 'No connectivity'), + const Spacer(flex: 2), Text( 'Active connection types:', style: Theme.of(context).textTheme.headlineMedium, diff --git a/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart b/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart index cef5ddee13..88a32ab61a 100644 --- a/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart +++ b/packages/connectivity_plus/connectivity_plus/lib/connectivity_plus.dart @@ -9,7 +9,7 @@ import 'package:collection/collection.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' - show ConnectivityResult; + show ConnectivityResult, ConnectivityResultListX; export 'src/connectivity_plus_linux.dart' if (dart.library.js_interop) 'src/connectivity_plus_web.dart'; @@ -46,7 +46,7 @@ class Connectivity { /// case where [ConnectivityResult.none] is present. /// /// This method applies [Stream.distinct] over the received events to ensure - /// only emiting when connectivity changes. + /// only emitting when connectivity changes. Stream> get onConnectivityChanged { return _platform.onConnectivityChanged.distinct((a, b) => a.equals(b)); } diff --git a/packages/connectivity_plus/connectivity_plus_platform_interface/lib/src/enums.dart b/packages/connectivity_plus/connectivity_plus_platform_interface/lib/src/enums.dart index 5c6701006d..d279dd3cf6 100644 --- a/packages/connectivity_plus/connectivity_plus_platform_interface/lib/src/enums.dart +++ b/packages/connectivity_plus/connectivity_plus_platform_interface/lib/src/enums.dart @@ -36,3 +36,9 @@ enum ConnectivityResult { /// Other: Device is connected to an unknown network other } + +extension ConnectivityResultListX on List { + /// Returns whether any active network connection exists. + bool get hasConnectivity => + !(length == 1 && first == ConnectivityResult.none); +} diff --git a/packages/connectivity_plus/connectivity_plus_platform_interface/pubspec.yaml b/packages/connectivity_plus/connectivity_plus_platform_interface/pubspec.yaml index daba9120f0..c6892a0400 100644 --- a/packages/connectivity_plus/connectivity_plus_platform_interface/pubspec.yaml +++ b/packages/connectivity_plus/connectivity_plus_platform_interface/pubspec.yaml @@ -17,4 +17,5 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + test: ^1.31.0 flutter_lints: ">=4.0.0 <6.0.0" diff --git a/packages/connectivity_plus/connectivity_plus_platform_interface/test/src/enums_test.dart b/packages/connectivity_plus/connectivity_plus_platform_interface/test/src/enums_test.dart new file mode 100644 index 0000000000..dedae1da19 --- /dev/null +++ b/packages/connectivity_plus/connectivity_plus_platform_interface/test/src/enums_test.dart @@ -0,0 +1,22 @@ +import 'package:connectivity_plus_platform_interface/src/enums.dart'; +import 'package:test/test.dart'; + +void main() { + group('List<$ConnectivityResult>.hasConnectivity', () { + test('returns false when only none is present', () { + final result = [ConnectivityResult.none]; + expect(result.hasConnectivity, false, reason: 'list: $result'); + }); + + test('returns true when wifi is present', () { + final result = [ConnectivityResult.wifi]; + expect(result.hasConnectivity, true, reason: 'list: $result'); + }); + + test('returns true when multiple connections exist', () { + final result = ConnectivityResult.values.toList() + ..removeWhere((e) => e == ConnectivityResult.none); + expect(result.hasConnectivity, true, reason: 'list: $result'); + }); + }); +}