Migrate ios_add2app_life_cycle to nullsafety (#80617)

diff --git a/dev/integration_tests/ios_add2app_life_cycle/flutterapp/lib/main.dart b/dev/integration_tests/ios_add2app_life_cycle/flutterapp/lib/main.dart
index a64dcc9..b831bcd 100644
--- a/dev/integration_tests/ios_add2app_life_cycle/flutterapp/lib/main.dart
+++ b/dev/integration_tests/ios_add2app_life_cycle/flutterapp/lib/main.dart
@@ -8,14 +8,14 @@
 import 'package:flutter/services.dart';
 import 'package:collection/collection.dart';
 
-VoidCallback originalSemanticsListener;
+VoidCallback? originalSemanticsListener;
 
 void main() {
   WidgetsFlutterBinding.ensureInitialized();
   // Disconnects semantics listener for testing purposes.
   originalSemanticsListener = ui.window.onSemanticsEnabledChanged;
   ui.window.onSemanticsEnabledChanged = null;
-  RendererBinding.instance.setSemanticsEnabled(false);
+  RendererBinding.instance?.setSemanticsEnabled(false);
   // If the test passes, LifeCycleSpy will rewire the semantics listener back.
   runApp(const LifeCycleSpy());
 }
@@ -28,7 +28,7 @@
 ///
 /// Rewiring semantics is a signal to native IOS test that the test has passed.
 class LifeCycleSpy extends StatefulWidget {
-  const LifeCycleSpy({Key key}) : super(key: key);
+  const LifeCycleSpy({Key? key}) : super(key: key);
 
   @override
   _LifeCycleSpyState createState() => _LifeCycleSpyState();
@@ -40,36 +40,36 @@
     AppLifecycleState.inactive,
     AppLifecycleState.resumed,
   ];
-  List<AppLifecycleState> _actualLifeCycleSequence;
+  List<AppLifecycleState?>? _actualLifeCycleSequence;
 
   @override
   void initState(){
     super.initState();
-    WidgetsBinding.instance.addObserver(this);
-    _actualLifeCycleSequence =  <AppLifecycleState>[
-      ServicesBinding.instance.lifecycleState
+    WidgetsBinding.instance?.addObserver(this);
+    _actualLifeCycleSequence =  <AppLifecycleState?>[
+      ServicesBinding.instance?.lifecycleState
     ];
   }
 
   @override
   void dispose() {
-    WidgetsBinding.instance.removeObserver(this);
+    WidgetsBinding.instance?.removeObserver(this);
     super.dispose();
   }
 
   @override
   void didChangeAppLifecycleState(AppLifecycleState state) {
     setState(() {
-      _actualLifeCycleSequence = List<AppLifecycleState>.from(_actualLifeCycleSequence);
-      _actualLifeCycleSequence.add(state);
+      _actualLifeCycleSequence = List<AppLifecycleState>.from(_actualLifeCycleSequence!);
+      _actualLifeCycleSequence?.add(state);
     });
   }
 
   @override
   Widget build(BuildContext context) {
-    if (const ListEquality<AppLifecycleState>().equals(_actualLifeCycleSequence, _expectedLifeCycleSequence)) {
+    if (const ListEquality<AppLifecycleState?>().equals(_actualLifeCycleSequence, _expectedLifeCycleSequence)) {
       // Rewires the semantics harness if test passes.
-      RendererBinding.instance.setSemanticsEnabled(true);
+      RendererBinding.instance?.setSemanticsEnabled(true);
       ui.window.onSemanticsEnabledChanged = originalSemanticsListener;
     }
     return const MaterialApp(
diff --git a/dev/integration_tests/ios_add2app_life_cycle/flutterapp/pubspec.yaml b/dev/integration_tests/ios_add2app_life_cycle/flutterapp/pubspec.yaml
index e263902..dc28689 100644
--- a/dev/integration_tests/ios_add2app_life_cycle/flutterapp/pubspec.yaml
+++ b/dev/integration_tests/ios_add2app_life_cycle/flutterapp/pubspec.yaml
@@ -14,7 +14,7 @@
 version: 1.0.0+1
 
 environment:
-  sdk: ">=2.0.0-dev.68.0 <3.0.0"
+  sdk: ">=2.12.0 <3.0.0"
 
 dependencies:
   flutter: