diff --git a/dev/bots/analyze-sample-code.dart b/dev/bots/analyze-sample-code.dart
index 40d3b3f..b783b0f 100644
--- a/dev/bots/analyze-sample-code.dart
+++ b/dev/bots/analyze-sample-code.dart
@@ -8,7 +8,6 @@
 //   bin/cache/dart-sdk/bin/dart dev/bots/analyze-sample-code.dart
 
 import 'dart:io';
-import 'dart:isolate';
 
 import 'package:args/args.dart';
 import 'package:path/path.dart' as path;
@@ -203,6 +202,8 @@
     return _headers ??= <String>[
       '// generated code',
       '// ignore_for_file: unused_import',
+      '// ignore_for_file: unused_element',
+      '// ignore_for_file: unused_local_variable',
       "import 'dart:async';",
       "import 'dart:convert';",
       "import 'dart:math' as math;",
@@ -547,8 +548,9 @@
   }
 
   /// Invokes the analyzer on the given [directory] and returns the stdout.
-  List<String> _runAnalyzer(Directory directory) {
-    print('Starting analysis of code samples.');
+  List<String> _runAnalyzer(Directory directory, {bool silent}) {
+    if (!silent)
+      print('Starting analysis of code samples.');
     _createConfigurationFiles(directory);
     final ProcessResult result = Process.runSync(
       _flutter,
@@ -570,7 +572,7 @@
         stderr.removeLast();
       }
     }
-    if (stderr.isNotEmpty) {
+    if (stderr.isNotEmpty && stderr.any((String line) => line.isNotEmpty)) {
       throw 'Cannot analyze dartdocs; unexpected error output:\n$stderr';
     }
     if (stdout.isNotEmpty && stdout.first == 'Building flutter tool...') {
@@ -588,9 +590,10 @@
   Map<String, List<AnalysisError>> _analyze(
     Directory directory,
     Map<String, Section> sections,
-    Map<String, Sample> samples,
-  ) {
-    final List<String> errors = _runAnalyzer(directory);
+    Map<String, Sample> samples, {
+    bool silent = false,
+  }) {
+    final List<String> errors = _runAnalyzer(directory, silent: silent);
     final Map<String, List<AnalysisError>> analysisErrors = <String, List<AnalysisError>>{};
     void addAnalysisError(File file, AnalysisError error) {
       if (analysisErrors.containsKey(file.path)) {
@@ -621,10 +624,6 @@
         final String errorCode = parts[6];
         final int lineNumber = int.parse(line, radix: 10) - (isSnippet ? headerLength : 0);
         final int columnNumber = int.parse(column, radix: 10);
-        if (lineNumber < 0 && errorCode == 'unused_import') {
-          // We don't care about unused imports.
-          continue;
-        }
 
         // For when errors occur outside of the things we're trying to analyze.
         if (!isSnippet && !isSample) {
@@ -649,10 +648,6 @@
           );
         }
 
-        if (errorCode == 'unused_element' || errorCode == 'unused_local_variable') {
-          // We don't really care if sample code isn't used!
-          continue;
-        }
         if (isSample) {
           addAnalysisError(
             file,
@@ -739,7 +734,8 @@
       _exitCode = 0;
     }
     if (_exitCode == 0) {
-      print('No analysis errors in samples!');
+      if (!silent)
+        print('No analysis errors in samples!');
       assert(analysisErrors.isEmpty);
     }
     return analysisErrors;
@@ -960,24 +956,28 @@
     print('Using temp dir ${tempDir.path}');
   }
 
+  void analyze(SampleChecker checker, File file) {
+    final Map<String, Section> sections = <String, Section>{};
+    final Map<String, Sample> snippets = <String, Sample>{};
+    checker._extractSamples(<File>[file], silent: true, sectionMap: sections, sampleMap: snippets);
+    final Map<String, List<AnalysisError>> errors = checker._analyze(checker._tempDirectory, sections, snippets, silent: true);
+    stderr.writeln('\u001B[2J\u001B[H'); // Clears the old results from the terminal.
+    if (errors.isNotEmpty) {
+      for (final String filePath in errors.keys) {
+        errors[filePath].forEach(stderr.writeln);
+      }
+      stderr.writeln('\nFound ${errors.length} errors.');
+    } else {
+      stderr.writeln('\nNo issues found.');
+    }
+  }
+
   final SampleChecker checker = SampleChecker(flutterPackage, tempDirectory: tempDir)
-    .._createConfigurationFiles(tempDir)
-    .._extractSamples(<File>[file], silent: true);
+    .._createConfigurationFiles(tempDir);
+  analyze(checker, file);
 
-  await Isolate.spawn(_watcher, <dynamic>[checker, file]);
-
-  await Process.start(
-    _flutter,
-    <String>['--no-wrap', 'analyze', '--no-preamble', '--no-congratulate', '--watch', '.'],
-    workingDirectory: tempDir.absolute.path,
-    mode: ProcessStartMode.inheritStdio
-  );
-}
-
-void _watcher(List<dynamic> args) {
-  final File file = args.last as File;
-  final SampleChecker checker = args.first as SampleChecker;
   Watcher(file.absolute.path).events.listen((_) {
-    checker._extractSamples(<File>[file], silent: true);
+    print('\n\nRerunning...');
+    analyze(checker, file);
   });
 }
diff --git a/packages/flutter/lib/src/animation/animation.dart b/packages/flutter/lib/src/animation/animation.dart
index 74a6fb3..edfeef1 100644
--- a/packages/flutter/lib/src/animation/animation.dart
+++ b/packages/flutter/lib/src/animation/animation.dart
@@ -8,8 +8,7 @@
 import 'tween.dart';
 
 // Examples can assume:
-// // @dart = 2.9
-// AnimationController _controller;
+// late AnimationController _controller;
 
 /// The status of an animation.
 enum AnimationStatus {
diff --git a/packages/flutter/lib/src/animation/animation_controller.dart b/packages/flutter/lib/src/animation/animation_controller.dart
index f3da267..95f2f75 100644
--- a/packages/flutter/lib/src/animation/animation_controller.dart
+++ b/packages/flutter/lib/src/animation/animation_controller.dart
@@ -17,9 +17,8 @@
 export 'package:flutter/scheduler.dart' show TickerFuture, TickerCanceled;
 
 // Examples can assume:
-// // @dart = 2.9
-// AnimationController _controller, fadeAnimationController, sizeAnimationController;
-// bool dismissed;
+// late AnimationController _controller, fadeAnimationController, sizeAnimationController;
+// late bool dismissed;
 // void setState(VoidCallback fn) { }
 
 /// The direction in which an animation is running.
@@ -137,7 +136,7 @@
 ///
 /// ```dart
 /// class Foo extends StatefulWidget {
-///   Foo({ Key key, this.duration }) : super(key: key);
+///   Foo({ Key? key, required this.duration }) : super(key: key);
 ///
 ///   final Duration duration;
 ///
@@ -146,7 +145,7 @@
 /// }
 ///
 /// class _FooState extends State<Foo> with SingleTickerProviderStateMixin {
-///   AnimationController _controller;
+///   late AnimationController _controller;
 ///
 ///   @override
 ///   void initState() {
diff --git a/packages/flutter/lib/src/animation/animations.dart b/packages/flutter/lib/src/animation/animations.dart
index d64ebe1..def82f1 100644
--- a/packages/flutter/lib/src/animation/animations.dart
+++ b/packages/flutter/lib/src/animation/animations.dart
@@ -12,8 +12,7 @@
 import 'listener_helpers.dart';
 
 // Examples can assume:
-// // @dart = 2.9
-// AnimationController controller;
+// late AnimationController controller;
 
 class _AlwaysCompleteAnimation extends Animation<double> {
   const _AlwaysCompleteAnimation();
diff --git a/packages/flutter/lib/src/animation/tween.dart b/packages/flutter/lib/src/animation/tween.dart
index 9817876..7730430 100644
--- a/packages/flutter/lib/src/animation/tween.dart
+++ b/packages/flutter/lib/src/animation/tween.dart
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-
 import 'dart:ui' show Color, Size, Rect;
 
 import 'package:flutter/foundation.dart';
@@ -12,9 +11,8 @@
 import 'curves.dart';
 
 // Examples can assume:
-// // @dart = 2.9
-// Animation<Offset> _animation;
-// AnimationController _controller;
+// late Animation<Offset> _animation;
+// late AnimationController _controller;
 
 /// An object that can produce a value of type `T` given an [Animation<double>]
 /// as input.
diff --git a/packages/flutter/lib/src/animation/tween_sequence.dart b/packages/flutter/lib/src/animation/tween_sequence.dart
index 734ec16..6a6095a 100644
--- a/packages/flutter/lib/src/animation/tween_sequence.dart
+++ b/packages/flutter/lib/src/animation/tween_sequence.dart
@@ -7,8 +7,7 @@
 import 'tween.dart';
 
 // Examples can assume:
-// // @dart = 2.9
-// AnimationController myAnimationController;
+// late AnimationController myAnimationController;
 
 /// Enables creating an [Animation] whose value is defined by a sequence of
 /// [Tween]s.
diff --git a/packages/flutter/lib/src/foundation/annotations.dart b/packages/flutter/lib/src/foundation/annotations.dart
index 87cc4c3..b57bfac 100644
--- a/packages/flutter/lib/src/foundation/annotations.dart
+++ b/packages/flutter/lib/src/foundation/annotations.dart
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 // Examples can assume:
-// // @dart = 2.9
 // class Cat { }
 
 /// A category with which to annotate a class, for documentation
diff --git a/packages/flutter/lib/src/foundation/assertions.dart b/packages/flutter/lib/src/foundation/assertions.dart
index 9f8ac8a..1f77490 100644
--- a/packages/flutter/lib/src/foundation/assertions.dart
+++ b/packages/flutter/lib/src/foundation/assertions.dart
@@ -11,11 +11,10 @@
 import 'stack_frame.dart';
 
 // Examples can assume:
-// // @dart = 2.9
-// String runtimeType;
-// bool draconisAlive;
-// bool draconisAmulet;
-// Diagnosticable draconis;
+// late String runtimeType;
+// late bool draconisAlive;
+// late bool draconisAmulet;
+// late Diagnosticable draconis;
 
 /// Signature for [FlutterError.onError] handler.
 typedef FlutterExceptionHandler = void Function(FlutterErrorDetails details);
diff --git a/packages/flutter/lib/src/foundation/diagnostics.dart b/packages/flutter/lib/src/foundation/diagnostics.dart
index 02a5b81..209eaa3 100644
--- a/packages/flutter/lib/src/foundation/diagnostics.dart
+++ b/packages/flutter/lib/src/foundation/diagnostics.dart
@@ -12,10 +12,9 @@
 import 'object.dart';
 
 // Examples can assume:
-// // @dart = 2.9
-// int rows, columns;
-// String _name;
-// bool inherit;
+// late int rows, columns;
+// late String _name;
+// late bool inherit;
 
 /// The various priority levels used to filter which diagnostics are shown and
 /// omitted.
@@ -3069,7 +3068,7 @@
 }
 
 // Examples can assume:
-// class ExampleSuperclass with Diagnosticable { String message; double stepWidth; double scale; double paintExtent; double hitTestExtent; double paintExtend; double maxWidth; bool primary; double progress; int maxLines; Duration duration; int depth; dynamic boxShadow; dynamic style; bool hasSize; Matrix4 transform; Map<Listenable, VoidCallback> handles; Color color; bool obscureText; ImageRepeat repeat; Size size; Widget widget; bool isCurrent; bool keepAlive; TextAlign textAlign; }
+// class ExampleSuperclass with Diagnosticable { late String message; late double stepWidth; late double scale; late double paintExtent; late double hitTestExtent; late double paintExtend; late double maxWidth; late bool primary; late double progress; late int maxLines; late Duration duration; late int depth; late dynamic boxShadow; late dynamic style; late bool hasSize; late Matrix4 transform; Map<Listenable, VoidCallback>? handles; late Color color; late bool obscureText; late ImageRepeat repeat; late Size size; late Widget widget; late bool isCurrent; late bool keepAlive; late TextAlign textAlign; }
 
 /// A mixin class for providing string and [DiagnosticsNode] debug
 /// representations describing the properties of an object.
@@ -3326,9 +3325,9 @@
   ///     properties.add(DiagnosticsProperty<Map<Listenable, VoidCallback>>(
   ///       'handles',
   ///       handles,
-  ///       description: handles != null ?
-  ///       '${handles.length} active client${ handles.length == 1 ? "" : "s" }' :
-  ///       null,
+  ///       description: handles != null
+  ///         ? '${handles!.length} active client${ handles!.length == 1 ? "" : "s" }'
+  ///         : null,
   ///       ifNull: 'no notifications ever received',
   ///       showName: false,
   ///     ));
diff --git a/packages/flutter/lib/src/painting/borders.dart b/packages/flutter/lib/src/painting/borders.dart
index 66dd879..fdc6321 100644
--- a/packages/flutter/lib/src/painting/borders.dart
+++ b/packages/flutter/lib/src/painting/borders.dart
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-
 import 'dart:math' as math;
 import 'dart:ui' as ui show lerpDouble;
 
diff --git a/packages/flutter/lib/src/painting/box_border.dart b/packages/flutter/lib/src/painting/box_border.dart
index acc3b31..cf7012a 100644
--- a/packages/flutter/lib/src/painting/box_border.dart
+++ b/packages/flutter/lib/src/painting/box_border.dart
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-
 import 'package:flutter/foundation.dart';
 
 import 'basic_types.dart';
@@ -11,8 +10,7 @@
 import 'edge_insets.dart';
 
 // Examples can assume:
-// // @dart = 2.9
-// BuildContext context;
+// late BuildContext context;
 
 /// The shape to use when rendering a [Border] or [BoxDecoration].
 ///
diff --git a/packages/flutter/lib/src/painting/image_provider.dart b/packages/flutter/lib/src/painting/image_provider.dart
index a5d678f..8ec6789 100644
--- a/packages/flutter/lib/src/painting/image_provider.dart
+++ b/packages/flutter/lib/src/painting/image_provider.dart
@@ -17,9 +17,6 @@
 import 'image_cache.dart';
 import 'image_stream.dart';
 
-// Examples can assume:
-// // @dart = 2.9
-
 /// Signature for the callback taken by [_createErrorHandlerAndKey].
 typedef _KeyAndErrorHandlerCallback<T> = void Function(T key, ImageErrorListener handleError);
 
@@ -239,10 +236,9 @@
 /// ```dart
 /// class MyImage extends StatefulWidget {
 ///   const MyImage({
-///     Key key,
-///     @required this.imageProvider,
-///   }) : assert(imageProvider != null),
-///        super(key: key);
+///     Key? key,
+///     required this.imageProvider,
+///   }) : super(key: key);
 ///
 ///   final ImageProvider imageProvider;
 ///
@@ -251,8 +247,8 @@
 /// }
 ///
 /// class _MyImageState extends State<MyImage> {
-///   ImageStream _imageStream;
-///   ImageInfo _imageInfo;
+///   ImageStream? _imageStream;
+///   ImageInfo? _imageInfo;
 ///
 ///   @override
 ///   void didChangeDependencies() {
@@ -271,15 +267,15 @@
 ///   }
 ///
 ///   void _getImage() {
-///     final ImageStream oldImageStream = _imageStream;
+///     final ImageStream? oldImageStream = _imageStream;
 ///     _imageStream = widget.imageProvider.resolve(createLocalImageConfiguration(context));
-///     if (_imageStream.key != oldImageStream?.key) {
+///     if (_imageStream!.key != oldImageStream?.key) {
 ///       // If the keys are the same, then we got the same image back, and so we don't
 ///       // need to update the listeners. If the key changed, though, we must make sure
 ///       // to switch our listeners to the new image stream.
 ///       final ImageStreamListener listener = ImageStreamListener(_updateImage);
 ///       oldImageStream?.removeListener(listener);
-///       _imageStream.addListener(listener);
+///       _imageStream!.addListener(listener);
 ///     }
 ///   }
 ///
@@ -293,7 +289,7 @@
 ///
 ///   @override
 ///   void dispose() {
-///     _imageStream.removeListener(ImageStreamListener(_updateImage));
+///     _imageStream?.removeListener(ImageStreamListener(_updateImage));
 ///     _imageInfo?.dispose();
 ///     _imageInfo = null;
 ///     super.dispose();
diff --git a/packages/flutter/lib/src/semantics/semantics.dart b/packages/flutter/lib/src/semantics/semantics.dart
index f5fd3ab..1bf93a8 100644
--- a/packages/flutter/lib/src/semantics/semantics.dart
+++ b/packages/flutter/lib/src/semantics/semantics.dart
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-
 import 'dart:math' as math;
 import 'dart:typed_data';
 import 'dart:ui' as ui;
