Unverified Commit a425e562 authored by Polina Cherkasova's avatar Polina Cherkasova Committed by GitHub

Revert "CupertinoAlertDialog should not create ScrollController on every...

Revert "CupertinoAlertDialog should not create ScrollController on every build, if null values are passed in constructor." (#134071)

Reverts flutter/flutter#133918 as it causes build failures.
parent e30f9c42
...@@ -188,7 +188,7 @@ bool _isInAccessibilityMode(BuildContext context) { ...@@ -188,7 +188,7 @@ bool _isInAccessibilityMode(BuildContext context) {
/// * [CupertinoDialogAction], which is an iOS-style dialog button. /// * [CupertinoDialogAction], which is an iOS-style dialog button.
/// * [AlertDialog], a Material Design alert dialog. /// * [AlertDialog], a Material Design alert dialog.
/// * <https://developer.apple.com/ios/human-interface-guidelines/views/alerts/> /// * <https://developer.apple.com/ios/human-interface-guidelines/views/alerts/>
class CupertinoAlertDialog extends StatefulWidget { class CupertinoAlertDialog extends StatelessWidget {
/// Creates an iOS-style alert dialog. /// Creates an iOS-style alert dialog.
/// ///
/// The [actions] must not be null. /// The [actions] must not be null.
...@@ -233,6 +233,9 @@ class CupertinoAlertDialog extends StatefulWidget { ...@@ -233,6 +233,9 @@ class CupertinoAlertDialog extends StatefulWidget {
/// section when there are many actions. /// section when there are many actions.
final ScrollController? scrollController; final ScrollController? scrollController;
ScrollController get _effectiveScrollController =>
scrollController ?? ScrollController();
/// A scroll controller that can be used to control the scrolling of the /// A scroll controller that can be used to control the scrolling of the
/// actions in the dialog. /// actions in the dialog.
/// ///
...@@ -244,49 +247,37 @@ class CupertinoAlertDialog extends StatefulWidget { ...@@ -244,49 +247,37 @@ class CupertinoAlertDialog extends StatefulWidget {
/// section when it is long. /// section when it is long.
final ScrollController? actionScrollController; final ScrollController? actionScrollController;
ScrollController get _effectiveActionScrollController =>
actionScrollController ?? ScrollController();
/// {@macro flutter.material.dialog.insetAnimationDuration} /// {@macro flutter.material.dialog.insetAnimationDuration}
final Duration insetAnimationDuration; final Duration insetAnimationDuration;
/// {@macro flutter.material.dialog.insetAnimationCurve} /// {@macro flutter.material.dialog.insetAnimationCurve}
final Curve insetAnimationCurve; final Curve insetAnimationCurve;
@override
State<CupertinoAlertDialog> createState() => _CupertinoAlertDialogState();
}
class _CupertinoAlertDialogState extends State<CupertinoAlertDialog> {
ScrollController? _backupScrollController;
ScrollController? _backupActionScrollController;
ScrollController get _effectiveScrollController =>
widget.scrollController ?? (_backupScrollController ??= ScrollController());
ScrollController get _effectiveActionScrollController =>
widget.actionScrollController ?? (_backupActionScrollController ??= ScrollController());
Widget _buildContent(BuildContext context) { Widget _buildContent(BuildContext context) {
final double textScaleFactor = MediaQuery.textScalerOf(context).textScaleFactor; final double textScaleFactor = MediaQuery.textScalerOf(context).textScaleFactor;
final List<Widget> children = <Widget>[ final List<Widget> children = <Widget>[
if (widget.title != null || widget.content != null) if (title != null || content != null)
Flexible( Flexible(
flex: 3, flex: 3,
child: _CupertinoAlertContentSection( child: _CupertinoAlertContentSection(
title: widget.title, title: title,
message: widget.content, message: content,
scrollController: _effectiveScrollController, scrollController: _effectiveScrollController,
titlePadding: EdgeInsets.only( titlePadding: EdgeInsets.only(
left: _kDialogEdgePadding, left: _kDialogEdgePadding,
right: _kDialogEdgePadding, right: _kDialogEdgePadding,
bottom: widget.content == null ? _kDialogEdgePadding : 1.0, bottom: content == null ? _kDialogEdgePadding : 1.0,
top: _kDialogEdgePadding * textScaleFactor, top: _kDialogEdgePadding * textScaleFactor,
), ),
messagePadding: EdgeInsets.only( messagePadding: EdgeInsets.only(
left: _kDialogEdgePadding, left: _kDialogEdgePadding,
right: _kDialogEdgePadding, right: _kDialogEdgePadding,
bottom: _kDialogEdgePadding * textScaleFactor, bottom: _kDialogEdgePadding * textScaleFactor,
top: widget.title == null ? _kDialogEdgePadding : 1.0, top: title == null ? _kDialogEdgePadding : 1.0,
), ),
titleTextStyle: _kCupertinoDialogTitleStyle.copyWith( titleTextStyle: _kCupertinoDialogTitleStyle.copyWith(
color: CupertinoDynamicColor.resolve(CupertinoColors.label, context), color: CupertinoDynamicColor.resolve(CupertinoColors.label, context),
...@@ -312,10 +303,10 @@ class _CupertinoAlertDialogState extends State<CupertinoAlertDialog> { ...@@ -312,10 +303,10 @@ class _CupertinoAlertDialogState extends State<CupertinoAlertDialog> {
Widget actionSection = Container( Widget actionSection = Container(
height: 0.0, height: 0.0,
); );
if (widget.actions.isNotEmpty) { if (actions.isNotEmpty) {
actionSection = _CupertinoAlertActionSection( actionSection = _CupertinoAlertActionSection(
scrollController: _effectiveActionScrollController, scrollController: _effectiveActionScrollController,
children: widget.actions, children: actions,
); );
} }
...@@ -339,8 +330,8 @@ class _CupertinoAlertDialogState extends State<CupertinoAlertDialog> { ...@@ -339,8 +330,8 @@ class _CupertinoAlertDialogState extends State<CupertinoAlertDialog> {
return AnimatedPadding( return AnimatedPadding(
padding: MediaQuery.viewInsetsOf(context) + padding: MediaQuery.viewInsetsOf(context) +
const EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0), const EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0),
duration: widget.insetAnimationDuration, duration: insetAnimationDuration,
curve: widget.insetAnimationCurve, curve: insetAnimationCurve,
child: MediaQuery.removeViewInsets( child: MediaQuery.removeViewInsets(
removeLeft: true, removeLeft: true,
removeTop: true, removeTop: true,
...@@ -377,13 +368,6 @@ class _CupertinoAlertDialogState extends State<CupertinoAlertDialog> { ...@@ -377,13 +368,6 @@ class _CupertinoAlertDialogState extends State<CupertinoAlertDialog> {
), ),
); );
} }
@override
void dispose() {
_backupScrollController?.dispose();
_backupActionScrollController?.dispose();
super.dispose();
}
} }
/// Rounded rectangle surface that looks like an iOS popup surface, e.g., alert dialog /// Rounded rectangle surface that looks like an iOS popup surface, e.g., alert dialog
......
...@@ -2664,7 +2664,7 @@ void main() { ...@@ -2664,7 +2664,7 @@ void main() {
okNode.dispose(); okNode.dispose();
}); });
testWidgetsWithLeakTracking('Adaptive AlertDialog shows correct widget on each platform', (WidgetTester tester) async { testWidgets('Adaptive AlertDialog shows correct widget on each platform', (WidgetTester tester) async {
final AlertDialog dialog = AlertDialog.adaptive( final AlertDialog dialog = AlertDialog.adaptive(
content: Container( content: Container(
height: 5000.0, height: 5000.0,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment