From b3b6797a8345a7d50b9a0d7586d31dd7d7baff77 Mon Sep 17 00:00:00 2001 From: Remy Raes Date: Thu, 22 Feb 2024 17:37:40 +0100 Subject: [PATCH 1/6] build: add plugin_platform_interface dependency --- packages/wifi_scan/pubspec.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/wifi_scan/pubspec.yaml b/packages/wifi_scan/pubspec.yaml index b30bcd89..cde6e6c5 100644 --- a/packages/wifi_scan/pubspec.yaml +++ b/packages/wifi_scan/pubspec.yaml @@ -10,6 +10,7 @@ environment: dependencies: flutter: sdk: flutter + plugin_platform_interface: ^2.1.8 dev_dependencies: flutter_test: From 4114fe2b864f269c627ae849b13859ccca5d67be Mon Sep 17 00:00:00 2001 From: Remy Raes Date: Thu, 22 Feb 2024 17:42:44 +0100 Subject: [PATCH 2/6] refactor: mute main class into a platform interface --- packages/wifi_scan/example/lib/main.dart | 10 +-- packages/wifi_scan/lib/src/accesspoint.dart | 2 +- packages/wifi_scan/lib/src/can.dart | 4 +- packages/wifi_scan/lib/wifi_scan.dart | 75 +++++++++------------ packages/wifi_scan/test/wifi_scan_test.dart | 12 ++-- 5 files changed, 46 insertions(+), 57 deletions(-) diff --git a/packages/wifi_scan/example/lib/main.dart b/packages/wifi_scan/example/lib/main.dart index c309cf1a..a91a4e39 100644 --- a/packages/wifi_scan/example/lib/main.dart +++ b/packages/wifi_scan/example/lib/main.dart @@ -28,7 +28,7 @@ class _MyAppState extends State { // check if "can" startScan if (shouldCheckCan) { // check if can-startScan - final can = await WiFiScan.instance.canStartScan(); + final can = await WifiScanPlatform.instance.canStartScan(); // if can-not, then show error if (can != CanStartScan.yes) { if (mounted) kShowSnackBar(context, "Cannot start scan: $can"); @@ -37,7 +37,7 @@ class _MyAppState extends State { } // call startScan API - final result = await WiFiScan.instance.startScan(); + final result = await WifiScanPlatform.instance.startScan(); if (mounted) kShowSnackBar(context, "startScan: $result"); // reset access points. setState(() => accessPoints = []); @@ -46,7 +46,7 @@ class _MyAppState extends State { Future _canGetScannedResults(BuildContext context) async { if (shouldCheckCan) { // check if can-getScannedResults - final can = await WiFiScan.instance.canGetScannedResults(); + final can = await WifiScanPlatform.instance.canGetScannedResults(); // if can-not, then show error if (can != CanGetScannedResults.yes) { if (mounted) kShowSnackBar(context, "Cannot get scanned results: $can"); @@ -60,14 +60,14 @@ class _MyAppState extends State { Future _getScannedResults(BuildContext context) async { if (await _canGetScannedResults(context)) { // get scanned results - final results = await WiFiScan.instance.getScannedResults(); + final results = await WifiScanPlatform.instance.getScannedResults(); setState(() => accessPoints = results); } } Future _startListeningToScanResults(BuildContext context) async { if (await _canGetScannedResults(context)) { - subscription = WiFiScan.instance.onScannedResultsAvailable + subscription = WifiScanPlatform.instance.onScannedResultsAvailable .listen((result) => setState(() => accessPoints = result)); } } diff --git a/packages/wifi_scan/lib/src/accesspoint.dart b/packages/wifi_scan/lib/src/accesspoint.dart index 801c7db2..e33332c4 100644 --- a/packages/wifi_scan/lib/src/accesspoint.dart +++ b/packages/wifi_scan/lib/src/accesspoint.dart @@ -148,7 +148,7 @@ class WiFiAccessPoint { /// ranging requests. final bool? is80211mcResponder; - WiFiAccessPoint._fromMap(Map map) + WiFiAccessPoint.fromMap(Map map) : ssid = map["ssid"], bssid = map["bssid"], capabilities = map["capabilities"], diff --git a/packages/wifi_scan/lib/src/can.dart b/packages/wifi_scan/lib/src/can.dart index 8adef95a..0827007c 100644 --- a/packages/wifi_scan/lib/src/can.dart +++ b/packages/wifi_scan/lib/src/can.dart @@ -30,7 +30,7 @@ enum CanStartScan { failed, } -CanStartScan _deserializeCanStartScan(int? canCode) { +CanStartScan deserializeCanStartScan(int? canCode) { switch (canCode) { case 0: return CanStartScan.notSupported; @@ -75,7 +75,7 @@ enum CanGetScannedResults { noLocationServiceDisabled, } -CanGetScannedResults _deserializeCanGetScannedResults(int? canCode) { +CanGetScannedResults deserializeCanGetScannedResults(int? canCode) { switch (canCode) { case 0: return CanGetScannedResults.notSupported; diff --git a/packages/wifi_scan/lib/wifi_scan.dart b/packages/wifi_scan/lib/wifi_scan.dart index f52c8f5d..627fd36f 100644 --- a/packages/wifi_scan/lib/wifi_scan.dart +++ b/packages/wifi_scan/lib/wifi_scan.dart @@ -1,72 +1,69 @@ import 'dart:async'; -import 'package:flutter/services.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; + +import 'channel_platform.dart'; part 'src/accesspoint.dart'; part 'src/can.dart'; -/// The `wifi_scan` plugin entry point. -/// -/// To get a new instance, call [WiFiScan.instance]. -class WiFiScan { - WiFiScan._(); +abstract class WifiScanPlatform extends PlatformInterface { + WifiScanPlatform() : super(token: _token); + static final Object _token = Object(); - /// Singleton instance of [WiFiScan]. - static final instance = WiFiScan._(); + static WifiScanPlatform _instance = MethodChannelWifiScan(); - final _channel = const MethodChannel('wifi_scan'); - final _scannedResultsAvailableChannel = - const EventChannel('wifi_scan/onScannedResultsAvailable'); - Stream>? _onScannedResultsAvailable; + /// The default instance of [WifiScanPlatform] to use. + /// + /// Defaults to [MethodChannelWifiScan]. + static WifiScanPlatform get instance => _instance; + + /// Platform-specific plugins should set this with their own platform-specific + /// class that extends [WifiScanPlatform] when they register themselves. + // TODO(amirh): Extract common platform interface logic. + // https://github.com/flutter/flutter/issues/43368 + static set instance(WifiScanPlatform instance) { + PlatformInterface.verifyToken(instance, _token); + _instance = instance; + } /// Checks if it is ok to invoke [startScan]. /// - /// Necesearry platform requirements, like permissions dependent services, + /// Necessary platform requirements, like permissions dependent services, /// configuration, etc are checked. /// /// Set [askPermissions] flag to ask user for necessary permissions. Future canStartScan({bool askPermissions = true}) async { - final canCode = await _channel.invokeMethod("canStartScan", { - "askPermissions": askPermissions, - }); - return _deserializeCanStartScan(canCode); + throw UnimplementedError('canStartScan() has not been implemented.'); } /// Request a Wi-Fi scan. /// - /// Return value indicates if the "scan" trigger successed. + /// Return value indicates if the "scan" trigger succeeded. /// /// Should call [canStartScan] as a check before calling this method. Future startScan() async { - final isSucess = await _channel.invokeMethod("startScan"); - return isSucess!; + throw UnimplementedError('canStartScan() has not been implemented.'); } /// Checks if it is ok to invoke [getScannedResults] or [onScannedResultsAvailable]. /// - /// Necesearry platform requirements, like permissions dependent services, + /// Necessary platform requirements, like permissions dependent services, /// configuration, etc are checked. /// /// Set [askPermissions] flag to ask user for necessary permissions. Future canGetScannedResults( {bool askPermissions = true}) async { - final canCode = await _channel.invokeMethod("canGetScannedResults", { - "askPermissions": askPermissions, - }); - return _deserializeCanGetScannedResults(canCode); + throw UnimplementedError('canGetScannedResults() has not been implemented.'); } /// Get scanned access point. /// - /// This are cached accesss points from most recently performed scan. + /// This are cached access points from most recently performed scan. /// /// Should call [canGetScannedResults] as a check before calling this method. Future> getScannedResults() async { - final scannedResults = - await _channel.invokeListMethod("getScannedResults"); - return scannedResults! - .map((map) => WiFiAccessPoint._fromMap(map)) - .toList(growable: false); + throw UnimplementedError('getScannedResults() has not been implemented.'); } /// Fires whenever new scanned results are available. @@ -75,15 +72,7 @@ class WiFiScan { /// itself or trigger with [startScan]. /// /// Should call [canGetScannedResults] as a check before calling this method. - Stream> get onScannedResultsAvailable => - _onScannedResultsAvailable ??= - _scannedResultsAvailableChannel.receiveBroadcastStream().map((event) { - if (event is Error) throw event; - if (event is List) { - return event - .map((map) => WiFiAccessPoint._fromMap(map)) - .toList(growable: false); - } - return const []; - }); -} + Stream> get onScannedResultsAvailable { + throw UnimplementedError('onScannedResultsAvailable has not been implemented.'); + } +} \ No newline at end of file diff --git a/packages/wifi_scan/test/wifi_scan_test.dart b/packages/wifi_scan/test/wifi_scan_test.dart index 2eaf579b..c8e264b8 100644 --- a/packages/wifi_scan/test/wifi_scan_test.dart +++ b/packages/wifi_scan/test/wifi_scan_test.dart @@ -33,21 +33,21 @@ void main() { ]; for (int i = 0; i < canCodes.length; i++) { mockHandlers["canStartScan"] = (_) => canCodes[i]; - expect(await WiFiScan.instance.canStartScan(), enumValues[i]); + expect(await WifiScanPlatform.instance.canStartScan(), enumValues[i]); } // -ve test final badCanCodes = [null, -1, 6, 7]; for (int i = 0; i < badCanCodes.length; i++) { mockHandlers["canStartScan"] = (_) => badCanCodes[i]; - expect(() async => await WiFiScan.instance.canStartScan(), + expect(() async => await WifiScanPlatform.instance.canStartScan(), throwsUnsupportedError); } }); test('startScan', () async { mockHandlers["startScan"] = (_) => true; - expect(await WiFiScan.instance.startScan(), true); + expect(await WifiScanPlatform.instance.startScan(), true); }); test("canGetScannedResults", () async { @@ -62,14 +62,14 @@ void main() { ]; for (int i = 0; i < canCodes.length; i++) { mockHandlers["canGetScannedResults"] = (_) => canCodes[i]; - expect(await WiFiScan.instance.canGetScannedResults(), enumValues[i]); + expect(await WifiScanPlatform.instance.canGetScannedResults(), enumValues[i]); } // -ve test final badCanCodes = [null, -1, 6, 7]; for (int i = 0; i < badCanCodes.length; i++) { mockHandlers["canGetScannedResults"] = (_) => badCanCodes[i]; - expect(() async => await WiFiScan.instance.canGetScannedResults(), + expect(() async => await WifiScanPlatform.instance.canGetScannedResults(), throwsUnsupportedError); } }); @@ -93,7 +93,7 @@ void main() { "is80211mcResponder": null, } ]; - final scannedNetworks = await WiFiScan.instance.getScannedResults(); + final scannedNetworks = await WifiScanPlatform.instance.getScannedResults(); expect(scannedNetworks.length, 1); }); From 5adb467f31eb69ee3ccabd65f3debd3e236711ba Mon Sep 17 00:00:00 2001 From: Remy Raes Date: Thu, 22 Feb 2024 17:49:02 +0100 Subject: [PATCH 3/6] feat: add platform method channel implementation --- packages/wifi_scan/lib/channel_platform.dart | 54 ++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 packages/wifi_scan/lib/channel_platform.dart diff --git a/packages/wifi_scan/lib/channel_platform.dart b/packages/wifi_scan/lib/channel_platform.dart new file mode 100644 index 00000000..545ce03a --- /dev/null +++ b/packages/wifi_scan/lib/channel_platform.dart @@ -0,0 +1,54 @@ +import 'package:flutter/services.dart'; +import 'package:wifi_scan/wifi_scan.dart'; + +class MethodChannelWifiScan extends WifiScanPlatform { + final _channel = const MethodChannel('wifi_scan'); + final _scannedResultsAvailableChannel = + const EventChannel('wifi_scan/onScannedResultsAvailable'); + Stream>? _onScannedResultsAvailable; + + @override + Future canStartScan({bool askPermissions = true}) async { + final canCode = await _channel.invokeMethod("canStartScan", { + "askPermissions": askPermissions, + }); + return deserializeCanStartScan(canCode); + } + + @override + Future startScan() async { + final isSucess = await _channel.invokeMethod("startScan"); + return isSucess!; + } + + @override + Future canGetScannedResults( + {bool askPermissions = true}) async { + final canCode = await _channel.invokeMethod("canGetScannedResults", { + "askPermissions": askPermissions, + }); + return deserializeCanGetScannedResults(canCode); + } + + @override + Future> getScannedResults() async { + final scannedResults = + await _channel.invokeListMethod("getScannedResults"); + return scannedResults! + .map((map) => WiFiAccessPoint.fromMap(map)) + .toList(growable: false); + } + + @override + Stream> get onScannedResultsAvailable => + _onScannedResultsAvailable ??= + _scannedResultsAvailableChannel.receiveBroadcastStream().map((event) { + if (event is Error) throw event; + if (event is List) { + return event + .map((map) => WiFiAccessPoint.fromMap(map)) + .toList(growable: false); + } + return const []; + }); +} \ No newline at end of file From c9730e6edf963ca41f221ebfdbf49805a7f3eb99 Mon Sep 17 00:00:00 2001 From: Remy Raes Date: Fri, 23 Feb 2024 17:22:12 +0100 Subject: [PATCH 4/6] refactor: use standard names for method channel and platform interface packages --- packages/wifi_scan/lib/src/accesspoint.dart | 2 - packages/wifi_scan/lib/src/can.dart | 2 - packages/wifi_scan/lib/wifi_scan.dart | 81 +------------------ ...orm.dart => wifi_scan_method_channel.dart} | 0 .../lib/wifi_scan_platform_interface.dart | 76 +++++++++++++++++ 5 files changed, 79 insertions(+), 82 deletions(-) rename packages/wifi_scan/lib/{channel_platform.dart => wifi_scan_method_channel.dart} (100%) create mode 100644 packages/wifi_scan/lib/wifi_scan_platform_interface.dart diff --git a/packages/wifi_scan/lib/src/accesspoint.dart b/packages/wifi_scan/lib/src/accesspoint.dart index e33332c4..eaa0544f 100644 --- a/packages/wifi_scan/lib/src/accesspoint.dart +++ b/packages/wifi_scan/lib/src/accesspoint.dart @@ -1,5 +1,3 @@ -part of '../wifi_scan.dart'; - /// WiFi standards. enum WiFiStandards { /// Unknown. diff --git a/packages/wifi_scan/lib/src/can.dart b/packages/wifi_scan/lib/src/can.dart index 0827007c..86b47b64 100644 --- a/packages/wifi_scan/lib/src/can.dart +++ b/packages/wifi_scan/lib/src/can.dart @@ -1,5 +1,3 @@ -part of '../wifi_scan.dart'; - /// Result for [WiFiScan.canStartScan] method. enum CanStartScan { /// Functionality is not supported. diff --git a/packages/wifi_scan/lib/wifi_scan.dart b/packages/wifi_scan/lib/wifi_scan.dart index 627fd36f..49c8b822 100644 --- a/packages/wifi_scan/lib/wifi_scan.dart +++ b/packages/wifi_scan/lib/wifi_scan.dart @@ -1,78 +1,3 @@ -import 'dart:async'; - -import 'package:plugin_platform_interface/plugin_platform_interface.dart'; - -import 'channel_platform.dart'; - -part 'src/accesspoint.dart'; -part 'src/can.dart'; - -abstract class WifiScanPlatform extends PlatformInterface { - WifiScanPlatform() : super(token: _token); - static final Object _token = Object(); - - static WifiScanPlatform _instance = MethodChannelWifiScan(); - - /// The default instance of [WifiScanPlatform] to use. - /// - /// Defaults to [MethodChannelWifiScan]. - static WifiScanPlatform get instance => _instance; - - /// Platform-specific plugins should set this with their own platform-specific - /// class that extends [WifiScanPlatform] when they register themselves. - // TODO(amirh): Extract common platform interface logic. - // https://github.com/flutter/flutter/issues/43368 - static set instance(WifiScanPlatform instance) { - PlatformInterface.verifyToken(instance, _token); - _instance = instance; - } - - /// Checks if it is ok to invoke [startScan]. - /// - /// Necessary platform requirements, like permissions dependent services, - /// configuration, etc are checked. - /// - /// Set [askPermissions] flag to ask user for necessary permissions. - Future canStartScan({bool askPermissions = true}) async { - throw UnimplementedError('canStartScan() has not been implemented.'); - } - - /// Request a Wi-Fi scan. - /// - /// Return value indicates if the "scan" trigger succeeded. - /// - /// Should call [canStartScan] as a check before calling this method. - Future startScan() async { - throw UnimplementedError('canStartScan() has not been implemented.'); - } - - /// Checks if it is ok to invoke [getScannedResults] or [onScannedResultsAvailable]. - /// - /// Necessary platform requirements, like permissions dependent services, - /// configuration, etc are checked. - /// - /// Set [askPermissions] flag to ask user for necessary permissions. - Future canGetScannedResults( - {bool askPermissions = true}) async { - throw UnimplementedError('canGetScannedResults() has not been implemented.'); - } - - /// Get scanned access point. - /// - /// This are cached access points from most recently performed scan. - /// - /// Should call [canGetScannedResults] as a check before calling this method. - Future> getScannedResults() async { - throw UnimplementedError('getScannedResults() has not been implemented.'); - } - - /// Fires whenever new scanned results are available. - /// - /// New results are added to stream when platform performs the scan, either by - /// itself or trigger with [startScan]. - /// - /// Should call [canGetScannedResults] as a check before calling this method. - Stream> get onScannedResultsAvailable { - throw UnimplementedError('onScannedResultsAvailable has not been implemented.'); - } -} \ No newline at end of file +export 'src/accesspoint.dart'; +export 'src/can.dart'; +export 'wifi_scan_platform_interface.dart'; \ No newline at end of file diff --git a/packages/wifi_scan/lib/channel_platform.dart b/packages/wifi_scan/lib/wifi_scan_method_channel.dart similarity index 100% rename from packages/wifi_scan/lib/channel_platform.dart rename to packages/wifi_scan/lib/wifi_scan_method_channel.dart diff --git a/packages/wifi_scan/lib/wifi_scan_platform_interface.dart b/packages/wifi_scan/lib/wifi_scan_platform_interface.dart new file mode 100644 index 00000000..a548d01f --- /dev/null +++ b/packages/wifi_scan/lib/wifi_scan_platform_interface.dart @@ -0,0 +1,76 @@ +import 'dart:async'; + +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; +import 'package:wifi_scan/src/accesspoint.dart'; +import 'package:wifi_scan/src/can.dart'; +import 'package:wifi_scan/wifi_scan_method_channel.dart'; + +abstract class WifiScanPlatform extends PlatformInterface { + WifiScanPlatform() : super(token: _token); + static final Object _token = Object(); + + static WifiScanPlatform _instance = MethodChannelWifiScan(); + + /// The default instance of [WifiScanPlatform] to use. + /// + /// Defaults to [MethodChannelWifiScan]. + static WifiScanPlatform get instance => _instance; + + /// Platform-specific plugins should set this with their own platform-specific + /// class that extends [WifiScanPlatform] when they register themselves. + // TODO(amirh): Extract common platform interface logic. + // https://github.com/flutter/flutter/issues/43368 + static set instance(WifiScanPlatform instance) { + PlatformInterface.verifyToken(instance, _token); + _instance = instance; + } + + /// Checks if it is ok to invoke [startScan]. + /// + /// Necessary platform requirements, like permissions dependent services, + /// configuration, etc are checked. + /// + /// Set [askPermissions] flag to ask user for necessary permissions. + Future canStartScan({bool askPermissions = true}) async { + throw UnimplementedError('canStartScan() has not been implemented.'); + } + + /// Request a Wi-Fi scan. + /// + /// Return value indicates if the "scan" trigger succeeded. + /// + /// Should call [canStartScan] as a check before calling this method. + Future startScan() async { + throw UnimplementedError('canStartScan() has not been implemented.'); + } + + /// Checks if it is ok to invoke [getScannedResults] or [onScannedResultsAvailable]. + /// + /// Necessary platform requirements, like permissions dependent services, + /// configuration, etc are checked. + /// + /// Set [askPermissions] flag to ask user for necessary permissions. + Future canGetScannedResults( + {bool askPermissions = true}) async { + throw UnimplementedError('canGetScannedResults() has not been implemented.'); + } + + /// Get scanned access point. + /// + /// This are cached access points from most recently performed scan. + /// + /// Should call [canGetScannedResults] as a check before calling this method. + Future> getScannedResults() async { + throw UnimplementedError('getScannedResults() has not been implemented.'); + } + + /// Fires whenever new scanned results are available. + /// + /// New results are added to stream when platform performs the scan, either by + /// itself or trigger with [startScan]. + /// + /// Should call [canGetScannedResults] as a check before calling this method. + Stream> get onScannedResultsAvailable { + throw UnimplementedError('onScannedResultsAvailable has not been implemented.'); + } +} \ No newline at end of file From 08a90fc72c4f684e1666b86baa74570bb6013b23 Mon Sep 17 00:00:00 2001 From: Remy Raes Date: Tue, 27 Feb 2024 19:15:40 +0100 Subject: [PATCH 5/6] refactor: preserve "WifiScan" original package name --- packages/wifi_scan/example/lib/main.dart | 10 +++++----- .../wifi_scan/lib/wifi_scan_method_channel.dart | 2 +- .../lib/wifi_scan_platform_interface.dart | 14 +++++++------- packages/wifi_scan/test/wifi_scan_test.dart | 12 ++++++------ 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/wifi_scan/example/lib/main.dart b/packages/wifi_scan/example/lib/main.dart index a91a4e39..51321d3a 100644 --- a/packages/wifi_scan/example/lib/main.dart +++ b/packages/wifi_scan/example/lib/main.dart @@ -28,7 +28,7 @@ class _MyAppState extends State { // check if "can" startScan if (shouldCheckCan) { // check if can-startScan - final can = await WifiScanPlatform.instance.canStartScan(); + final can = await WifiScan.instance.canStartScan(); // if can-not, then show error if (can != CanStartScan.yes) { if (mounted) kShowSnackBar(context, "Cannot start scan: $can"); @@ -37,7 +37,7 @@ class _MyAppState extends State { } // call startScan API - final result = await WifiScanPlatform.instance.startScan(); + final result = await WifiScan.instance.startScan(); if (mounted) kShowSnackBar(context, "startScan: $result"); // reset access points. setState(() => accessPoints = []); @@ -46,7 +46,7 @@ class _MyAppState extends State { Future _canGetScannedResults(BuildContext context) async { if (shouldCheckCan) { // check if can-getScannedResults - final can = await WifiScanPlatform.instance.canGetScannedResults(); + final can = await WifiScan.instance.canGetScannedResults(); // if can-not, then show error if (can != CanGetScannedResults.yes) { if (mounted) kShowSnackBar(context, "Cannot get scanned results: $can"); @@ -60,14 +60,14 @@ class _MyAppState extends State { Future _getScannedResults(BuildContext context) async { if (await _canGetScannedResults(context)) { // get scanned results - final results = await WifiScanPlatform.instance.getScannedResults(); + final results = await WifiScan.instance.getScannedResults(); setState(() => accessPoints = results); } } Future _startListeningToScanResults(BuildContext context) async { if (await _canGetScannedResults(context)) { - subscription = WifiScanPlatform.instance.onScannedResultsAvailable + subscription = WifiScan.instance.onScannedResultsAvailable .listen((result) => setState(() => accessPoints = result)); } } diff --git a/packages/wifi_scan/lib/wifi_scan_method_channel.dart b/packages/wifi_scan/lib/wifi_scan_method_channel.dart index 545ce03a..cac9bf00 100644 --- a/packages/wifi_scan/lib/wifi_scan_method_channel.dart +++ b/packages/wifi_scan/lib/wifi_scan_method_channel.dart @@ -1,7 +1,7 @@ import 'package:flutter/services.dart'; import 'package:wifi_scan/wifi_scan.dart'; -class MethodChannelWifiScan extends WifiScanPlatform { +class MethodChannelWifiScan extends WifiScan { final _channel = const MethodChannel('wifi_scan'); final _scannedResultsAvailableChannel = const EventChannel('wifi_scan/onScannedResultsAvailable'); diff --git a/packages/wifi_scan/lib/wifi_scan_platform_interface.dart b/packages/wifi_scan/lib/wifi_scan_platform_interface.dart index a548d01f..8852d5a7 100644 --- a/packages/wifi_scan/lib/wifi_scan_platform_interface.dart +++ b/packages/wifi_scan/lib/wifi_scan_platform_interface.dart @@ -5,22 +5,22 @@ import 'package:wifi_scan/src/accesspoint.dart'; import 'package:wifi_scan/src/can.dart'; import 'package:wifi_scan/wifi_scan_method_channel.dart'; -abstract class WifiScanPlatform extends PlatformInterface { - WifiScanPlatform() : super(token: _token); +abstract class WifiScan extends PlatformInterface { + WifiScan() : super(token: _token); static final Object _token = Object(); - static WifiScanPlatform _instance = MethodChannelWifiScan(); + static WifiScan _instance = MethodChannelWifiScan(); - /// The default instance of [WifiScanPlatform] to use. + /// The default instance of [WifiScan] to use. /// /// Defaults to [MethodChannelWifiScan]. - static WifiScanPlatform get instance => _instance; + static WifiScan get instance => _instance; /// Platform-specific plugins should set this with their own platform-specific - /// class that extends [WifiScanPlatform] when they register themselves. + /// class that extends [WifiScan] when they register themselves. // TODO(amirh): Extract common platform interface logic. // https://github.com/flutter/flutter/issues/43368 - static set instance(WifiScanPlatform instance) { + static set instance(WifiScan instance) { PlatformInterface.verifyToken(instance, _token); _instance = instance; } diff --git a/packages/wifi_scan/test/wifi_scan_test.dart b/packages/wifi_scan/test/wifi_scan_test.dart index c8e264b8..3b898e8f 100644 --- a/packages/wifi_scan/test/wifi_scan_test.dart +++ b/packages/wifi_scan/test/wifi_scan_test.dart @@ -33,21 +33,21 @@ void main() { ]; for (int i = 0; i < canCodes.length; i++) { mockHandlers["canStartScan"] = (_) => canCodes[i]; - expect(await WifiScanPlatform.instance.canStartScan(), enumValues[i]); + expect(await WifiScan.instance.canStartScan(), enumValues[i]); } // -ve test final badCanCodes = [null, -1, 6, 7]; for (int i = 0; i < badCanCodes.length; i++) { mockHandlers["canStartScan"] = (_) => badCanCodes[i]; - expect(() async => await WifiScanPlatform.instance.canStartScan(), + expect(() async => await WifiScan.instance.canStartScan(), throwsUnsupportedError); } }); test('startScan', () async { mockHandlers["startScan"] = (_) => true; - expect(await WifiScanPlatform.instance.startScan(), true); + expect(await WifiScan.instance.startScan(), true); }); test("canGetScannedResults", () async { @@ -62,14 +62,14 @@ void main() { ]; for (int i = 0; i < canCodes.length; i++) { mockHandlers["canGetScannedResults"] = (_) => canCodes[i]; - expect(await WifiScanPlatform.instance.canGetScannedResults(), enumValues[i]); + expect(await WifiScan.instance.canGetScannedResults(), enumValues[i]); } // -ve test final badCanCodes = [null, -1, 6, 7]; for (int i = 0; i < badCanCodes.length; i++) { mockHandlers["canGetScannedResults"] = (_) => badCanCodes[i]; - expect(() async => await WifiScanPlatform.instance.canGetScannedResults(), + expect(() async => await WifiScan.instance.canGetScannedResults(), throwsUnsupportedError); } }); @@ -93,7 +93,7 @@ void main() { "is80211mcResponder": null, } ]; - final scannedNetworks = await WifiScanPlatform.instance.getScannedResults(); + final scannedNetworks = await WifiScan.instance.getScannedResults(); expect(scannedNetworks.length, 1); }); From ec396cd909e6e594cc5ff3c6405b6e4e0b61813c Mon Sep 17 00:00:00 2001 From: Remy Raes Date: Tue, 27 Feb 2024 19:17:58 +0100 Subject: [PATCH 6/6] refactor: preserve "WiFiScan" original package name (with uppercased f) --- packages/wifi_scan/example/lib/main.dart | 10 +++++----- .../wifi_scan/lib/wifi_scan_method_channel.dart | 2 +- .../lib/wifi_scan_platform_interface.dart | 14 +++++++------- packages/wifi_scan/test/wifi_scan_test.dart | 12 ++++++------ 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/wifi_scan/example/lib/main.dart b/packages/wifi_scan/example/lib/main.dart index 51321d3a..c309cf1a 100644 --- a/packages/wifi_scan/example/lib/main.dart +++ b/packages/wifi_scan/example/lib/main.dart @@ -28,7 +28,7 @@ class _MyAppState extends State { // check if "can" startScan if (shouldCheckCan) { // check if can-startScan - final can = await WifiScan.instance.canStartScan(); + final can = await WiFiScan.instance.canStartScan(); // if can-not, then show error if (can != CanStartScan.yes) { if (mounted) kShowSnackBar(context, "Cannot start scan: $can"); @@ -37,7 +37,7 @@ class _MyAppState extends State { } // call startScan API - final result = await WifiScan.instance.startScan(); + final result = await WiFiScan.instance.startScan(); if (mounted) kShowSnackBar(context, "startScan: $result"); // reset access points. setState(() => accessPoints = []); @@ -46,7 +46,7 @@ class _MyAppState extends State { Future _canGetScannedResults(BuildContext context) async { if (shouldCheckCan) { // check if can-getScannedResults - final can = await WifiScan.instance.canGetScannedResults(); + final can = await WiFiScan.instance.canGetScannedResults(); // if can-not, then show error if (can != CanGetScannedResults.yes) { if (mounted) kShowSnackBar(context, "Cannot get scanned results: $can"); @@ -60,14 +60,14 @@ class _MyAppState extends State { Future _getScannedResults(BuildContext context) async { if (await _canGetScannedResults(context)) { // get scanned results - final results = await WifiScan.instance.getScannedResults(); + final results = await WiFiScan.instance.getScannedResults(); setState(() => accessPoints = results); } } Future _startListeningToScanResults(BuildContext context) async { if (await _canGetScannedResults(context)) { - subscription = WifiScan.instance.onScannedResultsAvailable + subscription = WiFiScan.instance.onScannedResultsAvailable .listen((result) => setState(() => accessPoints = result)); } } diff --git a/packages/wifi_scan/lib/wifi_scan_method_channel.dart b/packages/wifi_scan/lib/wifi_scan_method_channel.dart index cac9bf00..a3bc68a9 100644 --- a/packages/wifi_scan/lib/wifi_scan_method_channel.dart +++ b/packages/wifi_scan/lib/wifi_scan_method_channel.dart @@ -1,7 +1,7 @@ import 'package:flutter/services.dart'; import 'package:wifi_scan/wifi_scan.dart'; -class MethodChannelWifiScan extends WifiScan { +class MethodChannelWifiScan extends WiFiScan { final _channel = const MethodChannel('wifi_scan'); final _scannedResultsAvailableChannel = const EventChannel('wifi_scan/onScannedResultsAvailable'); diff --git a/packages/wifi_scan/lib/wifi_scan_platform_interface.dart b/packages/wifi_scan/lib/wifi_scan_platform_interface.dart index 8852d5a7..7e3c8b53 100644 --- a/packages/wifi_scan/lib/wifi_scan_platform_interface.dart +++ b/packages/wifi_scan/lib/wifi_scan_platform_interface.dart @@ -5,22 +5,22 @@ import 'package:wifi_scan/src/accesspoint.dart'; import 'package:wifi_scan/src/can.dart'; import 'package:wifi_scan/wifi_scan_method_channel.dart'; -abstract class WifiScan extends PlatformInterface { - WifiScan() : super(token: _token); +abstract class WiFiScan extends PlatformInterface { + WiFiScan() : super(token: _token); static final Object _token = Object(); - static WifiScan _instance = MethodChannelWifiScan(); + static WiFiScan _instance = MethodChannelWifiScan(); - /// The default instance of [WifiScan] to use. + /// The default instance of [WiFiScan] to use. /// /// Defaults to [MethodChannelWifiScan]. - static WifiScan get instance => _instance; + static WiFiScan get instance => _instance; /// Platform-specific plugins should set this with their own platform-specific - /// class that extends [WifiScan] when they register themselves. + /// class that extends [WiFiScan] when they register themselves. // TODO(amirh): Extract common platform interface logic. // https://github.com/flutter/flutter/issues/43368 - static set instance(WifiScan instance) { + static set instance(WiFiScan instance) { PlatformInterface.verifyToken(instance, _token); _instance = instance; } diff --git a/packages/wifi_scan/test/wifi_scan_test.dart b/packages/wifi_scan/test/wifi_scan_test.dart index 3b898e8f..2eaf579b 100644 --- a/packages/wifi_scan/test/wifi_scan_test.dart +++ b/packages/wifi_scan/test/wifi_scan_test.dart @@ -33,21 +33,21 @@ void main() { ]; for (int i = 0; i < canCodes.length; i++) { mockHandlers["canStartScan"] = (_) => canCodes[i]; - expect(await WifiScan.instance.canStartScan(), enumValues[i]); + expect(await WiFiScan.instance.canStartScan(), enumValues[i]); } // -ve test final badCanCodes = [null, -1, 6, 7]; for (int i = 0; i < badCanCodes.length; i++) { mockHandlers["canStartScan"] = (_) => badCanCodes[i]; - expect(() async => await WifiScan.instance.canStartScan(), + expect(() async => await WiFiScan.instance.canStartScan(), throwsUnsupportedError); } }); test('startScan', () async { mockHandlers["startScan"] = (_) => true; - expect(await WifiScan.instance.startScan(), true); + expect(await WiFiScan.instance.startScan(), true); }); test("canGetScannedResults", () async { @@ -62,14 +62,14 @@ void main() { ]; for (int i = 0; i < canCodes.length; i++) { mockHandlers["canGetScannedResults"] = (_) => canCodes[i]; - expect(await WifiScan.instance.canGetScannedResults(), enumValues[i]); + expect(await WiFiScan.instance.canGetScannedResults(), enumValues[i]); } // -ve test final badCanCodes = [null, -1, 6, 7]; for (int i = 0; i < badCanCodes.length; i++) { mockHandlers["canGetScannedResults"] = (_) => badCanCodes[i]; - expect(() async => await WifiScan.instance.canGetScannedResults(), + expect(() async => await WiFiScan.instance.canGetScannedResults(), throwsUnsupportedError); } }); @@ -93,7 +93,7 @@ void main() { "is80211mcResponder": null, } ]; - final scannedNetworks = await WifiScan.instance.getScannedResults(); + final scannedNetworks = await WiFiScan.instance.getScannedResults(); expect(scannedNetworks.length, 1); });