diff --git a/dev/bots/flutter_compact_formatter.dart b/dev/bots/flutter_compact_formatter.dart
index 13ccc18..5afc14c 100644
--- a/dev/bots/flutter_compact_formatter.dart
+++ b/dev/bots/flutter_compact_formatter.dart
@@ -50,8 +50,8 @@
   /// this is Windows or not outputting to a terminal.
   String get _noColor => useColor ? '\u001b[0m' : '';
 
-  /// The termianl escape for clearing the line, or a carriage return if
-  /// this is Windows or not outputting to a termianl.
+  /// The terminal escape for clearing the line, or a carriage return if
+  /// this is Windows or not outputting to a terminal.
   String get _clearLine => useColor ? '\x1b[2K\r' : '\r';
 
   final Map<int, TestResult> _tests = <int, TestResult>{};
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index 0fb34b3..e26c955 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -961,7 +961,7 @@
 }
 
 /// If the CIRRUS_TASK_NAME environment variable exists, we use that to determine
-/// the shard and subshard (parsing it in the form shard-subshard-platform, ignoring
+/// the shard and sub-shard (parsing it in the form shard-subshard-platform, ignoring
 /// the platform).
 ///
 /// However, for local testing you can just set the SHARD and SUBSHARD
diff --git a/dev/devicelab/bin/tasks/gradle_plugin_dependencies_test.dart b/dev/devicelab/bin/tasks/gradle_plugin_dependencies_test.dart
index d9e7f1b..752da43 100644
--- a/dev/devicelab/bin/tasks/gradle_plugin_dependencies_test.dart
+++ b/dev/devicelab/bin/tasks/gradle_plugin_dependencies_test.dart
@@ -13,7 +13,7 @@
 final String gradlew = Platform.isWindows ? 'gradlew.bat' : 'gradlew';
 final String gradlewExecutable = Platform.isWindows ? '.\\$gradlew' : './$gradlew';
 
-/// Tests that projects can include plugins that have a transtive dependency in common.
+/// Tests that projects can include plugins that have a transitive dependency in common.
 /// For more info see: https://github.com/flutter/flutter/issues/27254.
 Future<void> main() async {
   await task(() async {
diff --git a/dev/devicelab/bin/tasks/gradle_r8_test.dart b/dev/devicelab/bin/tasks/gradle_r8_test.dart
index bbd8c6a..1141c1c 100644
--- a/dev/devicelab/bin/tasks/gradle_r8_test.dart
+++ b/dev/devicelab/bin/tasks/gradle_r8_test.dart
@@ -10,7 +10,7 @@
 import 'package:path/path.dart' as path;
 
 /// Tests that flutter build apk uses R8 by default by adding an
-/// invalid proguard rule and evaluating the error message.
+/// invalid ProGuard rule and evaluating the error message.
 Future<void> main() async {
   await task(() async {
 
diff --git a/dev/devicelab/lib/framework/framework.dart b/dev/devicelab/lib/framework/framework.dart
index ec41d5b..3476cb1 100644
--- a/dev/devicelab/lib/framework/framework.dart
+++ b/dev/devicelab/lib/framework/framework.dart
@@ -25,7 +25,7 @@
 /// The task does not run immediately but waits for the request via the
 /// VM service protocol to run it.
 ///
-/// It is ok for a [task] to perform many things. However, only one task can be
+/// It is OK for a [task] to perform many things. However, only one task can be
 /// registered per Dart VM.
 Future<TaskResult> task(TaskFunction task) {
   if (_isTaskRegistered)
@@ -143,7 +143,7 @@
     });
   }
 
-  /// Disables the keep-alive port, allowing the VM to exit.
+  /// Disables the keepalive port, allowing the VM to exit.
   void _closeKeepAlivePort() {
     _startTaskTimeout?.cancel();
     _keepAlivePort?.close();
diff --git a/dev/devicelab/lib/framework/utils.dart b/dev/devicelab/lib/framework/utils.dart
index 0ac79c6..b1540b5 100644
--- a/dev/devicelab/lib/framework/utils.dart
+++ b/dev/devicelab/lib/framework/utils.dart
@@ -602,7 +602,7 @@
   return matches.isEmpty ? null : int.parse(matches[0].group(2));
 }
 
-/// Tries to extract a Uri from the string.
+/// Tries to extract a URL from the string.
 ///
 /// The `prefix`, if specified, is a regular expression pattern and must not contain groups.
 /// `prefix` defaults to the RegExp: `An Observatory debugger .* is available at: `.
diff --git a/examples/layers/rendering/src/sector_layout.dart b/examples/layers/rendering/src/sector_layout.dart
index 905cb52..4fb63bd 100644
--- a/examples/layers/rendering/src/sector_layout.dart
+++ b/examples/layers/rendering/src/sector_layout.dart
@@ -88,7 +88,7 @@
 ///  * <https://en.wikipedia.org/wiki/Polar_coordinate_system>, which defines
 ///    the polar coordinate space.
 ///  * [RenderBox], which is the base class for [RenderObject]s that live in a
-///    cartesian coordinate space.
+///    Cartesian coordinate space.
 abstract class RenderSector extends RenderObject {
 
   @override
diff --git a/packages/flutter/lib/src/cupertino/colors.dart b/packages/flutter/lib/src/cupertino/colors.dart
index 518b31a..40ef613 100644
--- a/packages/flutter/lib/src/cupertino/colors.dart
+++ b/packages/flutter/lib/src/cupertino/colors.dart
@@ -642,7 +642,7 @@
 ///
 /// {@tool sample}
 ///
-/// The following code samples demostrate two cases where you have to manually
+/// The following code samples demonstrate two cases where you have to manually
 /// resolve a [CupertinoDynamicColor].
 ///
 /// ```dart
@@ -926,16 +926,16 @@
   /// `data` is [CupertinoUserInterfaceLevelData.elevated]), the resolved
   /// [CupertinoDynamicColor] will be the same as this [CupertinoDynamicColor],
   /// except its effective color will be the `darkHighContrastElevatedColor` variant
-  /// from the orignal [CupertinoDynamicColor].
+  /// from the original [CupertinoDynamicColor].
   ///
   /// Calling this function may create dependencies on the closest instance of some
   /// [InheritedWidget]s that enclose the given [BuildContext]. E.g., if [darkColor]
   /// is different from [color], this method will call [CupertinoTheme.of], and
-  /// then [MediaQuery.of] if brightness wasn't specified in the theme data retrived
+  /// then [MediaQuery.of] if brightness wasn't specified in the theme data retrieved
   /// from the previous [CupertinoTheme.of] call, in an effort to determine the
   /// brightness value.
   ///
-  /// If any of the required dependecies are missing from the given context, the
+  /// If any of the required dependencies are missing from the given context, the
   /// default value of that trait will be used ([Brightness.light] platform
   /// brightness, normal contrast, [CupertinoUserInterfaceLevelData.base] elevation
   /// level), unless [nullOk] is set to false, in which case an exception will be
diff --git a/packages/flutter/lib/src/cupertino/date_picker.dart b/packages/flutter/lib/src/cupertino/date_picker.dart
index e063897..848edca 100644
--- a/packages/flutter/lib/src/cupertino/date_picker.dart
+++ b/packages/flutter/lib/src/cupertino/date_picker.dart
@@ -1273,7 +1273,7 @@
   /// Callback called when the timer duration changes.
   final ValueChanged<Duration> onTimerDurationChanged;
 
-  /// Defines how the timper picker should be positioned within its parent.
+  /// Defines how the timer picker should be positioned within its parent.
   ///
   /// This property must not be null. It defaults to [Alignment.center].
   final AlignmentGeometry alignment;
diff --git a/packages/flutter/lib/src/cupertino/icons.dart b/packages/flutter/lib/src/cupertino/icons.dart
index 25dac58..091bb29 100644
--- a/packages/flutter/lib/src/cupertino/icons.dart
+++ b/packages/flutter/lib/src/cupertino/icons.dart
@@ -190,7 +190,7 @@
   /// A 25% charged battery.
   static const IconData battery_25_percent = IconData(0xf115, fontFamily: iconFont, fontPackage: iconFontPackage);
 
-  /// The bluetooth logo.
+  /// The Bluetooth logo.
   static const IconData bluetooth = IconData(0xf116, fontFamily: iconFont, fontPackage: iconFontPackage);
 
   /// A restart arrow, pointing downwards.
diff --git a/packages/flutter/lib/src/cupertino/picker.dart b/packages/flutter/lib/src/cupertino/picker.dart
index df95ccc..0186f69 100644
--- a/packages/flutter/lib/src/cupertino/picker.dart
+++ b/packages/flutter/lib/src/cupertino/picker.dart
@@ -172,7 +172,7 @@
 
   /// {@macro flutter.rendering.wheelList.squeeze}
   ///
-  /// Defaults to `1.45` fo visually mimic iOS.
+  /// Defaults to `1.45` to visually mimic iOS.
   final double squeeze;
 
   /// An option callback when the currently centered item changes.
diff --git a/packages/flutter/lib/src/cupertino/text_field.dart b/packages/flutter/lib/src/cupertino/text_field.dart
index e35b95d..75ec473 100644
--- a/packages/flutter/lib/src/cupertino/text_field.dart
+++ b/packages/flutter/lib/src/cupertino/text_field.dart
@@ -68,13 +68,13 @@
 
   /// Overlay will only appear when the current text entry is not empty.
   ///
-  /// This includes pre-filled text that the user did not type in manually. But
+  /// This includes prefilled text that the user did not type in manually. But
   /// does not include text in placeholders.
   editing,
 
   /// Overlay will only appear when the current text entry is empty.
   ///
-  /// This also includes not having pre-filled text that the user did not type
+  /// This also includes not having prefilled text that the user did not type
   /// in manually. Texts in placeholders are ignored.
   notEditing,
 
@@ -178,7 +178,7 @@
 class CupertinoTextField extends StatefulWidget {
   /// Creates an iOS-style text field.
   ///
-  /// To provide a pre-filled text entry, pass in a [TextEditingController] with
+  /// To provide a prefilled text entry, pass in a [TextEditingController] with
   /// an initial value to the [controller] parameter.
   ///
   /// To provide a hint placeholder text that appears when the text entry is
diff --git a/packages/flutter/lib/src/cupertino/theme.dart b/packages/flutter/lib/src/cupertino/theme.dart
index 29a4668..055d159 100644
--- a/packages/flutter/lib/src/cupertino/theme.dart
+++ b/packages/flutter/lib/src/cupertino/theme.dart
@@ -277,7 +277,7 @@
     );
   }
 
-  /// Returns a new `CupertinoThemeData` with all its colors resolved aginst the
+  /// Returns a new `CupertinoThemeData` with all its colors resolved against the
   /// given [BuildContext].
   ///
   /// Called by [CupertinoTheme.of] to resolve colors defined in the retrieved
diff --git a/packages/flutter/lib/src/foundation/_bitfield_web.dart b/packages/flutter/lib/src/foundation/_bitfield_web.dart
index e27377a..6754a44 100644
--- a/packages/flutter/lib/src/foundation/_bitfield_web.dart
+++ b/packages/flutter/lib/src/foundation/_bitfield_web.dart
@@ -6,7 +6,7 @@
 
 /// The dart:html implementation of [bitfield.kMaxUnsignedSMI].
 ///
-/// This value is used as an optimization to coerse some numbers to be within
+/// This value is used as an optimization to coerce some numbers to be within
 /// the SMI range and avoid heap allocations. Because number encoding is
 /// VM-specific, there's no guarantee that this optimization will be effective
 /// on all JavaScript engines. The value picked here should be correct, but it
diff --git a/packages/flutter/lib/src/foundation/assertions.dart b/packages/flutter/lib/src/foundation/assertions.dart
index 510f7ba..0f0f5a1 100644
--- a/packages/flutter/lib/src/foundation/assertions.dart
+++ b/packages/flutter/lib/src/foundation/assertions.dart
@@ -772,7 +772,7 @@
   debugPrint(FlutterError.defaultStackFilter(lines).join('\n'));
 }
 
-/// Diagnostic with a [StackTrace] [value] suitable for displaying stacktraces
+/// Diagnostic with a [StackTrace] [value] suitable for displaying stack traces
 /// as part of a [FlutterError] object.
 ///
 /// See also:
diff --git a/packages/flutter/lib/src/foundation/constants.dart b/packages/flutter/lib/src/foundation/constants.dart
index a78f9c2..a5c14c4 100644
--- a/packages/flutter/lib/src/foundation/constants.dart
+++ b/packages/flutter/lib/src/foundation/constants.dart
@@ -18,7 +18,7 @@
 /// compiled in Dart with the '-Ddart.vm.profile=true' flag.
 ///
 /// Since this is a const value, it can be used to indicate to the compiler that
-/// a particular block of code will not be executed in profle mode, an hence
+/// a particular block of code will not be executed in profile mode, an hence
 /// can be removed.
 const bool kProfileMode = bool.fromEnvironment('dart.vm.profile', defaultValue: false);
 
diff --git a/packages/flutter/lib/src/foundation/debug.dart b/packages/flutter/lib/src/foundation/debug.dart
index 3bef1c4..3b6623d 100644
--- a/packages/flutter/lib/src/foundation/debug.dart
+++ b/packages/flutter/lib/src/foundation/debug.dart
@@ -85,7 +85,7 @@
 
 /// Formats a double to have standard formatting.
 ///
-/// This behavior can be overriden by [debugDoublePrecision].
+/// This behavior can be overridden by [debugDoublePrecision].
 String debugFormatDouble(double value) {
   if (value == null) {
     return 'null';
diff --git a/packages/flutter/lib/src/foundation/diagnostics.dart b/packages/flutter/lib/src/foundation/diagnostics.dart
index 89c5769..dadaf20 100644
--- a/packages/flutter/lib/src/foundation/diagnostics.dart
+++ b/packages/flutter/lib/src/foundation/diagnostics.dart
@@ -1056,7 +1056,7 @@
   return style == DiagnosticsTreeStyle.singleLine;
 }
 
-/// Renderer that creates ascii art representations of trees of
+/// Renderer that creates ASCII art representations of trees of
 /// [DiagnosticsNode] objects.
 ///
 /// See also:
@@ -1385,7 +1385,7 @@
 /// Defines diagnostics data for a [value].
 ///
 /// For debug and profile modes, [DiagnosticsNode] provides a high quality
-/// multi-line string dump via [toStringDeep]. The core members are the [name],
+/// multiline string dump via [toStringDeep]. The core members are the [name],
 /// [toDescription], [getProperties], [value], and [getChildren]. All other
 /// members exist typically to provide hints for how [toStringDeep] and
 /// debugging tools should format output.
@@ -3352,7 +3352,7 @@
   ///
   /// `joiner` specifies the string which is place between each part obtained
   /// from [debugFillProperties]. Passing a string such as `'\n '` will result
-  /// in a multi-line string that indents the properties of the object below its
+  /// in a multiline string that indents the properties of the object below its
   /// name (as per [toString]).
   ///
   /// `minLevel` specifies the minimum [DiagnosticLevel] for properties included
diff --git a/packages/flutter/lib/src/foundation/profile.dart b/packages/flutter/lib/src/foundation/profile.dart
index 8f2c8a4..0546c5d 100644
--- a/packages/flutter/lib/src/foundation/profile.dart
+++ b/packages/flutter/lib/src/foundation/profile.dart
@@ -5,7 +5,7 @@
 import 'basic_types.dart';
 import 'constants.dart';
 
-/// DEPRECATED. `function` cannot be treeshaken out of release builds.
+/// DEPRECATED. `function` cannot be tree-shaken out of release builds.
 ///
 /// Instead use:
 ///
diff --git a/packages/flutter/lib/src/gestures/events.dart b/packages/flutter/lib/src/gestures/events.dart
index 6813184..aa07915 100644
--- a/packages/flutter/lib/src/gestures/events.dart
+++ b/packages/flutter/lib/src/gestures/events.dart
@@ -12,7 +12,7 @@
 /// The bit of [PointerEvent.buttons] that corresponds to a cross-device
 /// behavior of "primary operation".
 ///
-/// More specifially, it includes:
+/// More specifically, it includes:
 ///
 ///  * [kTouchContact]: The pointer contacts the touch screen.
 ///  * [kStylusContact]: The stylus contacts the screen.
@@ -135,7 +135,7 @@
 
 /// Returns the button of `buttons` with the smallest integer.
 ///
-/// The `buttons` parameter is a bitfield where each set bit represents a button.
+/// The `buttons` parameter is a bit field where each set bit represents a button.
 /// This function returns the set bit closest to the least significant bit.
 ///
 /// It returns zero when `buttons` is zero.
@@ -155,7 +155,7 @@
 
 /// Returns whether `buttons` contains one and only one button.
 ///
-/// The `buttons` parameter is a bitfield where each set bit represents a button.
+/// The `buttons` parameter is a bit field where each set bit represents a button.
 /// This function returns whether there is only one set bit in the given integer.
 ///
 /// It returns false when `buttons` is zero.
@@ -170,7 +170,7 @@
 ///
 /// See also:
 ///
-///   * [smallestButton], which returns the button in a `buttons` bitfield with
+///   * [smallestButton], which returns the button in a `buttons` bit field with
 ///     the smallest integer button.
 bool isSingleButton(int buttons) => buttons != 0 && (smallestButton(buttons) == buttons);
 
diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart
index 18961ed..0fee5ed 100644
--- a/packages/flutter/lib/src/material/app_bar.dart
+++ b/packages/flutter/lib/src/material/app_bar.dart
@@ -253,7 +253,7 @@
   /// If leading widget is not null, this parameter has no effect.
   final bool automaticallyImplyLeading;
 
-  /// The primary widget displayed in the appbar.
+  /// The primary widget displayed in the app bar.
   ///
   /// Typically a [Text] widget containing a description of the current contents
   /// of the app.
@@ -952,7 +952,7 @@
   /// If leading widget is not null, this parameter has no effect.
   final bool automaticallyImplyLeading;
 
-  /// The primary widget displayed in the appbar.
+  /// The primary widget displayed in the app bar.
   ///
   /// Typically a [Text] widget containing a description of the current contents
   /// of the app.
@@ -997,7 +997,7 @@
   /// Typically a [FlexibleSpaceBar]. See [FlexibleSpaceBar] for details.
   final Widget flexibleSpace;
 
-  /// This widget appears across the bottom of the appbar.
+  /// This widget appears across the bottom of the app bar.
   ///
   /// Typically a [TabBar]. Only widgets that implement [PreferredSizeWidget] can
   /// be used at the bottom of an app bar.
@@ -1155,7 +1155,7 @@
   /// a scroll dismisses the app bar, the animation will slide the app bar
   /// completely out of view.
   ///
-  /// Snapping only applies when the app bar is floating, not when the appbar
+  /// Snapping only applies when the app bar is floating, not when the app bar
   /// appears at the top of its scroll view.
   ///
   /// ## Animated Examples
diff --git a/packages/flutter/lib/src/material/banner.dart b/packages/flutter/lib/src/material/banner.dart
index d8b5f7a..5961c15 100644
--- a/packages/flutter/lib/src/material/banner.dart
+++ b/packages/flutter/lib/src/material/banner.dart
@@ -17,7 +17,7 @@
 /// to be dismissed.
 ///
 /// Banners should be displayed at the top of the screen, below a top app bar.
-/// They are persistent and nonmodal, allowing the user to either ignore them or
+/// They are persistent and non-modal, allowing the user to either ignore them or
 /// interact with them at any time.
 ///
 /// The [actions] will be placed beside the [content] if there is only one.
diff --git a/packages/flutter/lib/src/material/bottom_sheet.dart b/packages/flutter/lib/src/material/bottom_sheet.dart
index 6ad37cd..6886967 100644
--- a/packages/flutter/lib/src/material/bottom_sheet.dart
+++ b/packages/flutter/lib/src/material/bottom_sheet.dart
@@ -90,7 +90,7 @@
   final WidgetBuilder builder;
 
   /// If true, the bottom sheet can be dragged up and down and dismissed by
-  /// swiping downards.
+  /// swiping downwards.
   ///
   /// Default is true.
   final bool enableDrag;
@@ -497,11 +497,11 @@
 /// this method.
 ///
 /// The new bottom sheet becomes a [LocalHistoryEntry] for the enclosing
-/// [ModalRoute] and a back button is added to the appbar of the [Scaffold]
+/// [ModalRoute] and a back button is added to the app bar of the [Scaffold]
 /// that closes the bottom sheet.
 ///
 /// To create a persistent bottom sheet that is not a [LocalHistoryEntry] and
-/// does not add a back button to the enclosing Scaffold's appbar, use the
+/// does not add a back button to the enclosing Scaffold's app bar, use the
 /// [Scaffold.bottomSheet] constructor parameter.
 ///
 /// A closely related widget is a modal bottom sheet, which is an alternative
diff --git a/packages/flutter/lib/src/material/button_bar.dart b/packages/flutter/lib/src/material/button_bar.dart
index 54992e1..9c37854 100644
--- a/packages/flutter/lib/src/material/button_bar.dart
+++ b/packages/flutter/lib/src/material/button_bar.dart
@@ -186,7 +186,7 @@
 /// there is not enough horizontal space.
 ///
 /// It first attempts to lay out its buttons as though there were no
-/// maximumm width constraints on the widget. If the button bar's width is
+/// maximum width constraints on the widget. If the button bar's width is
 /// less than the maximum width constraints of the widget, it then lays
 /// out the widget as though it were placed in a [Row].
 ///
@@ -249,7 +249,7 @@
 /// there is not enough horizontal space.
 ///
 /// It first attempts to lay out its buttons as though there were no
-/// maximumm width constraints on the widget. If the button bar's width is
+/// maximum width constraints on the widget. If the button bar's width is
 /// less than the maximum width constraints of the widget, it then lays
 /// out the widget as though it were placed in a [Row].
 ///
diff --git a/packages/flutter/lib/src/material/input_decorator.dart b/packages/flutter/lib/src/material/input_decorator.dart
index 5a9b6d9..8497b15 100644
--- a/packages/flutter/lib/src/material/input_decorator.dart
+++ b/packages/flutter/lib/src/material/input_decorator.dart
@@ -2971,7 +2971,7 @@
   /// If provided, this replaces the semantic label of the [counterText].
   final String semanticCounterText;
 
-  /// Typically set to true when the [InputDecorator] contains a multi-line
+  /// Typically set to true when the [InputDecorator] contains a multiline
   /// [TextField] ([TextField.maxLines] is null or > 1) to override the default
   /// behavior of aligning the label with the center of the [TextField].
   ///
@@ -3585,7 +3585,7 @@
   ///    rounded rectangle around the input decorator's container.
   final InputBorder border;
 
-  /// Typically set to true when the [InputDecorator] contains a multi-line
+  /// Typically set to true when the [InputDecorator] contains a multiline
   /// [TextField] ([TextField.maxLines] is null or > 1) to override the default
   /// behavior of aligning the label with the center of the [TextField].
   final bool alignLabelWithHint;
diff --git a/packages/flutter/lib/src/material/list_tile.dart b/packages/flutter/lib/src/material/list_tile.dart
index a755517..07a1beb 100644
--- a/packages/flutter/lib/src/material/list_tile.dart
+++ b/packages/flutter/lib/src/material/list_tile.dart
@@ -440,7 +440,7 @@
 ///
 /// {@tool snippet --template=stateless_widget_scaffold}
 ///
-/// Here is an example of an article list item with multi-line titles and
+/// Here is an example of an article list item with multiline titles and
 /// subtitles. It utilizes [Row]s and [Column]s, as well as [Expanded] and
 /// [AspectRatio] widgets to organize its layout.
 ///
diff --git a/packages/flutter/lib/src/material/range_slider.dart b/packages/flutter/lib/src/material/range_slider.dart
index 565a108..4d3a6fd 100644
--- a/packages/flutter/lib/src/material/range_slider.dart
+++ b/packages/flutter/lib/src/material/range_slider.dart
@@ -273,7 +273,7 @@
   /// There are two labels: one for the start thumb and one for the end thumb.
   ///
   /// Each label is rendered using the active [ThemeData]'s
-  /// [ThemeData.accentTextTheme.body2] text style, and can be overriden
+  /// [ThemeData.accentTextTheme.body2] text style, and can be overridden
   /// by changing the [SliderThemeData.valueIndicatorTextStyle].
   ///
   /// If null, then the value indicator will not be displayed.
diff --git a/packages/flutter/lib/src/material/scaffold.dart b/packages/flutter/lib/src/material/scaffold.dart
index b7e15a3..91af53b 100644
--- a/packages/flutter/lib/src/material/scaffold.dart
+++ b/packages/flutter/lib/src/material/scaffold.dart
@@ -1799,11 +1799,11 @@
   /// this method.
   ///
   /// The new bottom sheet becomes a [LocalHistoryEntry] for the enclosing
-  /// [ModalRoute] and a back button is added to the appbar of the [Scaffold]
+  /// [ModalRoute] and a back button is added to the app bar of the [Scaffold]
   /// that closes the bottom sheet.
   ///
   /// To create a persistent bottom sheet that is not a [LocalHistoryEntry] and
-  /// does not add a back button to the enclosing Scaffold's appbar, use the
+  /// does not add a back button to the enclosing Scaffold's app bar, use the
   /// [Scaffold.bottomSheet] constructor parameter.
   ///
   /// A persistent bottom sheet shows information that supplements the primary
diff --git a/packages/flutter/lib/src/material/slider_theme.dart b/packages/flutter/lib/src/material/slider_theme.dart
index 5ad42e3..f3fa7f5 100644
--- a/packages/flutter/lib/src/material/slider_theme.dart
+++ b/packages/flutter/lib/src/material/slider_theme.dart
@@ -1500,7 +1500,7 @@
 /// [parentBox]. The track rectangle extends to the bounds of the [parentBox],
 /// but is padded by the [RoundSliderOverlayShape] radius. The height is defined
 /// by the [SliderThemeData.trackHeight]. The color is determined by the
-/// [Slider]'s enabled state and the track segments's active state which are
+/// [Slider]'s enabled state and the track segment's active state which are
 /// defined by:
 ///   [SliderThemeData.activeTrackColor],
 ///   [SliderThemeData.inactiveTrackColor],
@@ -1706,7 +1706,7 @@
 /// [parentBox]. The track rectangle extends to the bounds of the [parentBox],
 /// but is padded by the [RoundSliderOverlayShape] radius. The height is
 /// defined by the [SliderThemeData.trackHeight]. The color is determined by the
-/// [Slider]'s enabled state and the track segments's active state which are
+/// [Slider]'s enabled state and the track segment's active state which are
 /// defined by:
 ///   [SliderThemeData.activeTrackColor],
 ///   [SliderThemeData.inactiveTrackColor],
diff --git a/packages/flutter/lib/src/painting/_network_image_io.dart b/packages/flutter/lib/src/painting/_network_image_io.dart
index d976b93..aa97b45 100644
--- a/packages/flutter/lib/src/painting/_network_image_io.dart
+++ b/packages/flutter/lib/src/painting/_network_image_io.dart
@@ -13,7 +13,7 @@
 import 'image_provider.dart' as image_provider;
 import 'image_stream.dart';
 
-/// The dart:io implemenation of [image_provider.NetworkImage].
+/// The dart:io implementation of [image_provider.NetworkImage].
 class NetworkImage extends image_provider.ImageProvider<image_provider.NetworkImage> implements image_provider.NetworkImage {
   /// Creates an object that fetches the image at the given URL.
   ///
diff --git a/packages/flutter/lib/src/painting/_network_image_web.dart b/packages/flutter/lib/src/painting/_network_image_web.dart
index 8725626..8c57766 100644
--- a/packages/flutter/lib/src/painting/_network_image_web.dart
+++ b/packages/flutter/lib/src/painting/_network_image_web.dart
@@ -10,7 +10,7 @@
 import 'image_provider.dart' as image_provider;
 import 'image_stream.dart';
 
-/// The dart:html implemenation of [image_provider.NetworkImage].
+/// The dart:html implementation of [image_provider.NetworkImage].
 ///
 /// NetworkImage on the web does not support decoding to a specified size.
 class NetworkImage extends image_provider.ImageProvider<image_provider.NetworkImage> implements image_provider.NetworkImage {
diff --git a/packages/flutter/lib/src/painting/image_provider.dart b/packages/flutter/lib/src/painting/image_provider.dart
index a4465dd..6e6d2bd 100644
--- a/packages/flutter/lib/src/painting/image_provider.dart
+++ b/packages/flutter/lib/src/painting/image_provider.dart
@@ -904,7 +904,7 @@
   /// A human-readable error message.
   final String _message;
 
-  /// Resolved URI of the requested image.
+  /// Resolved URL of the requested image.
   final Uri uri;
 
   @override
diff --git a/packages/flutter/lib/src/painting/inline_span.dart b/packages/flutter/lib/src/painting/inline_span.dart
index 63bb18f..6231beb 100644
--- a/packages/flutter/lib/src/painting/inline_span.dart
+++ b/packages/flutter/lib/src/painting/inline_span.dart
@@ -43,7 +43,7 @@
 ///   * [InlineSpan.getSemanticsInformation]
 @immutable
 class InlineSpanSemanticsInformation {
-  /// Constructs an object that holds the text and sematnics label values of an
+  /// Constructs an object that holds the text and semantics label values of an
   /// [InlineSpan].
   ///
   /// The text parameter must not be null.
@@ -283,7 +283,7 @@
   /// represented as a 0xFFFC 'object replacement character'.
   ///
   /// The plain-text representation of this [InlineSpan] is written into the `buffer`.
-  /// This method will then recursively call [computeToPlainText] on its childen
+  /// This method will then recursively call [computeToPlainText] on its children
   /// [InlineSpan]s if available.
   @protected
   void computeToPlainText(StringBuffer buffer, {bool includeSemanticsLabels = true, bool includePlaceholders = true});
diff --git a/packages/flutter/lib/src/painting/shader_warm_up.dart b/packages/flutter/lib/src/painting/shader_warm_up.dart
index 8840f8b..6cd568a 100644
--- a/packages/flutter/lib/src/painting/shader_warm_up.dart
+++ b/packages/flutter/lib/src/painting/shader_warm_up.dart
@@ -72,7 +72,7 @@
   /// Alternatively, one may run the app with `flutter run --trace-skia` and
   /// then examine the GPU thread in the observatory timeline to see which
   /// Skia draw operations are commonly used, and which shader compilations
-  /// are causing janks.
+  /// are causing jank.
   @protected
   Future<void> warmUpOnCanvas(ui.Canvas canvas);
 
diff --git a/packages/flutter/lib/src/painting/strut_style.dart b/packages/flutter/lib/src/painting/strut_style.dart
index 4cc1fb9..62ad311 100644
--- a/packages/flutter/lib/src/painting/strut_style.dart
+++ b/packages/flutter/lib/src/painting/strut_style.dart
@@ -37,7 +37,7 @@
 ///
 /// Ascent is the font's spacing above the baseline without leading and
 /// descent is the spacing below the baseline without leading. Leading is
-/// split evenly betweenthe top and bottom. The values for `ascent` and
+/// split evenly between the top and bottom. The values for `ascent` and
 /// `descent` are provided by the font named by [fontFamily]. If no
 /// [fontFamily] or [fontFamilyFallback] is provided, then the platform's
 /// default family will be used.
diff --git a/packages/flutter/lib/src/painting/text_painter.dart b/packages/flutter/lib/src/painting/text_painter.dart
index 5202869..390920b 100644
--- a/packages/flutter/lib/src/painting/text_painter.dart
+++ b/packages/flutter/lib/src/painting/text_painter.dart
@@ -83,7 +83,7 @@
 ///
 /// See [Text.textWidthBasis], for example.
 enum TextWidthBasis {
-  /// Multiline text will take up the full width given by the parent. For single
+  /// multiline text will take up the full width given by the parent. For single
   /// line text, only the minimum amount of width needed to contain the text
   /// will be used. A common use case for this is a standard series of
   /// paragraphs.
@@ -178,7 +178,7 @@
   /// This and [textDirection] must be non-null before you call [layout].
   ///
   /// The [InlineSpan] this provides is in the form of a tree that may contain
-  /// multiple instances of [TextSpan]s and [WidgetSpan]s. To obtain a plaintext
+  /// multiple instances of [TextSpan]s and [WidgetSpan]s. To obtain a plain text
   /// representation of the contents of this [TextPainter], use [InlineSpan.toPlainText]
   /// to get the full contents of all nodes in the tree. [TextSpan.text] will
   /// only provide the contents of the first node in the tree.
@@ -846,7 +846,7 @@
   ///
   /// This can potentially return a large amount of data, so it is not recommended
   /// to repeatedly call this. Instead, cache the results. The cached results
-  /// should be invalidated upon the next sucessful [layout].
+  /// should be invalidated upon the next successful [layout].
   List<ui.LineMetrics> computeLineMetrics() {
     assert(!_needsLayout);
     return _paragraph.computeLineMetrics();
diff --git a/packages/flutter/lib/src/painting/text_style.dart b/packages/flutter/lib/src/painting/text_style.dart
index 6da414c..dd0508b 100644
--- a/packages/flutter/lib/src/painting/text_style.dart
+++ b/packages/flutter/lib/src/painting/text_style.dart
@@ -609,7 +609,7 @@
   /// The style in which to paint the text decorations (e.g., dashed).
   final TextDecorationStyle decorationStyle;
 
-  /// The thickness of the decoration stroke as a muliplier of the thickness
+  /// The thickness of the decoration stroke as a multiplier of the thickness
   /// defined by the font.
   ///
   /// The font provides a base stroke width for [decoration]s which scales off
diff --git a/packages/flutter/lib/src/rendering/editable.dart b/packages/flutter/lib/src/rendering/editable.dart
index 80c7d44..ad76598 100644
--- a/packages/flutter/lib/src/rendering/editable.dart
+++ b/packages/flutter/lib/src/rendering/editable.dart
@@ -392,14 +392,14 @@
   // to select vertically past the end or beginning of the field. If they do,
   // then we need to keep the old cursor location so that we can go back to it
   // if they change their minds. Only used for moving selection up and down in a
-  // multi-line text field when selecting using the keyboard.
+  // multiline text field when selecting using the keyboard.
   int _cursorResetLocation = -1;
 
   // Whether we should reset the location of the cursor in the case the user
   // tries to select vertically past the end or beginning of the field. If they
   // do, then we need to keep the old cursor location so that we can go back to
   // it if they change their minds. Only used for resetting selection up and
-  // down in a multi-line text field when selecting using the keyboard.
+  // down in a multiline text field when selecting using the keyboard.
   bool _wasSelectingVerticallyWithKeyboard = false;
 
   // This is the affinity we use when a platform-supplied value has null
diff --git a/packages/flutter/lib/src/rendering/layer.dart b/packages/flutter/lib/src/rendering/layer.dart
index 2c7b068..e9e0cfa 100644
--- a/packages/flutter/lib/src/rendering/layer.dart
+++ b/packages/flutter/lib/src/rendering/layer.dart
@@ -21,7 +21,7 @@
 ///  * [Layer.findAnnotations], which create and use objects of this class.
 @immutable
 class AnnotationEntry<T> {
-  /// Create an entry of found annotation by providing the oject and related
+  /// Create an entry of found annotation by providing the object and related
   /// information.
   const AnnotationEntry({
     @required this.annotation,
@@ -590,11 +590,11 @@
 
   /// When true the texture that will not be updated with new frames.
   ///
-  /// This is used when resizing an embedded  Android views: When resizing
-  /// there is a short period during which the framework cannot tell
-  /// if the newest texture frame has the previous or new size, to workaround this
-  /// the framework "freezes" the texture just before resizing the Android view and unfreezes
-  /// it when it is certain that a frame with the new size is ready.
+  /// This is used when resizing an embedded  Android views: When resizing there
+  /// is a short period during which the framework cannot tell if the newest
+  /// texture frame has the previous or new size, to workaround this the
+  /// framework "freezes" the texture just before resizing the Android view and
+  /// un-freezes it when it is certain that a frame with the new size is ready.
   final bool freeze;
 
   @override
@@ -2338,7 +2338,7 @@
   /// The [offset] defaults to [Offset.zero] if not provided, and is ignored if
   /// [size] is not set.
   ///
-  /// The [offset] only offsets the clipping rectagle, and does not affect
+  /// The [offset] only offsets the clipping rectangle, and does not affect
   /// how the painting or annotation search is propagated to its children.
   final Offset offset;
 
diff --git a/packages/flutter/lib/src/semantics/semantics.dart b/packages/flutter/lib/src/semantics/semantics.dart
index 47c0930..9fbf264 100644
--- a/packages/flutter/lib/src/semantics/semantics.dart
+++ b/packages/flutter/lib/src/semantics/semantics.dart
@@ -751,11 +751,11 @@
   /// Doing so instructs screen readers to not read out the [value].
   final bool obscured;
 
-  /// Whether the [value] is coming from a field that supports multi-line text
+  /// Whether the [value] is coming from a field that supports multiline text
   /// editing.
   ///
   /// This option is only meaningful when [textField] is true to indicate
-  /// whether it's a single-line or multi-line text field.
+  /// whether it's a single-line or multiline text field.
   ///
   /// This option is null when [textField] is false.
   final bool multiline;
@@ -1737,7 +1737,7 @@
   TextSelection _textSelection;
 
   /// If this node represents a text field, this indicates whether or not it's
-  /// a multi-line text field.
+  /// a multiline text field.
   bool get isMultiline => _isMultiline;
   bool _isMultiline;
 
@@ -3697,10 +3697,10 @@
     _setFlag(SemanticsFlag.isObscured, value);
   }
 
-  /// Whether the text field is multi-line.
+  /// Whether the text field is multiline.
   ///
   /// This option is usually set in combination with [textField] to indicate
-  /// that the text field is configured to be multi-line.
+  /// that the text field is configured to be multiline.
   bool get isMultiline => _hasFlag(SemanticsFlag.isMultiline);
   set isMultiline(bool value) {
     _setFlag(SemanticsFlag.isMultiline, value);
diff --git a/packages/flutter/lib/src/services/text_input.dart b/packages/flutter/lib/src/services/text_input.dart
index 7572db1..2483b44 100644
--- a/packages/flutter/lib/src/services/text_input.dart
+++ b/packages/flutter/lib/src/services/text_input.dart
@@ -68,10 +68,10 @@
   /// Requests the default platform keyboard.
   static const TextInputType text = TextInputType._(0);
 
-  /// Optimize for multi-line textual information.
+  /// Optimize for multiline textual information.
   ///
   /// Requests the default platform keyboard, but accepts newlines when the
-  /// enter key is pressed. This is the input type used for all multi-line text
+  /// enter key is pressed. This is the input type used for all multiline text
   /// fields.
   static const TextInputType multiline = TextInputType._(1);
 
@@ -408,7 +408,7 @@
   /// Defaults to false.
   final bool obscureText;
 
-  /// Whether to enable auto-correction.
+  /// Whether to enable autocorrection.
   ///
   /// Defaults to true.
   final bool autocorrect;
diff --git a/packages/flutter/lib/src/widgets/automatic_keep_alive.dart b/packages/flutter/lib/src/widgets/automatic_keep_alive.dart
index 92cd0c8..386e780 100644
--- a/packages/flutter/lib/src/widgets/automatic_keep_alive.dart
+++ b/packages/flutter/lib/src/widgets/automatic_keep_alive.dart
@@ -214,7 +214,7 @@
               // If mounted is false, we went away as well, so there's nothing to do.
               // If _handles is no longer empty, then another client (or the same
               // client in a new place) registered itself before we had a chance to
-              // turn off keep-alive, so again there's nothing to do.
+              // turn off keepalive, so again there's nothing to do.
               setState(() {
                 assert(!_keepingAlive);
               });
@@ -273,7 +273,7 @@
 /// Failure to trigger the [handle] in the manner described above will likely
 /// cause the [AutomaticKeepAlive] to lose track of whether the widget should be
 /// kept alive or not, leading to memory leaks or lost data. For example, if the
-/// widget that requested keep-alive is removed from the subtree but doesn't
+/// widget that requested keepalive is removed from the subtree but doesn't
 /// trigger its [Listenable] on the way out, then the subtree will continue to
 /// be kept alive until the list itself is disposed. Similarly, if the
 /// [Listenable] is triggered while the widget needs to be kept alive, but a new
diff --git a/packages/flutter/lib/src/widgets/color_filter.dart b/packages/flutter/lib/src/widgets/color_filter.dart
index cad96a2..6e47e16 100644
--- a/packages/flutter/lib/src/widgets/color_filter.dart
+++ b/packages/flutter/lib/src/widgets/color_filter.dart
@@ -19,7 +19,7 @@
       : assert(colorFilter != null),
         super(key: key, child: child);
 
-  /// The color filter to apply to the child of this widvget.
+  /// The color filter to apply to the child of this widget.
   final ColorFilter colorFilter;
 
   @override
diff --git a/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart b/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart
index f4ecc80..ec04516 100644
--- a/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart
+++ b/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart
@@ -511,7 +511,7 @@
 /// A widget that can notify a descendent [DraggableScrollableSheet] that it
 /// should reset its position to the initial state.
 ///
-/// The [Scaffold] uses this widget to notify a persistentent bottom sheet that
+/// The [Scaffold] uses this widget to notify a persistent bottom sheet that
 /// the user has tapped back if the sheet has started to cover more of the body
 /// than when at its initial position. This is important for users of assistive
 /// technology, where dragging may be difficult to communicate.
diff --git a/packages/flutter/lib/src/widgets/editable_text.dart b/packages/flutter/lib/src/widgets/editable_text.dart
index 7b4bb0e..41b9bcc 100644
--- a/packages/flutter/lib/src/widgets/editable_text.dart
+++ b/packages/flutter/lib/src/widgets/editable_text.dart
@@ -544,7 +544,7 @@
   /// and CSS's [line-height](https://www.w3.org/TR/CSS2/visudet.html#line-height).
   /// {@endtemplate}
   ///
-  /// Within editable text and textfields, [StrutStyle] will not use its standalone
+  /// Within editable text and text fields, [StrutStyle] will not use its standalone
   /// default values, and will instead inherit omitted/null properties from the
   /// [TextStyle] instead. See [StrutStyle.inheritFromTextStyle].
   StrutStyle get strutStyle {
diff --git a/packages/flutter/lib/src/widgets/focus_manager.dart b/packages/flutter/lib/src/widgets/focus_manager.dart
index a054578..7737fb5 100644
--- a/packages/flutter/lib/src/widgets/focus_manager.dart
+++ b/packages/flutter/lib/src/widgets/focus_manager.dart
@@ -165,7 +165,7 @@
 ///
 /// There are several actors involved in the lifecycle of a
 /// [FocusNode]/[FocusScopeNode]. They are created and disposed by their
-/// _owner_, attached, detached, and reparented using a [FocusAttachment] by
+/// _owner_, attached, detached, and re-parented using a [FocusAttachment] by
 /// their _host_ (which must be owned by the [State] of a [StatefulWidget]), and
 /// they are managed by the [FocusManager]. Different parts of the [FocusNode]
 /// API are intended for these different actors.
diff --git a/packages/flutter/lib/src/widgets/focus_traversal.dart b/packages/flutter/lib/src/widgets/focus_traversal.dart
index 1753876..b6a119d 100644
--- a/packages/flutter/lib/src/widgets/focus_traversal.dart
+++ b/packages/flutter/lib/src/widgets/focus_traversal.dart
@@ -101,7 +101,7 @@
   @protected
   void invalidateScopeData(FocusScopeNode node) {}
 
-  /// This is called whenever the given [node] is reparented into a new scope,
+  /// This is called whenever the given [node] is re-parented into a new scope,
   /// so that the policy has a chance to update or invalidate any cached data
   /// that it maintains per scope about the node.
   ///
diff --git a/packages/flutter/lib/src/widgets/scroll_view.dart b/packages/flutter/lib/src/widgets/scroll_view.dart
index 78a7342..489fe84 100644
--- a/packages/flutter/lib/src/widgets/scroll_view.dart
+++ b/packages/flutter/lib/src/widgets/scroll_view.dart
@@ -721,7 +721,7 @@
 ///
 ///  * Letting [KeepAlive] be the root widget of the list child widget subtree
 ///    that needs to be preserved. The [KeepAlive] widget marks the child
-///    subtree's top render object child for keep-alive. When the associated top
+///    subtree's top render object child for keepalive. When the associated top
 ///    render object is scrolled out of view, the list keeps the child's render
 ///    object (and by extension, its associated elements and states) in a cache
 ///    list instead of destroying them. When scrolled back into view, the render
@@ -739,7 +739,7 @@
 ///
 ///    As an example, the [EditableText] widget signals its list child element
 ///    subtree to stay alive while its text field has input focus. If it doesn't
-///    have focus and no other descendants signaled for keep-alive via a
+///    have focus and no other descendants signaled for keepalive via a
 ///    [KeepAliveNotification], the list child element subtree will be destroyed
 ///    when scrolled away.
 ///
diff --git a/packages/flutter/lib/src/widgets/sliver.dart b/packages/flutter/lib/src/widgets/sliver.dart
index f42d5c8..8cbd16a 100644
--- a/packages/flutter/lib/src/widgets/sliver.dart
+++ b/packages/flutter/lib/src/widgets/sliver.dart
@@ -78,7 +78,7 @@
 ///
 ///  * Letting [KeepAlive] be the root widget of the sliver child widget subtree
 ///    that needs to be preserved. The [KeepAlive] widget marks the child
-///    subtree's top render object child for keep-alive. When the associated top
+///    subtree's top render object child for keepalive. When the associated top
 ///    render object is scrolled out of view, the sliver keeps the child's
 ///    render object (and by extension, its associated elements and states) in a
 ///    cache list instead of destroying them. When scrolled back into view, the
@@ -98,7 +98,7 @@
 ///
 ///    As an example, the [EditableText] widget signals its sliver child element
 ///    subtree to stay alive while its text field has input focus. If it doesn't
-///    have focus and no other descendants signaled for keep-alive via a
+///    have focus and no other descendants signaled for keepalive via a
 ///    [KeepAliveNotification], the sliver child element subtree will be
 ///    destroyed when scrolled away.
 ///
diff --git a/packages/flutter/lib/src/widgets/widget_inspector.dart b/packages/flutter/lib/src/widgets/widget_inspector.dart
index 626140a..5cf1aa0 100644
--- a/packages/flutter/lib/src/widgets/widget_inspector.dart
+++ b/packages/flutter/lib/src/widgets/widget_inspector.dart
@@ -703,7 +703,7 @@
 ///
 /// All methods returning String values return JSON.
 mixin WidgetInspectorService {
-  /// Ring of cached JSON values to prevent json from being garbage
+  /// Ring of cached JSON values to prevent JSON from being garbage
   /// collected before it can be requested over the Observatory protocol.
   final List<String> _serializeRing = List<String>(20);
   int _serializeRingIndex = 0;
@@ -1691,7 +1691,7 @@
   /// to be at most [width] pixels wide and [height] pixels tall. The returned
   /// image will never have a scale between logical pixels and the
   /// size of the output image larger than maxPixelRatio.
-  /// [margin] indicates the number of pixels relative to the unscaled size of
+  /// [margin] indicates the number of pixels relative to the un-scaled size of
   /// the [object] to include as a margin to include around the bounds of the
   /// [object] in the screenshot. Including a margin can be useful to capture
   /// areas that are slightly outside of the normal bounds of an object such as
diff --git a/packages/flutter/test/cupertino/dialog_test.dart b/packages/flutter/test/cupertino/dialog_test.dart
index 8ff2103..fce4207 100644
--- a/packages/flutter/test/cupertino/dialog_test.dart
+++ b/packages/flutter/test/cupertino/dialog_test.dart
@@ -642,7 +642,7 @@
 
     final RenderBox actionsSectionBox = findScrollableActionsSectionRenderBox(tester);
 
-    // The two multi-line buttons with large text are taller than 50% of the
+    // The two multiline buttons with large text are taller than 50% of the
     // dialog height, but with the accessibility layout policy, the 2 buttons
     // should be in a scrollable area equal to half the dialog height.
     expect(
diff --git a/packages/flutter/test/painting/image_data.dart b/packages/flutter/test/painting/image_data.dart
index 83a83af..f88801e 100644
--- a/packages/flutter/test/painting/image_data.dart
+++ b/packages/flutter/test/painting/image_data.dart
@@ -11,7 +11,7 @@
 ];
 
 /// An animated GIF image with 3 1x1 pixel frames (a red, green, and blue
-/// frames). The gif animates forever, and each frame has a 100ms delay.
+/// frames). The GIF animates forever, and each frame has a 100ms delay.
 const List<int> kAnimatedGif = <int> [
   0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0xa1, 0x03, 0x00,
   0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0x21,
diff --git a/packages/flutter/test/widgets/editable_text_show_on_screen_test.dart b/packages/flutter/test/widgets/editable_text_show_on_screen_test.dart
index e778c75..4b831b0 100644
--- a/packages/flutter/test/widgets/editable_text_show_on_screen_test.dart
+++ b/packages/flutter/test/widgets/editable_text_show_on_screen_test.dart
@@ -259,7 +259,7 @@
             children: <Widget>[
               EditableText(
                 backgroundCursorColor: Colors.grey,
-                maxLines: null, // multi-line
+                maxLines: null, // multiline
                 controller: controller,
                 focusNode: focusNode,
                 style: textStyle,
diff --git a/packages/flutter/test/widgets/editable_text_test.dart b/packages/flutter/test/widgets/editable_text_test.dart
index ef0949d..98a704b 100644
--- a/packages/flutter/test/widgets/editable_text_test.dart
+++ b/packages/flutter/test/widgets/editable_text_test.dart
@@ -756,7 +756,7 @@
 
   /// Toolbar is not used in Flutter Web. Skip this check.
   ///
-  /// Web is using native dom elements (it is also used as platform input)
+  /// Web is using native DOM elements (it is also used as platform input)
   /// to enable clipboard functionality of the toolbar: copy, paste, select,
   /// cut. It might also provide additional functionality depending on the
   /// browser (such as translation). Due to this, in browsers, we should not
diff --git a/packages/flutter/test/widgets/image_data.dart b/packages/flutter/test/widgets/image_data.dart
index 83a83af..f88801e 100644
--- a/packages/flutter/test/widgets/image_data.dart
+++ b/packages/flutter/test/widgets/image_data.dart
@@ -11,7 +11,7 @@
 ];
 
 /// An animated GIF image with 3 1x1 pixel frames (a red, green, and blue
-/// frames). The gif animates forever, and each frame has a 100ms delay.
+/// frames). The GIF animates forever, and each frame has a 100ms delay.
 const List<int> kAnimatedGif = <int> [
   0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0xa1, 0x03, 0x00,
   0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0x21,
diff --git a/packages/flutter_driver/lib/src/common/diagnostics_tree.dart b/packages/flutter_driver/lib/src/common/diagnostics_tree.dart
index 48a56bd..475f358 100644
--- a/packages/flutter_driver/lib/src/common/diagnostics_tree.dart
+++ b/packages/flutter_driver/lib/src/common/diagnostics_tree.dart
@@ -17,7 +17,7 @@
 
 EnumIndex<DiagnosticsType> _diagnosticsTypeIndex = EnumIndex<DiagnosticsType>(DiagnosticsType.values);
 
-/// A Flutter Driver command to retrieve the json-serialized [DiagnosticsNode]
+/// A Flutter Driver command to retrieve the JSON-serialized [DiagnosticsNode]
 /// tree of the object identified by [finder].
 ///
 /// The [DiagnosticsType] of the [DiagnosticsNode] tree returned is specified by
@@ -67,7 +67,7 @@
   /// Creates a [DiagnosticsTreeResult].
   const DiagnosticsTreeResult(this.json);
 
-  /// The json encoded [DiagnosticsNode] tree requested by the
+  /// The JSON encoded [DiagnosticsNode] tree requested by the
   /// [GetDiagnosticsTree] command.
   final Map<String, Object> json;
 
diff --git a/packages/flutter_driver/lib/src/common/find.dart b/packages/flutter_driver/lib/src/common/find.dart
index a5e9bcb..236491d 100644
--- a/packages/flutter_driver/lib/src/common/find.dart
+++ b/packages/flutter_driver/lib/src/common/find.dart
@@ -435,7 +435,7 @@
   /// Creates a command which finds a Widget and then looks up the semantic id.
   GetSemanticsId(SerializableFinder finder, {Duration timeout}) : super(finder, timeout: timeout);
 
-  /// Creates a command from a json map.
+  /// Creates a command from a JSON map.
   GetSemanticsId.deserialize(Map<String, String> json)
     : super.deserialize(json);
 
diff --git a/packages/flutter_driver/lib/src/extension/extension.dart b/packages/flutter_driver/lib/src/extension/extension.dart
index e4e9a79..17d6dea 100644
--- a/packages/flutter_driver/lib/src/extension/extension.dart
+++ b/packages/flutter_driver/lib/src/extension/extension.dart
@@ -76,7 +76,7 @@
 ///
 /// `silenceErrors` will prevent exceptions from being logged. This is useful
 /// for tests where exceptions are expected. Defaults to false. Any errors
-/// will still be returned in the `response` field of the result json along
+/// will still be returned in the `response` field of the result JSON along
 /// with an `isError` boolean.
 void enableFlutterDriverExtension({ DataHandler handler, bool silenceErrors = false }) {
   assert(WidgetsBinding.instance == null);
diff --git a/packages/flutter_goldens/lib/flutter_goldens.dart b/packages/flutter_goldens/lib/flutter_goldens.dart
index 494f2ea..c639db7 100644
--- a/packages/flutter_goldens/lib/flutter_goldens.dart
+++ b/packages/flutter_goldens/lib/flutter_goldens.dart
@@ -156,7 +156,7 @@
     return goldenFile;
   }
 
-  /// Prepends the golden Uri with the library name that encloses the current
+  /// Prepends the golden URL with the library name that encloses the current
   /// test.
   Uri _addPrefix(Uri golden) {
     final String prefix = basedir.pathSegments[basedir.pathSegments.length - 2];
diff --git a/packages/flutter_goldens/test/json_templates.dart b/packages/flutter_goldens/test/json_templates.dart
index 7072527..93b1480 100644
--- a/packages/flutter_goldens/test/json_templates.dart
+++ b/packages/flutter_goldens/test/json_templates.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-/// Json response template for Skia Gold expectations request:
+/// JSON response template for Skia Gold expectations request:
 /// https://flutter-gold.skia.org/json/expectations/commit/HEAD
 String rawExpectationsTemplate() {
   return '''
diff --git a/packages/flutter_goldens_client/lib/skia_client.dart b/packages/flutter_goldens_client/lib/skia_client.dart
index 066ebe8..5f9d5d6 100644
--- a/packages/flutter_goldens_client/lib/skia_client.dart
+++ b/packages/flutter_goldens_client/lib/skia_client.dart
@@ -58,7 +58,7 @@
   final io.HttpClient httpClient;
 
   /// The local [Directory] within the [comparisonRoot] for the current test
-  /// context. In this directory, the client will create image and json files
+  /// context. In this directory, the client will create image and JSON files
   /// for the goldctl tool to use.
   ///
   /// This is informed by the [FlutterGoldenFileComparator] [basedir]. It cannot
@@ -404,7 +404,7 @@
     this.status,
   });
 
-  /// Create a digest from requested json.
+  /// Create a digest from requested JSON.
   factory SkiaGoldDigest.fromJson(Map<String, dynamic> json) {
     if (json == null)
       return null;
@@ -424,10 +424,10 @@
   /// Parameter set for the given test, e.g. Platform : Windows.
   final Map<String, dynamic> paramSet;
 
-  /// Test name associated with the digest, e.g. positive or untriaged.
+  /// Test name associated with the digest, e.g. positive or un-triaged.
   final String testName;
 
-  /// Status of the given digest, e.g. positive or untriaged.
+  /// Status of the given digest, e.g. positive or un-triaged.
   final String status;
 
   /// Validates a given digest against the current testing conditions.
diff --git a/packages/flutter_localizations/lib/src/cupertino_localizations.dart b/packages/flutter_localizations/lib/src/cupertino_localizations.dart
index e08a915..158c0fe 100644
--- a/packages/flutter_localizations/lib/src/cupertino_localizations.dart
+++ b/packages/flutter_localizations/lib/src/cupertino_localizations.dart
@@ -25,7 +25,7 @@
 ///
 /// {@macro flutter.localizations.cupertino.languages}
 ///
-/// This list is available programatically via [kCupertinoSupportedLanguages].
+/// This list is available programmatically via [kCupertinoSupportedLanguages].
 ///
 /// ## Sample code
 ///
diff --git a/packages/flutter_localizations/lib/src/material_localizations.dart b/packages/flutter_localizations/lib/src/material_localizations.dart
index c1f57fd..2e86077 100644
--- a/packages/flutter_localizations/lib/src/material_localizations.dart
+++ b/packages/flutter_localizations/lib/src/material_localizations.dart
@@ -23,7 +23,7 @@
 ///
 /// {@macro flutter.localizations.material.languages}
 ///
-/// This list is available programatically via [kMaterialSupportedLanguages].
+/// This list is available programmatically via [kMaterialSupportedLanguages].
 ///
 /// ## Sample code
 ///
diff --git a/packages/flutter_test/lib/src/accessibility.dart b/packages/flutter_test/lib/src/accessibility.dart
index 5b62d3d..9f3ecaf 100644
--- a/packages/flutter_test/lib/src/accessibility.dart
+++ b/packages/flutter_test/lib/src/accessibility.dart
@@ -65,7 +65,7 @@
   String get description;
 }
 
-/// A guideline which enforces that all tapable semantics nodes have a minimum
+/// A guideline which enforces that all tappable semantics nodes have a minimum
 /// size.
 ///
 /// Each platform defines its own guidelines for minimum tap areas.
@@ -73,7 +73,7 @@
 class MinimumTapTargetGuideline extends AccessibilityGuideline {
   const MinimumTapTargetGuideline._(this.size, this.link);
 
-  /// The minimum allowed size of a tapable node.
+  /// The minimum allowed size of a tappable node.
   final Size size;
 
   /// A link describing the tap target guidelines for a platform.
@@ -419,7 +419,7 @@
   }
 }
 
-/// A guideline which requires tapable semantic nodes a minimum size of 48 by 48.
+/// A guideline which requires tappable semantic nodes a minimum size of 48 by 48.
 ///
 /// See also:
 ///
@@ -429,7 +429,7 @@
   'https://support.google.com/accessibility/android/answer/7101858?hl=en',
 );
 
-/// A guideline which requires tapable semantic nodes a minimum size of 44 by 44.
+/// A guideline which requires tappable semantic nodes a minimum size of 44 by 44.
 ///
 /// See also:
 ///
diff --git a/packages/flutter_test/lib/src/matchers.dart b/packages/flutter_test/lib/src/matchers.dart
index b9dfe41..060de9a 100644
--- a/packages/flutter_test/lib/src/matchers.dart
+++ b/packages/flutter_test/lib/src/matchers.dart
@@ -142,7 +142,7 @@
 /// empty, and does not contain the default `Instance of ...` string.
 const Matcher hasOneLineDescription = _HasOneLineDescription();
 
-/// Asserts that an object's toStringDeep() is a plausible multi-line
+/// Asserts that an object's toStringDeep() is a plausible multiline
 /// description.
 ///
 /// Specifically, this matcher checks that an object's
@@ -308,7 +308,7 @@
 /// treated as the image for the widget. As such, you may choose to wrap a test
 /// widget in a [RepaintBoundary] to specify a particular focus for the test.
 ///
-/// The [key] may be either a [Uri] or a [String] representation of a URI.
+/// The [key] may be either a [Uri] or a [String] representation of a URL.
 ///
 /// The [version] is a number that can be used to differentiate historical
 /// golden files. This parameter is optional.
@@ -589,8 +589,8 @@
 ///
 /// Supported accessibility guidelines:
 ///
-///   * [androidTapTargetGuideline], for Android minimum tapable area guidelines.
-///   * [iOSTapTargetGuideline], for iOS minimum tapable area guidelines.
+///   * [androidTapTargetGuideline], for Android minimum tappable area guidelines.
+///   * [iOSTapTargetGuideline], for iOS minimum tappable area guidelines.
 ///   * [textContrastGuideline], for WCAG minimum text contrast guidelines.
 AsyncMatcher meetsGuideline(AccessibilityGuideline guideline) {
   return _MatchesAccessibilityGuideline(guideline);
@@ -812,7 +812,7 @@
   ) {
     if (matchState.containsKey(_mismatchedValueKey)) {
       final String actualValue = matchState[_mismatchedValueKey] as String;
-      // Leading whitespace is added so that lines in the multi-line
+      // Leading whitespace is added so that lines in the multiline
       // description returned by addDescriptionOf are all indented equally
       // which makes the output easier to read for this case.
       return mismatchDescription
diff --git a/packages/flutter_tools/lib/src/android/gradle.dart b/packages/flutter_tools/lib/src/android/gradle.dart
index 23e41c2..39be388 100644
--- a/packages/flutter_tools/lib/src/android/gradle.dart
+++ b/packages/flutter_tools/lib/src/android/gradle.dart
@@ -208,7 +208,7 @@
 ///
 /// * [project] is typically [FlutterProject.current()].
 /// * [androidBuildInfo] is the build configuration.
-/// * [target] is the target dart entrypoint. Typically, `lib/main.dart`.
+/// * [target] is the target dart entry point. Typically, `lib/main.dart`.
 /// * If [isBuildingBundle] is `true`, then the output artifact is an `*.aab`,
 ///   otherwise the output artifact is an `*.apk`.
 /// * The plugins are built as AARs if [shouldBuildPluginAsAar] is `true`. This isn't set by default
diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart
index 1a2503c..e6216c7 100644
--- a/packages/flutter_tools/lib/src/asset.dart
+++ b/packages/flutter_tools/lib/src/asset.dart
@@ -257,11 +257,11 @@
 
   final String baseDir;
 
-  /// A platform-independent Uri where this asset can be found on disk on the
+  /// A platform-independent URL where this asset can be found on disk on the
   /// host system relative to [baseDir].
   final Uri relativeUri;
 
-  /// A platform-independent Uri representing the entry for the asset manifest.
+  /// A platform-independent URL representing the entry for the asset manifest.
   final Uri entryUri;
 
   File get assetFile {
diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart
index 690a9c8..ff66917 100644
--- a/packages/flutter_tools/lib/src/build_info.dart
+++ b/packages/flutter_tools/lib/src/build_info.dart
@@ -173,7 +173,7 @@
   /// other development features.
   bool get isRelease => releaseModes.contains(this);
 
-  /// Whether this mode is using the jit runtime.
+  /// Whether this mode is using the JIT runtime.
   bool get isJit => jitModes.contains(this);
 
   /// Whether this mode is using the precompiled runtime.
diff --git a/packages/flutter_tools/lib/src/build_runner/build_script.dart b/packages/flutter_tools/lib/src/build_runner/build_script.dart
index e4ca378..1b783de 100644
--- a/packages/flutter_tools/lib/src/build_runner/build_script.dart
+++ b/packages/flutter_tools/lib/src/build_runner/build_script.dart
@@ -175,14 +175,14 @@
       defaultGenerateFor: const InputSet()),
 ];
 
-/// The entrypoint to this build script.
+/// The entry point to this build script.
 Future<void> main(List<String> args, [SendPort sendPort]) async {
   core.overrideGeneratedOutputDirectory('flutter_web');
   final int result = await build_runner.run(args, builders);
   sendPort?.send(result);
 }
 
-/// A ddc-only entrypoint builder that respects the Flutter target flag.
+/// A ddc-only entry point builder that respects the Flutter target flag.
 class FlutterWebTestEntrypointBuilder implements Builder {
   const FlutterWebTestEntrypointBuilder();
 
@@ -208,7 +208,7 @@
   }
 }
 
-/// A ddc-only entrypoint builder that respects the Flutter target flag.
+/// A ddc-only entry point builder that respects the Flutter target flag.
 class FlutterWebEntrypointBuilder implements Builder {
   const FlutterWebEntrypointBuilder(this.release, this.profile, this.flutterWebSdk);
 
@@ -237,7 +237,7 @@
   }
 }
 
-/// Bootstraps the test entrypoint.
+/// Bootstraps the test entry point.
 class FlutterWebTestBootstrapBuilder implements Builder {
   const FlutterWebTestBootstrapBuilder();
 
@@ -347,7 +347,7 @@
   }
 }
 
-/// A shell builder which generates the web specific entrypoint.
+/// A shell builder which generates the web specific entry point.
 class FlutterWebShellBuilder implements Builder {
   const FlutterWebShellBuilder({this.hasPlugins = false, this.initializePlatform = true});
 
@@ -403,7 +403,7 @@
   };
 }
 
-/// Returns whether or not [dartId] is an app entrypoint (basically, whether
+/// Returns whether or not [dartId] is an app entry point (basically, whether
 /// or not it has a `main` function).
 Future<bool> _isAppEntryPoint(AssetId dartId, AssetReader reader) async {
   assert(dartId.extension == '.dart');
diff --git a/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart b/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart
index 3a80cc6..5a5a482 100644
--- a/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart
+++ b/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart
@@ -94,7 +94,7 @@
   }
 }
 
-/// Handles mapping a single root file scheme to a multiroot scheme.
+/// Handles mapping a single root file scheme to a multi-root scheme.
 ///
 /// This allows one build_runner build to read the output from a previous
 /// isolated build.
diff --git a/packages/flutter_tools/lib/src/build_runner/web_fs.dart b/packages/flutter_tools/lib/src/build_runner/web_fs.dart
index ec2645a..8fb6260 100644
--- a/packages/flutter_tools/lib/src/build_runner/web_fs.dart
+++ b/packages/flutter_tools/lib/src/build_runner/web_fs.dart
@@ -71,7 +71,7 @@
   bool enableDebugExtension,
 });
 
-/// A function with the same signatuure as [WebFs.start].
+/// A function with the same signature as [WebFs.start].
 typedef WebFsFactory = Future<WebFs> Function({
   @required String target,
   @required FlutterProject flutterProject,
@@ -100,7 +100,7 @@
     this._dartDefines,
   );
 
-  /// The server uri.
+  /// The server URL.
   final String uri;
 
   final HttpServer _server;
diff --git a/packages/flutter_tools/lib/src/build_system/build_system.dart b/packages/flutter_tools/lib/src/build_system/build_system.dart
index 9677170..5d38251 100644
--- a/packages/flutter_tools/lib/src/build_system/build_system.dart
+++ b/packages/flutter_tools/lib/src/build_system/build_system.dart
@@ -29,7 +29,7 @@
 /// A reasonable amount of files to open at the same time.
 ///
 /// This number is somewhat arbitrary - it is difficult to detect whether
-/// or not we'll run out of file descriptiors when using async dart:io
+/// or not we'll run out of file descriptors when using async dart:io
 /// APIs.
 const int kMaxOpenFiles = 64;
 
@@ -83,7 +83,7 @@
 ///
 /// ## Code review
 ///
-/// ### Targes should only depend on files that are provided as inputs
+/// ### Targets should only depend on files that are provided as inputs
 ///
 /// Example: gen_snapshot must be provided as an input to the aot_elf
 /// build steps, even though it isn't a source file. This ensures that changes
diff --git a/packages/flutter_tools/lib/src/build_system/source.dart b/packages/flutter_tools/lib/src/build_system/source.dart
index 0174461..44e54a2 100644
--- a/packages/flutter_tools/lib/src/build_system/source.dart
+++ b/packages/flutter_tools/lib/src/build_system/source.dart
@@ -81,9 +81,9 @@
         .map((String path) => fs.file(path));
   }
 
-  /// Visit a [Source] which contains a file uri.
+  /// Visit a [Source] which contains a file URL.
   ///
-  /// The uri may include constants defined in an [Environment]. If
+  /// The URL may include constants defined in an [Environment]. If
   /// [optional] is true, the file is not required to exist. In this case, it
   /// is never resolved as an input.
   void visitPattern(String pattern, bool optional) {
@@ -182,7 +182,7 @@
 
 /// A description of an input or output of a [Target].
 abstract class Source {
-  /// This source is a file-uri which contains some references to magic
+  /// This source is a file URL which contains some references to magic
   /// environment variables.
   const factory Source.pattern(String pattern, { bool optional }) = _PatternSource;
   /// The source is provided by an [Artifact].
diff --git a/packages/flutter_tools/lib/src/build_system/targets/dart.dart b/packages/flutter_tools/lib/src/build_system/targets/dart.dart
index e03a377..6c9b196 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/dart.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/dart.dart
@@ -42,7 +42,7 @@
 
 /// Alternative scheme for file URIs.
 ///
-/// May be used along with [kFileSystemRoots] to support a multiroot
+/// May be used along with [kFileSystemRoots] to support a multi-root
 /// filesystem.
 const String kFileSystemScheme = 'FileSystemScheme';
 
@@ -62,7 +62,7 @@
 /// The other supported value is armv7, the 32-bit iOS architecture.
 const String kIosArchs = 'IosArchs';
 
-/// Copies the prebuilt flutter bundle.
+/// Copies the pre-built flutter bundle.
 // This is a one-off rule for implementing build bundle in terms of assemble.
 class CopyFlutterBundle extends Target {
   const CopyFlutterBundle();
@@ -118,7 +118,7 @@
   ];
 }
 
-/// Copies the prebuilt flutter bundle for release mode.
+/// Copies the pre-built flutter bundle for release mode.
 class ReleaseCopyFlutterBundle extends CopyFlutterBundle {
   const ReleaseCopyFlutterBundle();
 
@@ -331,7 +331,7 @@
   ];
 }
 
-/// Copies the prebuilt flutter aot bundle.
+/// Copies the pre-built flutter aot bundle.
 // This is a one-off rule for implementing build aot in terms of assemble.
 abstract class CopyFlutterAotBundle extends Target {
   const CopyFlutterAotBundle();
diff --git a/packages/flutter_tools/lib/src/build_system/targets/ios.dart b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
index 3f52166..140ec2b 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
@@ -18,7 +18,7 @@
 /// Supports compiling a dart kernel file to an assembly file.
 ///
 /// If more than one iOS arch is provided, then this rule will
-/// produce a univeral binary.
+/// produce a universal binary.
 abstract class AotAssemblyBase extends Target {
   const AotAssemblyBase();
 
diff --git a/packages/flutter_tools/lib/src/build_system/targets/web.dart b/packages/flutter_tools/lib/src/build_system/targets/web.dart
index 531c71e..5ebc34a 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/web.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/web.dart
@@ -26,7 +26,7 @@
 /// Valid values are O1 (lowest, profile default) to O4 (highest, release default).
 const String kDart2jsOptimization = 'Dart2jsOptimization';
 
-/// Generates an entrypoint for a web target.
+/// Generates an entry point for a web target.
 class WebEntrypointTarget extends Target {
   const WebEntrypointTarget();
 
@@ -94,7 +94,7 @@
   }
 }
 
-/// Compiles a web entrypoint with dart2js.
+/// Compiles a web entry point with dart2js.
 class Dart2JSTarget extends Target {
   const Dart2JSTarget();
 
diff --git a/packages/flutter_tools/lib/src/codegen.dart b/packages/flutter_tools/lib/src/codegen.dart
index a85bd86..ea50d8b 100644
--- a/packages/flutter_tools/lib/src/codegen.dart
+++ b/packages/flutter_tools/lib/src/codegen.dart
@@ -33,7 +33,7 @@
 abstract class CodeGenerator {
   const CodeGenerator();
 
-  /// Starts a persistent code generting daemon.
+  /// Starts a persistent code generating daemon.
   ///
   /// The defines of the daemon command are the arguments required in the
   /// flutter_build kernel builder.
@@ -44,7 +44,7 @@
   Future<void> generateBuildScript(FlutterProject flutterProject);
 
   /// Create generated packages file which adds a multi-root scheme to the user's
-  /// project directory. Currently we only replace the root package with a multiroot
+  /// project directory. Currently we only replace the root package with a multi-root
   /// scheme. To support codegen on arbitrary packages we would need to do
   /// this for each dependency.
   void updatePackages(FlutterProject flutterProject) {
@@ -83,7 +83,7 @@
 /// An implementation of the [KernelCompiler] which delegates to build_runner.
 ///
 /// Only a subset of the arguments provided to the [KernelCompiler] are
-/// supported here. Using the build pipeline implies a fixed multiroot
+/// supported here. Using the build pipeline implies a fixed multi-root
 /// filesystem and requires a pubspec.
 class CodeGeneratingKernelCompiler implements KernelCompiler {
   const CodeGeneratingKernelCompiler();
diff --git a/packages/flutter_tools/lib/src/commands/build_aar.dart b/packages/flutter_tools/lib/src/commands/build_aar.dart
index b59518e..bd6e398 100644
--- a/packages/flutter_tools/lib/src/commands/build_aar.dart
+++ b/packages/flutter_tools/lib/src/commands/build_aar.dart
@@ -111,7 +111,7 @@
     return null;
   }
 
-  /// Returns the [FlutterProject] which is determinated from the remaining command-line
+  /// Returns the [FlutterProject] which is determined from the remaining command-line
   /// argument if any or the current working directory.
   FlutterProject _getProject() {
     if (argResults.rest.isEmpty) {
diff --git a/packages/flutter_tools/lib/src/commands/train.dart b/packages/flutter_tools/lib/src/commands/train.dart
index 9bd0be5..4eb9a88 100644
--- a/packages/flutter_tools/lib/src/commands/train.dart
+++ b/packages/flutter_tools/lib/src/commands/train.dart
@@ -4,7 +4,7 @@
 
 import '../runner/flutter_command.dart';
 
-/// This command is run when generating the app-jit snapshot for the tool, so it cannot access the Cache
+/// This command is run when generating the app-JIT snapshot for the tool, so it cannot access the Cache
 /// or any artifacts that haven't been downloaded yet.
 class TrainingCommand extends FlutterCommand {
   @override
diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart
index ed28878..3e8aee9 100644
--- a/packages/flutter_tools/lib/src/commands/update_packages.dart
+++ b/packages/flutter_tools/lib/src/commands/update_packages.dart
@@ -1207,7 +1207,7 @@
   /// dependencies section). We ignore if something is a dependency or
   /// dev_dependency (pub won't use different versions for those two).
   ///
-  /// We then parse out the package name, version number, and subdependencies for
+  /// We then parse out the package name, version number, and sub-dependencies for
   /// each entry, and store than in our _versions and _dependencyTree fields
   /// above.
   String fill(String message) {
diff --git a/packages/flutter_tools/lib/src/dart/package_map.dart b/packages/flutter_tools/lib/src/dart/package_map.dart
index 862d256..cee8cab 100644
--- a/packages/flutter_tools/lib/src/dart/package_map.dart
+++ b/packages/flutter_tools/lib/src/dart/package_map.dart
@@ -46,7 +46,7 @@
   /// Returns the path to [packageUri].
   String pathForPackage(Uri packageUri) => uriForPackage(packageUri).path;
 
-  /// Returns the path to [packageUri] as Uri.
+  /// Returns the path to [packageUri] as URL.
   Uri uriForPackage(Uri packageUri) {
     assert(packageUri.scheme == 'package');
     final List<String> pathSegments = packageUri.pathSegments.toList();
diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart
index 9bba2d7..129c09b 100644
--- a/packages/flutter_tools/lib/src/devfs.dart
+++ b/packages/flutter_tools/lib/src/devfs.dart
@@ -534,5 +534,5 @@
   }
 }
 
-/// Converts a platform-specific file path to a platform-independent Uri path.
+/// Converts a platform-specific file path to a platform-independent URL path.
 String _asUriPath(String filePath) => fs.path.toUri(filePath).path + '/';
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index 7e8e4e5..46b65a5 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -158,7 +158,7 @@
 
   /// Find and return a list of devices based on the current project and environment.
   ///
-  /// Returns a list of deviecs specified by the user.
+  /// Returns a list of devices specified by the user.
   ///
   /// * If the user specified '-d all', then return all connected devices which
   /// support the current project, except for fuchsia and web.
@@ -221,7 +221,7 @@
 
   /// Returns whether the device is supported for the project.
   ///
-  /// This exists to allow the check to be overriden for google3 clients.
+  /// This exists to allow the check to be overridden for google3 clients.
   bool isDeviceSupportedForProject(Device device, FlutterProject flutterProject) {
     return device.isSupportedForProject(flutterProject);
   }
@@ -545,7 +545,7 @@
   final int deviceVmServicePort;
   final String port;
   final String hostname;
-  /// A file where the vmservice uri should be written after the application is started.
+  /// A file where the vmservice URL should be written after the application is started.
   final String vmserviceOutFile;
 
   bool get hasObservatoryPort => hostVmServicePort != null;
diff --git a/packages/flutter_tools/lib/src/doctor.dart b/packages/flutter_tools/lib/src/doctor.dart
index 3150b23..82f61d5 100644
--- a/packages/flutter_tools/lib/src/doctor.dart
+++ b/packages/flutter_tools/lib/src/doctor.dart
@@ -385,11 +385,11 @@
 
   List<ValidationResult> _subResults;
 
-  /// Subvalidator results.
+  /// Sub-validator results.
   ///
-  /// To avoid losing information when results are merged, the subresults are
+  /// To avoid losing information when results are merged, the sub-results are
   /// cached on this field when they are available. The results are in the same
-  /// order as the subvalidator list.
+  /// order as the sub-validator list.
   List<ValidationResult> get subResults => _subResults;
 
   @override
diff --git a/packages/flutter_tools/lib/src/features.dart b/packages/flutter_tools/lib/src/features.dart
index b5b45e7..de23ec3 100644
--- a/packages/flutter_tools/lib/src/features.dart
+++ b/packages/flutter_tools/lib/src/features.dart
@@ -261,7 +261,7 @@
 
   /// Whether the feature is available on this channel.
   ///
-  /// If not provded, defaults to `false`. This implies that the feature
+  /// If not provided, defaults to `false`. This implies that the feature
   /// cannot be enabled even by the settings below.
   final bool available;
 
diff --git a/packages/flutter_tools/lib/src/flutter_manifest.dart b/packages/flutter_tools/lib/src/flutter_manifest.dart
index 90029ae..ca33963 100644
--- a/packages/flutter_tools/lib/src/flutter_manifest.dart
+++ b/packages/flutter_tools/lib/src/flutter_manifest.dart
@@ -319,7 +319,7 @@
 
 /// This method should be kept in sync with the schema in
 /// `$FLUTTER_ROOT/packages/flutter_tools/schema/pubspec_yaml.json`,
-/// but avoid introducing depdendencies on packages for simple validation.
+/// but avoid introducing dependencies on packages for simple validation.
 bool _validate(YamlMap manifest) {
   final List<String> errors = <String>[];
   for (final MapEntry<dynamic, dynamic> kvp in manifest.entries) {
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
index b0572e6..fe8673f 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
@@ -16,7 +16,7 @@
 /// This is a simple wrapper around the custom kernel compiler from the Fuchsia
 /// SDK.
 class FuchsiaKernelCompiler {
-  /// Compiles the [fuchsiaProject] with entrypoint [target] to a collection of
+  /// Compiles the [fuchsiaProject] with entry point [target] to a collection of
   /// .dilp files (consisting of the app split along package: boundaries, but
   /// the Flutter tool should make no use of that fact), and a manifest that
   /// refers to them.
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_pm.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_pm.dart
index 80ad58e..9cfaf06 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_pm.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_pm.dart
@@ -99,9 +99,9 @@
     ]);
   }
 
-  /// Spawns an http server in a new process for serving Fuchisa packages.
+  /// Spawns an http server in a new process for serving Fuchsia packages.
   ///
-  /// The arguemnt [repoPath] should have previously been an arguemnt to
+  /// The argument [repoPath] should have previously been an argument to
   /// [newrepo]. The [host] should be the host reported by
   /// [FuchsiaDevFinder.resolve], and [port] should be an unused port for the
   /// http server to bind.
@@ -187,13 +187,13 @@
 
   Process _process;
 
-  /// The url that can be used by the device to access this package server.
+  /// The URL that can be used by the device to access this package server.
   String get url => 'http://$_host:$_port';
 
   // The name used to reference the server by fuchsia-pkg:// urls.
   final String name;
 
-  /// Usees [FuchiaPM.newrepo] and [FuchsiaPM.serve] to spin up a new Fuchsia
+  /// Uses [FuchiaPM.newrepo] and [FuchsiaPM.serve] to spin up a new Fuchsia
   /// package server.
   ///
   /// Returns false if the repo could not be created or the server could not
diff --git a/packages/flutter_tools/lib/src/fuchsia/tiles_ctl.dart b/packages/flutter_tools/lib/src/fuchsia/tiles_ctl.dart
index 59ed24a..3a677f7 100644
--- a/packages/flutter_tools/lib/src/fuchsia/tiles_ctl.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/tiles_ctl.dart
@@ -52,7 +52,7 @@
     return result.exitCode == 0;
   }
 
-  /// Returns a mapping of tile keys to app urls.
+  /// Returns a mapping of tile keys to app URLs.
   ///
   /// Returns an empty mapping if tiles_ctl is running but no apps are running.
   /// Returns null if tiles_ctl is not running.
@@ -86,7 +86,7 @@
   ///
   /// The app is passed the arguments in [args]. Flutter apps receive these
   /// arguments as arguments to `main()`. [url] should be formatted as a
-  /// Fuchsia-style package url, e.g.:
+  /// Fuchsia-style package URL, e.g.:
   ///     fuchsia-pkg://fuchsia.com/flutter_gallery#meta/flutter_gallery.cmx
   /// Returns true on success and false on failure.
   Future<bool> add(FuchsiaDevice device, String url, List<String> args) async {
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 97b0380..b11a627 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -629,9 +629,9 @@
   set idevicesyslogProcess(Process process) => _idevicesyslogProcess = process;
   Process _idevicesyslogProcess;
 
-  // Returns a stateful line handler to properly capture multi-line output.
+  // Returns a stateful line handler to properly capture multiline output.
   //
-  // For multi-line log messages, any line after the first is logged without
+  // For multiline log messages, any line after the first is logged without
   // any specific prefix. To properly capture those, we enter "printing" mode
   // after matching a log line from the runner. When in printing mode, we print
   // all lines until we find the start of another log message (from any app).
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart
index 80575bf..6751ab6 100644
--- a/packages/flutter_tools/lib/src/project.dart
+++ b/packages/flutter_tools/lib/src/project.dart
@@ -893,7 +893,7 @@
   Future<void> ensureReadyForPlatformSpecificTooling() async {}
 }
 
-/// The Fuchisa sub project
+/// The Fuchsia sub project
 class FuchsiaProject {
   FuchsiaProject._(this.project);
 
diff --git a/packages/flutter_tools/lib/src/protocol_discovery.dart b/packages/flutter_tools/lib/src/protocol_discovery.dart
index 796203d..6a04230 100644
--- a/packages/flutter_tools/lib/src/protocol_discovery.dart
+++ b/packages/flutter_tools/lib/src/protocol_discovery.dart
@@ -63,20 +63,20 @@
   StreamSubscription<String> _deviceLogSubscription;
   _BufferedStreamController<Uri> _uriStreamController;
 
-  /// The discovered service URI.
+  /// The discovered service URL.
   /// Use [uris] instead.
   // TODO(egarciad): replace `uri` for `uris`.
   Future<Uri> get uri {
     return uris.first;
   }
 
-  /// The discovered service URIs.
+  /// The discovered service URLs.
   ///
-  /// When a new observatory URI is available in [logReader],
-  /// the URIs are forwarded at most once every [throttleDuration].
+  /// When a new observatory URL: is available in [logReader],
+  /// the URLs are forwarded at most once every [throttleDuration].
   ///
   /// Port forwarding is only attempted when this is invoked,
-  /// for each observatory URI in the stream.
+  /// for each observatory URL in the stream.
   Stream<Uri> get uris {
     return _uriStreamController.stream
       .transform(_throttle<Uri>(
diff --git a/packages/flutter_tools/lib/src/reporting/usage.dart b/packages/flutter_tools/lib/src/reporting/usage.dart
index d352632..b08cada 100644
--- a/packages/flutter_tools/lib/src/reporting/usage.dart
+++ b/packages/flutter_tools/lib/src/reporting/usage.dart
@@ -8,7 +8,7 @@
 
 /// The collection of custom dimensions understood by the analytics backend.
 /// When adding to this list, first ensure that the custom dimension is
-/// defined in the backend, or will be defined shortly after the relevent PR
+/// defined in the backend, or will be defined shortly after the relevant PR
 /// lands.
 enum CustomDimensions {
   sessionHostOsDetails,  // cd1
@@ -92,7 +92,7 @@
   /// Whether this is the first run of the tool.
   bool get isFirstRun;
 
-  /// Whether analytics reporting should be supressed.
+  /// Whether analytics reporting should be suppressed.
   bool get suppressAnalytics;
 
   /// Suppress analytics for this session.
diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart
index 0fed5a3..14f7d43 100644
--- a/packages/flutter_tools/lib/src/test/flutter_platform.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart
@@ -293,7 +293,7 @@
 
   /// The test compiler produces dill files for each test main.
   ///
-  /// To speed up compilation, each compile is intialized from an existing
+  /// To speed up compilation, each compile is initialized from an existing
   /// dill file from previous runs, if possible.
   TestCompiler compiler;
 
diff --git a/packages/flutter_tools/lib/src/web/bootstrap.dart b/packages/flutter_tools/lib/src/web/bootstrap.dart
index 877444d..cbbfc53 100644
--- a/packages/flutter_tools/lib/src/web/bootstrap.dart
+++ b/packages/flutter_tools/lib/src/web/bootstrap.dart
@@ -11,7 +11,7 @@
 /// actual main.dart file.
 ///
 /// This file is served when the browser requests "main.dart.js" in debug mode,
-/// and is responsible for bootstraping the RequireJS modules and attaching
+/// and is responsible for bootstrapping the RequireJS modules and attaching
 /// the hot reload hooks.
 String generateBootstrapScript({
   @required String requireUrl,
diff --git a/packages/flutter_tools/lib/src/web/compile.dart b/packages/flutter_tools/lib/src/web/compile.dart
index 4f40ccc..3995fa8 100644
--- a/packages/flutter_tools/lib/src/web/compile.dart
+++ b/packages/flutter_tools/lib/src/web/compile.dart
@@ -81,7 +81,7 @@
   /// Returns whether or not the build was successful.
   ///
   /// `release` controls whether we build the bundle for dartdevc or only
-  /// the entrypoints for dart2js to later take over.
+  /// the entry points for dart2js to later take over.
   Future<bool> initialize({
     @required Directory projectDirectory,
     @required String projectName,
diff --git a/packages/flutter_tools/lib/src/windows/msbuild_utils.dart b/packages/flutter_tools/lib/src/windows/msbuild_utils.dart
index db841ae..ce12f3a 100644
--- a/packages/flutter_tools/lib/src/windows/msbuild_utils.dart
+++ b/packages/flutter_tools/lib/src/windows/msbuild_utils.dart
@@ -7,7 +7,7 @@
 import '../base/file_system.dart';
 
 /// Writes a property sheet (.props) file to expose all of the key/value
-/// pairs in [variables] as enivornment variables.
+/// pairs in [variables] as environment variables.
 void writePropertySheet(File propertySheetFile, Map<String, String> variables) {
   final xml.XmlBuilder builder = xml.XmlBuilder();
   builder.processing('xml', 'version="1.0" encoding="utf-8"');
diff --git a/packages/flutter_tools/lib/src/windows/visual_studio.dart b/packages/flutter_tools/lib/src/windows/visual_studio.dart
index 0c00751..99db91e 100644
--- a/packages/flutter_tools/lib/src/windows/visual_studio.dart
+++ b/packages/flutter_tools/lib/src/windows/visual_studio.dart
@@ -83,7 +83,7 @@
   /// The names of the components within the workload that must be installed.
   ///
   /// If there is an existing Visual Studio installation, the major version
-  /// should be provided here, as the descriptions of some componets differ
+  /// should be provided here, as the descriptions of some components differ
   /// from version to version.
   List<String> necessaryComponentDescriptions([int visualStudioMajorVersion]) {
     return _requiredComponents(visualStudioMajorVersion).values.toList();
@@ -118,7 +118,7 @@
     'vswhere.exe',
   );
 
-  /// Components for use with vswhere requriements.
+  /// Components for use with vswhere requirements.
   ///
   /// Maps from component IDs to description in the installer UI.
   /// See https://docs.microsoft.com/en-us/visualstudio/install/workload-and-component-ids
@@ -283,7 +283,7 @@
   /// Studio.
   ///
   /// If there's a version that has all the required components, that
-  /// will be returned, otherwise returs the lastest installed version (if any).
+  /// will be returned, otherwise returns the latest installed version (if any).
   Map<String, dynamic> get _bestVisualStudioDetails {
     if (_usableVisualStudioDetails.isNotEmpty) {
       return _usableVisualStudioDetails;
diff --git a/packages/flutter_tools/test/src/fake_process_manager.dart b/packages/flutter_tools/test/src/fake_process_manager.dart
index 4022a54..a76c863 100644
--- a/packages/flutter_tools/test/src/fake_process_manager.dart
+++ b/packages/flutter_tools/test/src/fake_process_manager.dart
@@ -64,7 +64,7 @@
 
   /// The process' exit code.
   ///
-  /// To simulate a never-ending process, set [duration] to a value greated than
+  /// To simulate a never-ending process, set [duration] to a value greater than
   /// 15 minutes (the timeout for our tests).
   ///
   /// To simulate a crash, subtract the crash signal number from 256. For example,
diff --git a/packages/flutter_tools/test/src/io.dart b/packages/flutter_tools/test/src/io.dart
index 980f96a..5674587 100644
--- a/packages/flutter_tools/test/src/io.dart
+++ b/packages/flutter_tools/test/src/io.dart
@@ -12,7 +12,7 @@
 ///
 /// Do not provide a [LocalFileSystem] as a delegate. Since internally this calls
 /// out to `dart:io` classes, it will result in a stack overflow error as the
-/// IOOverrides and LocalFileSystem call eachother endlessly.
+/// IOOverrides and LocalFileSystem call each other endlessly.
 ///
 /// The only safe delegate types are those that do not call out to `dart:io`,
 /// like the [MemoryFileSystem].
diff --git a/packages/flutter_tools/test/src/mocks.dart b/packages/flutter_tools/test/src/mocks.dart
index cde2e80..ae35b52 100644
--- a/packages/flutter_tools/test/src/mocks.dart
+++ b/packages/flutter_tools/test/src/mocks.dart
@@ -272,7 +272,7 @@
   final Stream<List<int>> stderr;
 }
 
-/// A fake process implemenation which can be provided all necessary values.
+/// A fake process implementation which can be provided all necessary values.
 class FakeProcess implements Process {
   FakeProcess({
     this.pid = 1,
diff --git a/packages/fuchsia_remote_debug_protocol/lib/src/dart/dart_vm.dart b/packages/fuchsia_remote_debug_protocol/lib/src/dart/dart_vm.dart
index bc18e32..5a3595c 100644
--- a/packages/fuchsia_remote_debug_protocol/lib/src/dart/dart_vm.dart
+++ b/packages/fuchsia_remote_debug_protocol/lib/src/dart/dart_vm.dart
@@ -137,7 +137,7 @@
 
   final json_rpc.Peer _peer;
 
-  /// The URI through which this DartVM instance is connected.
+  /// The URL through which this DartVM instance is connected.
   final Uri uri;
 
   /// Attempts to connect to the given [Uri].
diff --git a/packages/fuchsia_remote_debug_protocol/lib/src/fuchsia_remote_connection.dart b/packages/fuchsia_remote_debug_protocol/lib/src/fuchsia_remote_connection.dart
index 0935d47..5672c50 100644
--- a/packages/fuchsia_remote_debug_protocol/lib/src/fuchsia_remote_connection.dart
+++ b/packages/fuchsia_remote_debug_protocol/lib/src/fuchsia_remote_connection.dart
@@ -81,11 +81,11 @@
 /// An event regarding the Dart VM.
 ///
 /// Specifies the type of the event (whether the VM has started or has stopped),
-/// and contains the service port of the VM as well as a URI to connect to it.
+/// and contains the service port of the VM as well as a URL to connect to it.
 class DartVmEvent {
   DartVmEvent._({this.eventType, this.servicePort, this.uri});
 
-  /// The URI used to connect to the Dart VM.
+  /// The URL used to connect to the Dart VM.
   final Uri uri;
 
   /// The type of event regarding this instance of the Dart VM.
