Revert "Implement AlertDialog title/content overflow scroll #43226" (#44003)
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 {