Deploy `@immutable` in more places (#9462)

Turns out we have many immutable classes.

Fixes #6892
diff --git a/dev/manual_tests/material_arc.dart b/dev/manual_tests/material_arc.dart
index 65d915a..22e6eda 100644
--- a/dev/manual_tests/material_arc.dart
+++ b/dev/manual_tests/material_arc.dart
@@ -52,7 +52,7 @@
   }) : _repaint = repaint, super(repaint: repaint);
 
   final MaterialPointArcTween arc;
-  Animation<double> _repaint;
+  final Animation<double> _repaint;
 
   void drawPoint(Canvas canvas, Offset point, Color color) {
     final Paint paint = new Paint()
@@ -227,7 +227,7 @@
   }) : _repaint = repaint, super(repaint: repaint);
 
   final MaterialRectArcTween arc;
-  Animation<double> _repaint;
+  final Animation<double> _repaint;
 
   void drawPoint(Canvas canvas, Offset p, Color color) {
     final Paint paint = new Paint()
diff --git a/packages/flutter/lib/src/animation/curves.dart b/packages/flutter/lib/src/animation/curves.dart
index 0dd99cc..7251faf 100644
--- a/packages/flutter/lib/src/animation/curves.dart
+++ b/packages/flutter/lib/src/animation/curves.dart
@@ -4,11 +4,14 @@
 
 import 'dart:math' as math;
 
+import 'package:flutter/foundation.dart';
+
 /// A mapping of the unit interval to the unit interval.
 ///
 /// A curve must map t=0.0 to 0.0 and t=1.0 to 1.0.
 ///
 /// See [Curves] for a collection of common animation curves.
+@immutable
 abstract class Curve {
   /// Abstract const constructor. This constructor enables subclasses to provide
   /// const constructors so that they can be used in const expressions.
diff --git a/packages/flutter/lib/src/gestures/events.dart b/packages/flutter/lib/src/gestures/events.dart
index 8c479fc..4488d2f 100644
--- a/packages/flutter/lib/src/gestures/events.dart
+++ b/packages/flutter/lib/src/gestures/events.dart
@@ -69,6 +69,7 @@
 int nthStylusButton(int number) => (kPrimaryStylusButton << (number - 1)) & kMaxUnsignedSMI;
 
 /// Base class for touch, stylus, or mouse events.
+@immutable
 abstract class PointerEvent {
   /// Abstract const constructor. This constructor enables subclasses to provide
   /// const constructors so that they can be used in const expressions.
diff --git a/packages/flutter/lib/src/material/data_table.dart b/packages/flutter/lib/src/material/data_table.dart
index f44377f..40cdad8 100644
--- a/packages/flutter/lib/src/material/data_table.dart
+++ b/packages/flutter/lib/src/material/data_table.dart
@@ -30,6 +30,7 @@
 /// One column configuration must be provided for each column to
 /// display in the table. The list of [DataColumn] objects is passed
 /// as the `columns` argument to the [new DataTable] constructor.
+@immutable
 class DataColumn {
   /// Creates the configuration for a column of a [DataTable].
   ///
@@ -81,6 +82,7 @@
 ///
 /// The data for this row of the table is provided in the [cells]
 /// property of the [DataRow] object.
+@immutable
 class DataRow {
   /// Creates the configuration for a row of a [DataTable].
   ///
@@ -150,6 +152,7 @@
 /// One list of [DataCell] objects must be provided for each [DataRow]
 /// in the [DataTable], in the [new DataRow] constructor's `cells`
 /// argument.
+@immutable
 class DataCell {
   /// Creates an object to hold the data for a cell in a [DataTable].
   ///
diff --git a/packages/flutter/lib/src/material/icons.dart b/packages/flutter/lib/src/material/icons.dart
index a76f5df..9d84275 100644
--- a/packages/flutter/lib/src/material/icons.dart
+++ b/packages/flutter/lib/src/material/icons.dart
@@ -2,9 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'package:flutter/foundation.dart';
+
 /// A description of a material design icon.
 ///
 /// See [Icons] for a number of predefined icons.
+@immutable
 class IconData {
   /// Creates icon data.
   ///
diff --git a/packages/flutter/lib/src/material/input_decorator.dart b/packages/flutter/lib/src/material/input_decorator.dart
index bf9c562..33d8664 100644
--- a/packages/flutter/lib/src/material/input_decorator.dart
+++ b/packages/flutter/lib/src/material/input_decorator.dart
@@ -23,6 +23,7 @@
 ///    [InputDecoration].
 ///  * [InputDecorator], which is a widget that draws an [InputDecoration]
 ///    around an arbitrary child widget.
+@immutable
 class InputDecoration {
   /// Creates a bundle of text and styles used to label an input field.
   ///
diff --git a/packages/flutter/lib/src/material/list_tile.dart b/packages/flutter/lib/src/material/list_tile.dart
index bd92728..18af246 100644
--- a/packages/flutter/lib/src/material/list_tile.dart
+++ b/packages/flutter/lib/src/material/list_tile.dart
@@ -119,7 +119,6 @@
   }
 }
 
-
 /// A single fixed-height row that typically contains some text as well as
 /// a leading or trailing icon.
 ///
diff --git a/packages/flutter/lib/src/material/mergeable_material.dart b/packages/flutter/lib/src/material/mergeable_material.dart
index 205ceeb..132ac83 100644
--- a/packages/flutter/lib/src/material/mergeable_material.dart
+++ b/packages/flutter/lib/src/material/mergeable_material.dart
@@ -11,6 +11,7 @@
 /// The base type for [MaterialSlice] and [MaterialGap].
 ///
 /// All [MergeableMaterialItem] objects need a [LocalKey].
+@immutable
 abstract class MergeableMaterialItem {
   /// Abstract const constructor. This constructor enables subclasses to provide
   /// const constructors so that they can be used in const expressions.
diff --git a/packages/flutter/lib/src/material/stepper.dart b/packages/flutter/lib/src/material/stepper.dart
index 9d08e8d..74a6382 100644
--- a/packages/flutter/lib/src/material/stepper.dart
+++ b/packages/flutter/lib/src/material/stepper.dart
@@ -30,12 +30,16 @@
 enum StepState {
   /// A step that displays its index in its circle.
   indexed,
+
   /// A step that displays a pencil icon in its circle.
   editing,
+
   /// A step that displays a tick icon in its circle.
   complete,
+
   /// A step that is disabled and does not to react to taps.
   disabled,
+
   /// A step that is currently having an error. e.g. the use has submitted wrong
   /// input.
   error,
@@ -45,6 +49,7 @@
 enum StepperType {
   /// A vertical layout of the steps with their content in-between the titles.
   vertical,
+
   /// A horizontal layout of the steps with their content below the titles.
   horizontal,
 }
@@ -70,6 +75,7 @@
 ///
 ///  * [Stepper]
 ///  * <https://material.google.com/components/steppers.html>
+@immutable
 class Step {
   /// Creates a step for a [Stepper].
   ///
diff --git a/packages/flutter/lib/src/material/theme_data.dart b/packages/flutter/lib/src/material/theme_data.dart
index 471f678..d14f44a 100644
--- a/packages/flutter/lib/src/material/theme_data.dart
+++ b/packages/flutter/lib/src/material/theme_data.dart
@@ -47,6 +47,7 @@
 /// Use this class to configure a [Theme] widget.
 ///
 /// To obtain the current theme, use [Theme.of].
+@immutable
 class ThemeData {
   /// Create a ThemeData given a set of preferred values.
   ///
diff --git a/packages/flutter/lib/src/material/time_picker.dart b/packages/flutter/lib/src/material/time_picker.dart
index 0367f5c..d4269f4 100644
--- a/packages/flutter/lib/src/material/time_picker.dart
+++ b/packages/flutter/lib/src/material/time_picker.dart
@@ -34,6 +34,7 @@
 }
 
 /// A value representing a time during the day
+@immutable
 class TimeOfDay {
   /// Creates a time of day.
   ///
diff --git a/packages/flutter/lib/src/material/typography.dart b/packages/flutter/lib/src/material/typography.dart
index 3c0e214..9ea49c3 100644
--- a/packages/flutter/lib/src/material/typography.dart
+++ b/packages/flutter/lib/src/material/typography.dart
@@ -26,6 +26,7 @@
 ///  * [Theme]
 ///  * [ThemeData]
 ///  * <http://material.google.com/style/typography.html>
+@immutable
 class TextTheme {
   /// Create a text theme that uses the given values.
   ///
diff --git a/packages/flutter/lib/src/painting/box_fit.dart b/packages/flutter/lib/src/painting/box_fit.dart
index 103798f..8ecf0db 100644
--- a/packages/flutter/lib/src/painting/box_fit.dart
+++ b/packages/flutter/lib/src/painting/box_fit.dart
@@ -4,6 +4,8 @@
 
 import 'dart:math' as math;
 
+import 'package:flutter/foundation.dart';
+
 import 'basic_types.dart';
 
 /// How a box should be inscribed into another box.
@@ -40,6 +42,7 @@
 }
 
 /// The pair of sizes returned by [applyBoxFit].
+@immutable
 class FittedSizes {
   /// Creates an object to store a pair of sizes,
   /// as would be returned by [applyBoxFit].
diff --git a/packages/flutter/lib/src/rendering/box.dart b/packages/flutter/lib/src/rendering/box.dart
index e10058a..1a2cd1c 100644
--- a/packages/flutter/lib/src/rendering/box.dart
+++ b/packages/flutter/lib/src/rendering/box.dart
@@ -529,6 +529,8 @@
 abstract class ContainerBoxParentDataMixin<ChildType extends RenderObject> extends BoxParentData with ContainerParentDataMixin<ChildType> { }
 
 enum _IntrinsicDimension { minWidth, maxWidth, minHeight, maxHeight }
+
+@immutable
 class _IntrinsicDimensionsCacheEntry {
   _IntrinsicDimensionsCacheEntry(this.dimension, this.argument);
 
diff --git a/packages/flutter/lib/src/rendering/editable.dart b/packages/flutter/lib/src/rendering/editable.dart
index 32e2a7f..cce2908 100644
--- a/packages/flutter/lib/src/rendering/editable.dart
+++ b/packages/flutter/lib/src/rendering/editable.dart
@@ -27,6 +27,7 @@
 
 /// Represents a global screen coordinate of the point in a selection, and the
 /// text direction at that point.
+@immutable
 class TextSelectionPoint {
   /// Creates a description of a point in a text selection.
   ///
diff --git a/packages/flutter/lib/src/rendering/semantics.dart b/packages/flutter/lib/src/rendering/semantics.dart
index 02e0c63..e0d8b98 100644
--- a/packages/flutter/lib/src/rendering/semantics.dart
+++ b/packages/flutter/lib/src/rendering/semantics.dart
@@ -55,6 +55,7 @@
 /// for the node.
 ///
 /// Typically obtained from [SemanticsNode.getSemanticsData].
+@immutable
 class SemanticsData {
   /// Creates a semantics data object.
   ///
diff --git a/packages/flutter/lib/src/rendering/stack.dart b/packages/flutter/lib/src/rendering/stack.dart
index 9404419..57c0574 100644
--- a/packages/flutter/lib/src/rendering/stack.dart
+++ b/packages/flutter/lib/src/rendering/stack.dart
@@ -19,6 +19,7 @@
 ///
 /// If you create the RelativeRect with null values, the methods on
 /// RelativeRect will not work usefully (or at all).
+@immutable
 class RelativeRect {
   /// Creates a RelativeRect with the given values.
   const RelativeRect.fromLTRB(this.left, this.top, this.right, this.bottom);
@@ -204,6 +205,7 @@
 enum Overflow {
   /// Overflowing children will be visible.
   visible,
+
   /// Overflowing children will be clipped to the bounds of their parent.
   clip,
 }
diff --git a/packages/flutter/lib/src/rendering/table.dart b/packages/flutter/lib/src/rendering/table.dart
index 00f6477..a2f0ef7 100644
--- a/packages/flutter/lib/src/rendering/table.dart
+++ b/packages/flutter/lib/src/rendering/table.dart
@@ -5,6 +5,8 @@
 import 'dart:collection';
 import 'dart:math' as math;
 
+import 'package:flutter/foundation.dart';
+
 import 'box.dart';
 import 'object.dart';
 
@@ -32,6 +34,7 @@
 /// distributes the space equally among the flexible columns,
 /// [FractionColumnWidth], which sizes a column based on the size of the
 /// table's container.
+@immutable
 abstract class TableColumnWidth {
   /// Abstract const constructor. This constructor enables subclasses to provide
   /// const constructors so that they can be used in const expressions.
diff --git a/packages/flutter/lib/src/rendering/view.dart b/packages/flutter/lib/src/rendering/view.dart
index abdf230..cde1027 100644
--- a/packages/flutter/lib/src/rendering/view.dart
+++ b/packages/flutter/lib/src/rendering/view.dart
@@ -6,6 +6,7 @@
 import 'dart:io' show Platform;
 import 'dart:ui' as ui show Scene, SceneBuilder, window;
 
+import 'package:flutter/foundation.dart';
 import 'package:vector_math/vector_math_64.dart';
 
 import 'binding.dart';
@@ -15,6 +16,7 @@
 import 'object.dart';
 
 /// The layout constraints for the root render object.
+@immutable
 class ViewConfiguration {
   /// Creates a view configuration.
   ///
diff --git a/packages/flutter/lib/src/scheduler/priority.dart b/packages/flutter/lib/src/scheduler/priority.dart
index 42bef03..03adc64 100644
--- a/packages/flutter/lib/src/scheduler/priority.dart
+++ b/packages/flutter/lib/src/scheduler/priority.dart
@@ -2,7 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'package:flutter/foundation.dart';
+
 /// A task priority, as passed to [SchedulerBinding.scheduleTask].
+@immutable
 class Priority {
   const Priority._(this._value);
 
diff --git a/packages/flutter/lib/src/services/clipboard.dart b/packages/flutter/lib/src/services/clipboard.dart
index d578e33..b91ca9a 100644
--- a/packages/flutter/lib/src/services/clipboard.dart
+++ b/packages/flutter/lib/src/services/clipboard.dart
@@ -4,12 +4,15 @@
 
 import 'dart:async';
 
+import 'package:flutter/foundation.dart';
+
 import 'system_channels.dart';
 
 /// Data stored on the system clipboard.
 ///
 /// The system clipboard can contain data of various media types. This data
 /// structure currently supports only plain text data, in the [text] property.
+@immutable
 class ClipboardData {
   /// Creates data for the system clipboard.
   const ClipboardData({ this.text });
diff --git a/packages/flutter/lib/src/services/image_provider.dart b/packages/flutter/lib/src/services/image_provider.dart
index 6148184..f6e0d88 100644
--- a/packages/flutter/lib/src/services/image_provider.dart
+++ b/packages/flutter/lib/src/services/image_provider.dart
@@ -19,6 +19,7 @@
 
 /// Configuration information passed to the [ImageProvider.resolve] method to
 /// select a specific image.
+@immutable
 class ImageConfiguration {
   /// Creates an object holding the configuration information for an [ImageProvider].
   ///
@@ -212,6 +213,7 @@
 /// Key for the image obtained by an [AssetImage] or [ExactAssetImage].
 ///
 /// This is used to identify the precise resource in the [imageCache].
+@immutable
 class AssetBundleImageKey {
   /// Creates the key for an [AssetImage] or [AssetBundleImageProvider].
   ///
diff --git a/packages/flutter/lib/src/services/image_stream.dart b/packages/flutter/lib/src/services/image_stream.dart
index 59ef9ba..4f0c8ec 100644
--- a/packages/flutter/lib/src/services/image_stream.dart
+++ b/packages/flutter/lib/src/services/image_stream.dart
@@ -11,6 +11,7 @@
 ///
 /// ImageInfo objects are used by [ImageStream] objects to represent the
 /// actual data of the image once it has been obtained.
+@immutable
 class ImageInfo {
   /// Creates an [ImageInfo] object for the given image and scale.
   ///
diff --git a/packages/flutter/lib/src/services/message_codec.dart b/packages/flutter/lib/src/services/message_codec.dart
index af264d4..5b1124a 100644
--- a/packages/flutter/lib/src/services/message_codec.dart
+++ b/packages/flutter/lib/src/services/message_codec.dart
@@ -28,6 +28,7 @@
 }
 
 /// An command object representing the invocation of a named method.
+@immutable
 class MethodCall {
   /// Creates a [MethodCall] representing the invocation of [method] with the
   /// specified [arguments].
diff --git a/packages/flutter/lib/src/services/raw_keyboard.dart b/packages/flutter/lib/src/services/raw_keyboard.dart
index da799a8..f77449a 100644
--- a/packages/flutter/lib/src/services/raw_keyboard.dart
+++ b/packages/flutter/lib/src/services/raw_keyboard.dart
@@ -20,6 +20,7 @@
 ///  * [RawKeyEvent]
 ///  * [RawKeyDownEvent]
 ///  * [RawKeyUpEvent]
+@immutable
 abstract class RawKeyEventData {
   /// Abstract const constructor. This constructor enables subclasses to provide
   /// const constructors so that they can be used in const expressions.
@@ -101,6 +102,7 @@
 ///  * [RawKeyDownEvent]
 ///  * [RawKeyUpEvent]
 ///  * [RawKeyboardListener], a widget that listens for raw key events.
+@immutable
 abstract class RawKeyEvent {
   /// Initializes fields for subclasses.
   const RawKeyEvent({
diff --git a/packages/flutter/lib/src/services/system_chrome.dart b/packages/flutter/lib/src/services/system_chrome.dart
index 1de0f87..2d1e04e 100644
--- a/packages/flutter/lib/src/services/system_chrome.dart
+++ b/packages/flutter/lib/src/services/system_chrome.dart
@@ -4,6 +4,8 @@
 
 import 'dart:async';
 
+import 'package:flutter/foundation.dart';
+
 import 'system_channels.dart';
 
 /// Specifies a particular device orientation.
@@ -47,6 +49,7 @@
 /// interface.
 ///
 /// Used by [SystemChrome.setApplicationSwitcherDescription].
+@immutable
 class ApplicationSwitcherDescription {
   /// Creates an ApplicationSwitcherDescription.
   const ApplicationSwitcherDescription({ this.label, this.primaryColor });
diff --git a/packages/flutter/lib/src/services/text_editing.dart b/packages/flutter/lib/src/services/text_editing.dart
index 960c922..1247f96 100644
--- a/packages/flutter/lib/src/services/text_editing.dart
+++ b/packages/flutter/lib/src/services/text_editing.dart
@@ -9,6 +9,7 @@
 export 'dart:ui' show TextAffinity, TextPosition;
 
 /// A range of characters in a string of text.
+@immutable
 class TextRange {
   /// Creates a text range.
   ///
@@ -89,6 +90,7 @@
 }
 
 /// A range of text that represents a selection.
+@immutable
 class TextSelection extends TextRange {
   /// Creates a text selection.
   ///
diff --git a/packages/flutter/lib/src/services/text_input.dart b/packages/flutter/lib/src/services/text_input.dart
index ea5efab..351aae8 100644
--- a/packages/flutter/lib/src/services/text_input.dart
+++ b/packages/flutter/lib/src/services/text_input.dart
@@ -39,6 +39,7 @@
 /// See also:
 ///
 ///  * [TextInput.attach]
+@immutable
 class TextInputConfiguration {
   /// Creates configuration information for a text input control.
   ///
@@ -74,6 +75,7 @@
 }
 
 /// The current text, selection, and composing state for editing a run of text.
+@immutable
 class TextEditingValue {
   /// Creates information for editing a run of text.
   ///
diff --git a/packages/flutter/lib/src/widgets/animated_cross_fade.dart b/packages/flutter/lib/src/widgets/animated_cross_fade.dart
index 2867c3a..46f8923 100644
--- a/packages/flutter/lib/src/widgets/animated_cross_fade.dart
+++ b/packages/flutter/lib/src/widgets/animated_cross_fade.dart
@@ -18,6 +18,7 @@
   /// Show the first child ([AnimatedCrossFade.firstChild]) and hide the second
   /// ([AnimatedCrossFade.secondChild]]).
   showFirst,
+
   /// Show the second child ([AnimatedCrossFade.secondChild]) and hide the first
   /// ([AnimatedCrossFade.firstChild]).
   showSecond,
diff --git a/packages/flutter/lib/src/widgets/async.dart b/packages/flutter/lib/src/widgets/async.dart
index 8bc039c..64bf31e 100644
--- a/packages/flutter/lib/src/widgets/async.dart
+++ b/packages/flutter/lib/src/widgets/async.dart
@@ -8,6 +8,7 @@
 
 import 'dart:async' show Future, Stream, StreamSubscription;
 
+import 'package:flutter/foundation.dart';
 import 'package:flutter/widgets.dart';
 import 'package:meta/meta.dart' show required;
 
@@ -179,9 +180,10 @@
 /// See also:
 ///
 /// * [StreamBuilder], which builds itself based on a snapshot from interacting
-/// with a [Stream].
+///   with a [Stream].
 /// * [FutureBuilder], which builds itself based on a snapshot from interacting
-/// with a [Future].
+///   with a [Future].
+@immutable
 class AsyncSnapshot<T> {
   /// Creates an [AsyncSnapshot] with the specified [connectionState],
   /// and optionally either [data] or [error] (but not both).
diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart
index d0702d9..b503821 100644
--- a/packages/flutter/lib/src/widgets/framework.dart
+++ b/packages/flutter/lib/src/widgets/framework.dart
@@ -27,6 +27,7 @@
 /// Keys must be unique amongst the [Element]s with the same parent.
 ///
 /// Subclasses of [Key] should either subclass [LocalKey] or [GlobalKey].
+@immutable
 abstract class Key {
   /// Construct a [ValueKey<String>] with the given [String].
   ///
diff --git a/packages/flutter/lib/src/widgets/gridpaper.dart b/packages/flutter/lib/src/widgets/grid_paper.dart
similarity index 100%
rename from packages/flutter/lib/src/widgets/gridpaper.dart
rename to packages/flutter/lib/src/widgets/grid_paper.dart
diff --git a/packages/flutter/lib/src/widgets/media_query.dart b/packages/flutter/lib/src/widgets/media_query.dart
index 41bff2d..df53bcc 100644
--- a/packages/flutter/lib/src/widgets/media_query.dart
+++ b/packages/flutter/lib/src/widgets/media_query.dart
@@ -26,6 +26,7 @@
 /// To obtain the current [MediaQueryData] for a given [BuildContext], use the
 /// [MediaQuery.of] function. For example, to obtain the size of the current
 /// window, use `MediaQuery.of(context).size`.
+@immutable
 class MediaQueryData {
   /// Creates data for a media query with explicit values.
   ///
diff --git a/packages/flutter/lib/src/widgets/navigator.dart b/packages/flutter/lib/src/widgets/navigator.dart
index 4f4cfea..ab5430c 100644
--- a/packages/flutter/lib/src/widgets/navigator.dart
+++ b/packages/flutter/lib/src/widgets/navigator.dart
@@ -192,6 +192,7 @@
 }
 
 /// Data that might be useful in constructing a [Route].
+@immutable
 class RouteSettings {
   /// Creates data used to construct routes.
   const RouteSettings({
@@ -377,6 +378,7 @@
 /// ```
 ///
 /// To show a route by name:
+///
 /// ```dart
 /// Navigator.of(context).pushNamed('/b');
 /// ```
@@ -462,6 +464,7 @@
 ///   }
 /// ));
 /// ```
+///
 /// The page route is built in two parts, the "page" and the
 /// "transitions". The page becomes a descendant of the child passed to
 /// the `buildTransitions` method. Typically the page is only built once,
diff --git a/packages/flutter/lib/src/widgets/scroll_configuration.dart b/packages/flutter/lib/src/widgets/scroll_configuration.dart
index 2493c2c..21d5846 100644
--- a/packages/flutter/lib/src/widgets/scroll_configuration.dart
+++ b/packages/flutter/lib/src/widgets/scroll_configuration.dart
@@ -15,6 +15,7 @@
 ///
 /// Used by [ScrollConfiguration] to configure the [Scrollable] widgets in a
 /// subtree.
+@immutable
 class ScrollBehavior {
   /// Creates a description of how [Scrollable] widgets should behave.
   const ScrollBehavior();
diff --git a/packages/flutter/lib/src/widgets/scroll_notification.dart b/packages/flutter/lib/src/widgets/scroll_notification.dart
index 3280694..51f0b66 100644
--- a/packages/flutter/lib/src/widgets/scroll_notification.dart
+++ b/packages/flutter/lib/src/widgets/scroll_notification.dart
@@ -18,6 +18,7 @@
 /// not defined, but must be consistent. For example, they could be in pixels,
 /// or in percentages, or in units of the [extentInside] (in the latter case,
 /// [extentInside] would always be 1.0).
+@immutable
 class ScrollMetrics {
   /// Create a description of the metrics of a [Scrollable]'s contents.
   ///
diff --git a/packages/flutter/lib/src/widgets/scroll_position.dart b/packages/flutter/lib/src/widgets/scroll_position.dart
index 1352b70..40ea580 100644
--- a/packages/flutter/lib/src/widgets/scroll_position.dart
+++ b/packages/flutter/lib/src/widgets/scroll_position.dart
@@ -32,6 +32,7 @@
   void dispatchNotification(Notification notification);
 }
 
+@immutable
 abstract class ScrollPhysics {
   const ScrollPhysics(this.parent);
 
diff --git a/packages/flutter/lib/src/widgets/table.dart b/packages/flutter/lib/src/widgets/table.dart
index d87aaca..505b91b 100644
--- a/packages/flutter/lib/src/widgets/table.dart
+++ b/packages/flutter/lib/src/widgets/table.dart
@@ -28,6 +28,7 @@
 ///
 /// The alignment of individual cells in a row can be controlled using a
 /// [TableCell].
+@immutable
 class TableRow {
   /// Creates a row in a [Table].
   const TableRow({ this.key, this.decoration, this.children });
diff --git a/packages/flutter/lib/widgets.dart b/packages/flutter/lib/widgets.dart
index 6989e54..0df4bb4 100644
--- a/packages/flutter/lib/widgets.dart
+++ b/packages/flutter/lib/widgets.dart
@@ -26,7 +26,7 @@
 export 'src/widgets/form.dart';
 export 'src/widgets/framework.dart';
 export 'src/widgets/gesture_detector.dart';
-export 'src/widgets/gridpaper.dart';
+export 'src/widgets/grid_paper.dart';
 export 'src/widgets/heroes.dart';
 export 'src/widgets/image.dart';
 export 'src/widgets/implicit_animations.dart';
diff --git a/packages/flutter/test/material/material_test.dart b/packages/flutter/test/material/material_test.dart
index 7fa5dcb..1d4dd4a 100644
--- a/packages/flutter/test/material/material_test.dart
+++ b/packages/flutter/test/material/material_test.dart
@@ -36,7 +36,7 @@
 class PaintRecorder extends CustomPainter {
   PaintRecorder(this.log);
 
-  List<Size> log;
+  final List<Size> log;
 
   @override
   void paint(Canvas canvas, Size size) {
diff --git a/packages/flutter/test/widgets/custom_paint_test.dart b/packages/flutter/test/widgets/custom_paint_test.dart
index 3820d7f..18139f1 100644
--- a/packages/flutter/test/widgets/custom_paint_test.dart
+++ b/packages/flutter/test/widgets/custom_paint_test.dart
@@ -8,8 +8,8 @@
 class TestCustomPainter extends CustomPainter {
   TestCustomPainter({ this.log, this.name });
 
-  List<String> log;
-  String name;
+  final List<String> log;
+  final String name;
 
   @override
   void paint(Canvas canvas, Size size) {