[wifi_info_flutter] Migrate to null safety (#3425)

diff --git a/packages/wifi_info_flutter/wifi_info_flutter/CHANGELOG.md b/packages/wifi_info_flutter/wifi_info_flutter/CHANGELOG.md
index fa68eed..c98140e 100644
--- a/packages/wifi_info_flutter/wifi_info_flutter/CHANGELOG.md
+++ b/packages/wifi_info_flutter/wifi_info_flutter/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.0-nullsafety
+
+* Migrate to null safety.
+
 ## 1.0.4
 
 * Android: Add Log warning for unsatisfied requirement(s) in Android P or higher.
diff --git a/packages/wifi_info_flutter/wifi_info_flutter/integration_test/wifi_info_test.dart b/packages/wifi_info_flutter/wifi_info_flutter/integration_test/wifi_info_test.dart
index 103dc54..4760b88 100644
--- a/packages/wifi_info_flutter/wifi_info_flutter/integration_test/wifi_info_test.dart
+++ b/packages/wifi_info_flutter/wifi_info_flutter/integration_test/wifi_info_test.dart
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// @dart = 2.9
+
 import 'dart:io';
 import 'package:integration_test/integration_test.dart';
 import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/wifi_info_flutter/wifi_info_flutter/lib/wifi_info_flutter.dart b/packages/wifi_info_flutter/wifi_info_flutter/lib/wifi_info_flutter.dart
index 1183bf6..a2a69d1 100644
--- a/packages/wifi_info_flutter/wifi_info_flutter/lib/wifi_info_flutter.dart
+++ b/packages/wifi_info_flutter/wifi_info_flutter/lib/wifi_info_flutter.dart
@@ -13,19 +13,14 @@
 
 /// Checks WI-FI status and more.
 class WifiInfo {
+  WifiInfo._();
+
   /// Constructs a singleton instance of [WifiInfo].
   ///
   /// [WifiInfo] is designed to work as a singleton.
-  factory WifiInfo() {
-    if (_singleton == null) {
-      _singleton = WifiInfo._();
-    }
-    return _singleton;
-  }
+  factory WifiInfo() => _singleton;
 
-  WifiInfo._();
-
-  static WifiInfo _singleton;
+  static final WifiInfo _singleton = WifiInfo._();
 
   static WifiInfoFlutterPlatform get _platform =>
       WifiInfoFlutterPlatform.instance;
@@ -36,7 +31,7 @@
   ///
   /// From android 8.0 onwards the GPS must be ON (high accuracy)
   /// in order to be able to obtain the SSID.
-  Future<String> getWifiName() {
+  Future<String?> getWifiName() {
     return _platform.getWifiName();
   }
 
@@ -46,12 +41,12 @@
   ///
   /// From Android 8.0 onwards the GPS must be ON (high accuracy)
   /// in order to be able to obtain the BSSID.
-  Future<String> getWifiBSSID() {
+  Future<String?> getWifiBSSID() {
     return _platform.getWifiBSSID();
   }
 
   /// Obtains the IP address of the connected wifi network
-  Future<String> getWifiIP() {
+  Future<String?> getWifiIP() {
     return _platform.getWifiIP();
   }
 
diff --git a/packages/wifi_info_flutter/wifi_info_flutter/pubspec.yaml b/packages/wifi_info_flutter/wifi_info_flutter/pubspec.yaml
index b8306a0..0fbc278 100644
--- a/packages/wifi_info_flutter/wifi_info_flutter/pubspec.yaml
+++ b/packages/wifi_info_flutter/wifi_info_flutter/pubspec.yaml
@@ -1,20 +1,18 @@
 name: wifi_info_flutter
 description: A new flutter plugin project.
-version: 1.0.4
+version: 2.0.0-nullsafety
 homepage: https://github.com/flutter/plugins/tree/master/packages/wifi_info_flutter/wifi_info_flutter
 
 environment:
-  sdk: ">=2.7.0 <3.0.0"
+  sdk: ">=2.12.0-0 <3.0.0"
   flutter: ">=1.20.0"
 
 dependencies:
   flutter:
     sdk: flutter
-  wifi_info_flutter_platform_interface: ^1.0.0
+  wifi_info_flutter_platform_interface: ^2.0.0-nullsafety
 
 dev_dependencies:
-  mockito: ^4.1.1
-  plugin_platform_interface: ^1.0.0
   integration_test:
     path: ../../integration_test
   flutter_test:
diff --git a/packages/wifi_info_flutter/wifi_info_flutter/test/wifi_info_flutter_test.dart b/packages/wifi_info_flutter/wifi_info_flutter/test/wifi_info_flutter_test.dart
index a3a5517..19e84f6 100644
--- a/packages/wifi_info_flutter/wifi_info_flutter/test/wifi_info_flutter_test.dart
+++ b/packages/wifi_info_flutter/wifi_info_flutter/test/wifi_info_flutter_test.dart
@@ -2,13 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:wifi_info_flutter/wifi_info_flutter.dart';
 import 'package:wifi_info_flutter_platform_interface/wifi_info_flutter_platform_interface.dart';
 import 'package:flutter_test/flutter_test.dart';
-import 'package:plugin_platform_interface/plugin_platform_interface.dart';
-import 'package:mockito/mockito.dart';
 
 const String kWifiNameResult = '1337wifi';
 const String kWifiBSSIDResult = 'c0:ff:33:c0:d3:55';
@@ -20,7 +16,7 @@
 
 void main() {
   group('$WifiInfo', () {
-    WifiInfo wifiInfo;
+    late WifiInfo wifiInfo;
     MockWifiInfoFlutterPlatform fakePlatform;
 
     setUp(() async {
@@ -30,17 +26,17 @@
     });
 
     test('getWifiName', () async {
-      String result = await wifiInfo.getWifiName();
+      String? result = await wifiInfo.getWifiName();
       expect(result, kWifiNameResult);
     });
 
     test('getWifiBSSID', () async {
-      String result = await wifiInfo.getWifiBSSID();
+      String? result = await wifiInfo.getWifiBSSID();
       expect(result, kWifiBSSIDResult);
     });
 
     test('getWifiIP', () async {
-      String result = await wifiInfo.getWifiIP();
+      String? result = await wifiInfo.getWifiIP();
       expect(result, kWifiIpAddressResult);
     });
 
@@ -58,27 +54,30 @@
   });
 }
 
-class MockWifiInfoFlutterPlatform extends Mock
-    with MockPlatformInterfaceMixin
-    implements WifiInfoFlutterPlatform {
-  Future<String> getWifiName() async {
+class MockWifiInfoFlutterPlatform extends WifiInfoFlutterPlatform {
+  @override
+  Future<String?> getWifiName() async {
     return kWifiNameResult;
   }
 
-  Future<String> getWifiBSSID() async {
+  @override
+  Future<String?> getWifiBSSID() async {
     return kWifiBSSIDResult;
   }
 
-  Future<String> getWifiIP() async {
+  @override
+  Future<String?> getWifiIP() async {
     return kWifiIpAddressResult;
   }
 
+  @override
   Future<LocationAuthorizationStatus> requestLocationServiceAuthorization({
     bool requestAlwaysLocationUsage = false,
   }) async {
     return kRequestLocationResult;
   }
 
+  @override
   Future<LocationAuthorizationStatus> getLocationServiceAuthorization() async {
     return kGetLocationResult;
   }