diff --git a/packages/flutter/lib/src/material/dialog.dart b/packages/flutter/lib/src/material/dialog.dart
index de0c52a..4937944 100644
--- a/packages/flutter/lib/src/material/dialog.dart
+++ b/packages/flutter/lib/src/material/dialog.dart
@@ -133,6 +133,15 @@
 /// of actions. The title is displayed above the content and the actions are
 /// displayed below the content.
 ///
+/// If the content is too large to fit on the screen vertically, the dialog will
+/// display the title and the actions and let the content overflow, which is
+/// rarely desired. Consider using a scrolling widget for [content], such as
+/// [SingleChildScrollView], to avoid overflow. (However, be aware that since
+/// [AlertDialog] tries to size itself using the intrinsic dimensions of its
+/// children, widgets such as [ListView], [GridView], and [CustomScrollView],
+/// which use lazy viewports, will not work. If this is a problem, consider
+/// using [Dialog] directly.)
+///
 /// For dialogs that offer the user a choice between several options, consider
 /// using a [SimpleDialog].
 ///
@@ -152,11 +161,13 @@
 ///     builder: (BuildContext context) {
 ///       return AlertDialog(
 ///         title: Text('Rewind and remember'),
-///         content: Column(
-///           children: <Widget>[
-///             Text('You will never be satisfied.'),
-///             Text('You\’re like me. I’m never satisfied.'),
-///           ],
+///         content: SingleChildScrollView(
+///           child: ListBody(
+///             children: <Widget>[
+///               Text('You will never be satisfied.'),
+///               Text('You\’re like me. I’m never satisfied.'),
+///             ],
+///           ),
 ///         ),
 ///         actions: <Widget>[
 ///           FlatButton(
@@ -310,34 +321,25 @@
         mainAxisSize: MainAxisSize.min,
         crossAxisAlignment: CrossAxisAlignment.stretch,
         children: <Widget>[
-          if (title != null || content != null)
+        if (title != null)
+          Padding(
+            padding: titlePadding ?? EdgeInsets.fromLTRB(24.0, 24.0, 24.0, content == null ? 20.0 : 0.0),
+            child: DefaultTextStyle(
+              style: titleTextStyle ?? dialogTheme.titleTextStyle ?? theme.textTheme.title,
+              child: Semantics(
+                child: title,
+                namesRoute: true,
+                container: true,
+              ),
+            ),
+          ),
+          if (content != null)
             Flexible(
-              child: SingleChildScrollView(
-                child: Column(
-                  mainAxisSize: MainAxisSize.min,
-                  crossAxisAlignment: CrossAxisAlignment.stretch,
-                  children: <Widget>[
-                    if (title != null)
-                      Padding(
-                        padding: titlePadding ?? EdgeInsets.fromLTRB(24.0, 24.0, 24.0, content == null ? 20.0 : 0.0),
-                        child: DefaultTextStyle(
-                          style: titleTextStyle ?? dialogTheme.titleTextStyle ?? theme.textTheme.title,
-                          child: Semantics(
-                            child: title,
-                            namesRoute: true,
-                            container: true,
-                          ),
-                        ),
-                      ),
-                    if (content != null)
-                      Padding(
-                        padding: contentPadding,
-                        child: DefaultTextStyle(
-                          style: contentTextStyle ?? dialogTheme.contentTextStyle ?? theme.textTheme.subhead,
-                          child: content,
-                        ),
-                      ),
-                  ],
+              child: Padding(
+                padding: contentPadding,
+                child: DefaultTextStyle(
+                  style: contentTextStyle ?? dialogTheme.contentTextStyle ?? theme.textTheme.subhead,
+                  child: content,
                 ),
               ),
             ),
diff --git a/packages/flutter/test/material/dialog_test.dart b/packages/flutter/test/material/dialog_test.dart
index 0143eaa..9d89e73 100644
--- a/packages/flutter/test/material/dialog_test.dart
+++ b/packages/flutter/test/material/dialog_test.dart
@@ -716,83 +716,6 @@
     expect(rootObserver.dialogCount, 0);
     expect(nestedObserver.dialogCount, 1);
   });
-
-  group('Scrollable title and content', () {
-    testWidgets('Title is scrollable', (WidgetTester tester) async {
-      final Key titleKey = UniqueKey();
-      final AlertDialog dialog = AlertDialog(
-        title: Container(
-          key: titleKey,
-          color: Colors.green,
-          height: 1000,
-        ),
-      );
-      await tester.pumpWidget(_appWithAlertDialog(tester, dialog));
-      await tester.tap(find.text('X'));
-      await tester.pumpAndSettle();
-
-      final RenderBox box = tester.renderObject(find.byKey(titleKey));
-      final Offset originalOffset = box.localToGlobal(Offset.zero);
-      await tester.drag(find.byKey(titleKey), const Offset(0.0, -200.0));
-      expect(box.localToGlobal(Offset.zero), equals(originalOffset.translate(0.0, -200.0)));
-    });
-
-    testWidgets('Content is scrollable', (WidgetTester tester) async {
-      final Key contentKey = UniqueKey();
-      final AlertDialog dialog = AlertDialog(
-        content: Container(
-          key: contentKey,
-          color: Colors.orange,
-          height: 1000,
-        ),
-      );
-      await tester.pumpWidget(_appWithAlertDialog(tester, dialog));
-      await tester.tap(find.text('X'));
-      await tester.pumpAndSettle();
-
-      final RenderBox box = tester.renderObject(find.byKey(contentKey));
-      final Offset originalOffset = box.localToGlobal(Offset.zero);
-      await tester.drag(find.byKey(contentKey), const Offset(0.0, -200.0));
-      expect(box.localToGlobal(Offset.zero), equals(originalOffset.translate(0.0, -200.0)));
-    });
-
-    testWidgets('Title and content are scrollable', (WidgetTester tester) async {
-      final Key titleKey = UniqueKey();
-      final Key contentKey = UniqueKey();
-      final AlertDialog dialog = AlertDialog(
-        title: Container(
-          key: titleKey,
-          color: Colors.green,
-          height: 400,
-        ),
-        content: Container(
-          key: contentKey,
-          color: Colors.orange,
-          height: 400,
-        ),
-      );
-      await tester.pumpWidget(_appWithAlertDialog(tester, dialog));
-      await tester.tap(find.text('X'));
-      await tester.pumpAndSettle();
-
-      final RenderBox title = tester.renderObject(find.byKey(titleKey));
-      final RenderBox content = tester.renderObject(find.byKey(contentKey));
-      final Offset titleOriginalOffset = title.localToGlobal(Offset.zero);
-      final Offset contentOriginalOffset = content.localToGlobal(Offset.zero);
-
-      // Dragging the title widget should scroll both the title
-      // and the content widgets.
-      await tester.drag(find.byKey(titleKey), const Offset(0.0, -200.0));
-      expect(title.localToGlobal(Offset.zero), equals(titleOriginalOffset.translate(0.0, -200.0)));
-      expect(content.localToGlobal(Offset.zero), equals(contentOriginalOffset.translate(0.0, -200.0)));
-
-      // Dragging the content widget should scroll both the title
-      // and the content widgets.
-      await tester.drag(find.byKey(contentKey), const Offset(0.0, 200.0));
-      expect(title.localToGlobal(Offset.zero), equals(titleOriginalOffset));
-      expect(content.localToGlobal(Offset.zero), equals(contentOriginalOffset));
-    });
-  });
 }
 
 class DialogObserver extends NavigatorObserver {
