diff --git a/packages/android_alarm_manager/CHANGELOG.md b/packages/android_alarm_manager/CHANGELOG.md
index df5b7a2..b06f23c 100644
--- a/packages/android_alarm_manager/CHANGELOG.md
+++ b/packages/android_alarm_manager/CHANGELOG.md
@@ -1,3 +1,7 @@
+##  2.0.0-nullsafety
+
+* Migrate to null safety.
+
 ## 0.4.5+20
 
 * Update the example app: remove the deprecated `RaisedButton` and `FlatButton` widgets.
diff --git a/packages/android_alarm_manager/README.md b/packages/android_alarm_manager/README.md
index cf02bf6..5a8a55e 100644
--- a/packages/android_alarm_manager/README.md
+++ b/packages/android_alarm_manager/README.md
@@ -5,13 +5,6 @@
 A Flutter plugin for accessing the Android AlarmManager service, and running
 Dart code in the background when alarms fire.
 
-**Please set your constraint to `android_alarm_manager: '>=0.4.y+x <2.0.0'`**
-
-## Backward compatible 1.0.0 version is coming
-The plugin has reached a stable API, we guarantee that version `1.0.0` will be backward compatible with `0.4.y+z`.
-Please use `android_alarm_manager: '>=0.4.y+x <2.0.0'` as your dependency constraint to allow a smoother ecosystem migration.
-For more details see: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0
-
 ## Getting Started
 
 After importing this plugin to your project as usual, add the following to your
@@ -109,17 +102,12 @@
 **Note:** Not calling `AlarmService.setPluginRegistrant` will result in an exception being
 thrown when an alarm eventually fires.
 
-### Flutter Android Embedding V2 (Flutter Version >= 1.12)
+### Flutter Android Embedding V2
 
 For the Flutter Android Embedding V2, plugins are registered with the background
 isolate via reflection so `AlarmService.setPluginRegistrant` does not need to be
 called.
 
-**NOTE: this plugin is not completely compatible with the V2 embedding on
-Flutter versions < 1.12 as the background isolate will not automatically
-register plugins. This can be resolved by running `flutter upgrade` to upgrade
-to the latest Flutter version.**
-
 For help getting started with Flutter, view our online
 [documentation](https://flutter.dev/).
 
diff --git a/packages/android_alarm_manager/example/integration_test/android_alarm_manager_test.dart b/packages/android_alarm_manager/example/integration_test/android_alarm_manager_test.dart
index 4d2e320..4d53a5a 100644
--- a/packages/android_alarm_manager/example/integration_test/android_alarm_manager_test.dart
+++ b/packages/android_alarm_manager/example/integration_test/android_alarm_manager_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. 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:async';
 import 'dart:io';
 import 'package:android_alarm_manager_example/main.dart' as app;
diff --git a/packages/android_alarm_manager/example/lib/main.dart b/packages/android_alarm_manager/example/lib/main.dart
index ac27fec..dc3779c 100644
--- a/packages/android_alarm_manager/example/lib/main.dart
+++ b/packages/android_alarm_manager/example/lib/main.dart
@@ -22,7 +22,7 @@
 final ReceivePort port = ReceivePort();
 
 /// Global [SharedPreferences] object.
-SharedPreferences prefs;
+late SharedPreferences prefs;
 
 Future<void> main() async {
   // TODO(bkonyi): uncomment
@@ -54,7 +54,7 @@
 }
 
 class _AlarmHomePage extends StatefulWidget {
-  _AlarmHomePage({Key key, this.title}) : super(key: key);
+  _AlarmHomePage({Key? key, required this.title}) : super(key: key);
   final String title;
 
   @override
@@ -86,7 +86,7 @@
   }
 
   // The background
-  static SendPort uiSendPort;
+  static SendPort? uiSendPort;
 
   // The callback for our alarm
   static Future<void> callback() async {
@@ -94,7 +94,7 @@
 
     // Get the previous cached count and increment it.
     final prefs = await SharedPreferences.getInstance();
-    int currentCount = prefs.getInt(countKey);
+    int currentCount = prefs.getInt(countKey) ?? 0;
     await prefs.setInt(countKey, currentCount + 1);
 
     // This will be null if we're running in the background.
@@ -140,7 +140,7 @@
                 await AndroidAlarmManager.oneShot(
                   const Duration(seconds: 5),
                   // Ensure we have a unique alarm ID.
-                  Random().nextInt(pow(2, 31)),
+                  Random().nextInt(pow(2, 31).toInt()),
                   callback,
                   exact: true,
                   wakeup: true,
diff --git a/packages/android_alarm_manager/example/pubspec.yaml b/packages/android_alarm_manager/example/pubspec.yaml
index 6fce346..029a604 100644
--- a/packages/android_alarm_manager/example/pubspec.yaml
+++ b/packages/android_alarm_manager/example/pubspec.yaml
@@ -11,10 +11,10 @@
     # The example app is bundled with the plugin so we use a path dependency on
     # the parent directory to use the current plugin's version.
     path: ../
-  shared_preferences: ^0.5.6
+  shared_preferences: ^2.0.0-nullsafety
   integration_test:
     path: ../../integration_test
-  path_provider: ^1.3.1
+  path_provider: ^2.0.0-nullsafety
 
 dev_dependencies:
   espresso: ^0.0.1+3
@@ -28,5 +28,5 @@
   uses-material-design: true
 
 environment:
-  sdk: ">=2.1.0 <3.0.0"
+  sdk: '>=2.12.0-0 <3.0.0'
   flutter: ">=1.12.13+hotfix.5"
diff --git a/packages/android_alarm_manager/example/test_driver/integration_test.dart b/packages/android_alarm_manager/example/test_driver/integration_test.dart
index ed54518..4e78d04 100644
--- a/packages/android_alarm_manager/example/test_driver/integration_test.dart
+++ b/packages/android_alarm_manager/example/test_driver/integration_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. 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:async';
 import 'dart:convert';
 import 'dart:io';
diff --git a/packages/android_alarm_manager/lib/android_alarm_manager.dart b/packages/android_alarm_manager/lib/android_alarm_manager.dart
index b8afa13..218959b 100644
--- a/packages/android_alarm_manager/lib/android_alarm_manager.dart
+++ b/packages/android_alarm_manager/lib/android_alarm_manager.dart
@@ -31,7 +31,7 @@
 
     // PluginUtilities.getCallbackFromHandle performs a lookup based on the
     // callback handle and returns a tear-off of the original callback.
-    final Function closure = PluginUtilities.getCallbackFromHandle(handle);
+    final Function? closure = PluginUtilities.getCallbackFromHandle(handle);
 
     if (closure == null) {
       print('Fatal: could not find callback');
@@ -56,7 +56,7 @@
 // A lambda that returns the current instant in the form of a [DateTime].
 typedef DateTime _Now();
 // A lambda that gets the handle for the given [callback].
-typedef CallbackHandle _GetCallbackHandle(Function callback);
+typedef CallbackHandle? _GetCallbackHandle(Function callback);
 
 /// A Flutter plugin for registering Dart callbacks with the Android
 /// AlarmManager service.
@@ -77,7 +77,7 @@
   /// the plugin.
   @visibleForTesting
   static void setTestOverides(
-      {_Now now, _GetCallbackHandle getCallbackHandle}) {
+      {_Now? now, _GetCallbackHandle? getCallbackHandle}) {
     _now = (now ?? _now);
     _getCallbackHandle = (getCallbackHandle ?? _getCallbackHandle);
   }
@@ -88,12 +88,12 @@
   /// Returns a [Future] that resolves to `true` on success and `false` on
   /// failure.
   static Future<bool> initialize() async {
-    final CallbackHandle handle =
+    final CallbackHandle? handle =
         _getCallbackHandle(_alarmManagerCallbackDispatcher);
     if (handle == null) {
       return false;
     }
-    final bool r = await _channel.invokeMethod<bool>(
+    final bool? r = await _channel.invokeMethod<bool>(
         'AlarmService.start', <dynamic>[handle.toRawHandle()]);
     return r ?? false;
   }
@@ -207,11 +207,11 @@
     assert(callback is Function() || callback is Function(int));
     assert(id.bitLength < 32);
     final int startMillis = time.millisecondsSinceEpoch;
-    final CallbackHandle handle = _getCallbackHandle(callback);
+    final CallbackHandle? handle = _getCallbackHandle(callback);
     if (handle == null) {
       return false;
     }
-    final bool r =
+    final bool? r =
         await _channel.invokeMethod<bool>('Alarm.oneShotAt', <dynamic>[
       id,
       alarmClock,
@@ -222,7 +222,7 @@
       rescheduleOnReboot,
       handle.toRawHandle(),
     ]);
-    return (r == null) ? false : r;
+    return r ?? false;
   }
 
   /// Schedules a repeating timer to run `callback` with period `duration`.
@@ -262,7 +262,7 @@
     Duration duration,
     int id,
     Function callback, {
-    DateTime startAt,
+    DateTime? startAt,
     bool exact = false,
     bool wakeup = false,
     bool rescheduleOnReboot = false,
@@ -274,11 +274,11 @@
     final int period = duration.inMilliseconds;
     final int first =
         startAt != null ? startAt.millisecondsSinceEpoch : now + period;
-    final CallbackHandle handle = _getCallbackHandle(callback);
+    final CallbackHandle? handle = _getCallbackHandle(callback);
     if (handle == null) {
       return false;
     }
-    final bool r = await _channel.invokeMethod<bool>(
+    final bool? r = await _channel.invokeMethod<bool>(
         'Alarm.periodic', <dynamic>[
       id,
       exact,
@@ -288,7 +288,7 @@
       rescheduleOnReboot,
       handle.toRawHandle()
     ]);
-    return (r == null) ? false : r;
+    return r ?? false;
   }
 
   /// Cancels a timer.
@@ -299,8 +299,8 @@
   /// Returns a [Future] that resolves to `true` on success and `false` on
   /// failure.
   static Future<bool> cancel(int id) async {
-    final bool r =
+    final bool? r =
         await _channel.invokeMethod<bool>('Alarm.cancel', <dynamic>[id]);
-    return (r == null) ? false : r;
+    return r ?? false;
   }
 }
diff --git a/packages/android_alarm_manager/pubspec.yaml b/packages/android_alarm_manager/pubspec.yaml
index d1771c0..ab19372 100644
--- a/packages/android_alarm_manager/pubspec.yaml
+++ b/packages/android_alarm_manager/pubspec.yaml
@@ -1,10 +1,7 @@
 name: android_alarm_manager
 description: Flutter plugin for accessing the Android AlarmManager service, and
   running Dart code in the background when alarms fire.
-# 0.4.y+z is compatible with 1.0.0, if you land a breaking change bump
-# the version to 2.0.0.
-# See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0
-version: 0.4.5+20
+version: 2.0.0-nullsafety
 homepage: https://github.com/flutter/plugins/tree/master/packages/android_alarm_manager
 
 dependencies:
@@ -24,5 +21,5 @@
         pluginClass: AndroidAlarmManagerPlugin
 
 environment:
-  sdk: ">=2.1.0 <3.0.0"
+  sdk: '>=2.12.0-0 <3.0.0'
   flutter: ">=1.12.13+hotfix.5"
diff --git a/script/nnbd_plugins.sh b/script/nnbd_plugins.sh
index 492c8ad..5a54a7f 100644
--- a/script/nnbd_plugins.sh
+++ b/script/nnbd_plugins.sh
@@ -5,6 +5,7 @@
 # null-safe is available on stable.
 
 readonly NNBD_PLUGINS_LIST=(
+  "android_alarm_manager"
   "android_intent"
   "battery"
   "camera"
@@ -36,7 +37,6 @@
 # building the all plugins app. This list should be kept empty.
 
 readonly NON_NNBD_PLUGINS_LIST=(
-  # "android_alarm_manager"
   "camera"
   # "google_maps_flutter"
   # "image_picker"
