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;
   }
