From c910d8d58d3a32b5316a538f121b0039f856cb29 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 21 Apr 2022 06:09:09 -0400 Subject: [PATCH 001/141] Roll Engine from 586c90c1336f to 4228b72286ff (4 revisions) (#102290) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index f8a6975cadca4..84146a74fee68 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -586c90c1336f9bba303a4ce6147c212ffffdd5d8 +4228b72286ff76303ae632d6db5a047f86ee6e69 From 1065ca000b3ce16573d88c37d022d5d416699610 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 21 Apr 2022 12:04:07 -0400 Subject: [PATCH 002/141] Roll Plugins from 6e18c7195678 to 5c3c1b8aac06 (7 revisions) (#102306) --- bin/internal/flutter_plugins.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/flutter_plugins.version b/bin/internal/flutter_plugins.version index 03bde7b570745..a083a54bc9ded 100644 --- a/bin/internal/flutter_plugins.version +++ b/bin/internal/flutter_plugins.version @@ -1 +1 @@ -6e18c7195678f5f2ff12e79a5fe738280a66fe26 +5c3c1b8aac065aa1988f114d0c66ecec758e9cbb From a9eaee55eaa4d6ad5e3ac6f584ef169435173ece Mon Sep 17 00:00:00 2001 From: yusuf-goog <91688203+yusuf-goog@users.noreply.github.com> Date: Thu, 21 Apr 2022 09:35:24 -0700 Subject: [PATCH 003/141] Switch ci.yaml Linux builders to Debian. (#102253) In preparation for upgrading linux VMs to Ubuntu, specify builders to use 'os: Debian' instead of 'os: Linux'. There should be no functional changes to current builders with this change. Bug:102252 --- .ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci.yaml b/.ci.yaml index dcf183eff6baa..d54143a5d21f2 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -26,7 +26,7 @@ platform_properties: [ {"dependency": "curl"} ] - os: Linux + os: Debian device_type: none linux_android: properties: From e4edcbceb388c79fc2002a1b84159dab5f41c5e5 Mon Sep 17 00:00:00 2001 From: Taha Tesser Date: Thu, 21 Apr 2022 20:39:09 +0300 Subject: [PATCH 004/141] Improve 'NestedScrollView and internal scrolling' test to account for all the inner children layers (#102309) --- .../test/widgets/nested_scroll_view_test.dart | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/flutter/test/widgets/nested_scroll_view_test.dart b/packages/flutter/test/widgets/nested_scroll_view_test.dart index 212e86428e3af..62a257e38d59a 100644 --- a/packages/flutter/test/widgets/nested_scroll_view_test.dart +++ b/packages/flutter/test/widgets/nested_scroll_view_test.dart @@ -599,9 +599,15 @@ void main() { return child; } if (child is ContainerLayer) { - final PhysicalModelLayer? candidate = _dfsFindPhysicalLayer(child); - if (candidate != null) { - return candidate; + Layer? innerChild = child.firstChild; + while (innerChild != null) { + if (innerChild is ContainerLayer) { + final PhysicalModelLayer? candidate = _dfsFindPhysicalLayer(innerChild); + if (candidate != null) { + return candidate; + } + } + innerChild = innerChild.nextSibling; } } child = child.nextSibling; From 49e043a2c006ef334682b2feb6e9b9f423e3e2db Mon Sep 17 00:00:00 2001 From: Flutter GitHub Bot Date: Thu, 21 Apr 2022 10:49:09 -0700 Subject: [PATCH 005/141] Marks Linux_android gradient_dynamic_perf__e2e_summary to be unflaky (#101832) --- .ci.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.ci.yaml b/.ci.yaml index d54143a5d21f2..ede503f7e59a8 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -2376,7 +2376,6 @@ targets: scheduler: luci - name: Linux_android gradient_dynamic_perf__e2e_summary - bringup: true recipe: devicelab/devicelab_drone presubmit: false timeout: 60 From d3ce6d6eb1788cd274f6b1a1e333e31dcc512a8e Mon Sep 17 00:00:00 2001 From: Flutter GitHub Bot Date: Thu, 21 Apr 2022 11:09:10 -0700 Subject: [PATCH 006/141] Marks Mac_ios cubic_bezier_perf_ios_sksl_warmup__timeline_summary to be flaky (#102231) --- .ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.ci.yaml b/.ci.yaml index ede503f7e59a8..13fdac329be53 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -3276,6 +3276,7 @@ targets: scheduler: luci - name: Mac_ios cubic_bezier_perf_ios_sksl_warmup__timeline_summary + bringup: true # Flaky https://github.com/flutter/flutter/issues/102230 recipe: devicelab/devicelab_drone presubmit: false timeout: 60 From 73b4a7cb9ed73e7b92fa02cc46813e76b0e62c6e Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 21 Apr 2022 15:04:07 -0400 Subject: [PATCH 007/141] Roll Engine from 4228b72286ff to 701e5e8f44ac (4 revisions) (#102316) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 84146a74fee68..6b14862e5a17e 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -4228b72286ff76303ae632d6db5a047f86ee6e69 +701e5e8f44acea0c556adda5c84d1b877096c0b4 From ec6481bed84613ada10d52a39fd123ba88280952 Mon Sep 17 00:00:00 2001 From: drewroengoogle <102626803+drewroengoogle@users.noreply.github.com> Date: Thu, 21 Apr 2022 19:12:38 +0000 Subject: [PATCH 008/141] Change dependency from ios_signing to apple_signing (#102259) * Change dependency name to apple_signing for a better understanding of it's use * Updated Mac_ios test to run if .ci.yaml is updated --- .ci.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.ci.yaml b/.ci.yaml index 13fdac329be53..eaee1eb4d8915 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -125,7 +125,7 @@ platform_properties: [ {"dependency": "xcode"}, {"dependency": "gems"}, - {"dependency": "ios_signing"} + {"dependency": "apple_signing"} ] os: Mac-12 cpu: x86 @@ -3365,6 +3365,7 @@ targets: task_name: hot_mode_dev_cycle_macos_target__benchmark runIf: - dev/** + - .ci.yaml scheduler: luci - name: Mac_ios integration_test_test_ios From 2ebc7bee9ca1ef992d2111902b4134d5896741ad Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Thu, 21 Apr 2022 12:14:09 -0700 Subject: [PATCH 009/141] Adds tooltip to semantics node (#87684) --- .../flutter/lib/src/material/tooltip.dart | 2 +- .../flutter/lib/src/rendering/proxy_box.dart | 16 ++++++ .../flutter/lib/src/semantics/semantics.dart | 51 ++++++++++++++++++- packages/flutter/lib/src/widgets/basic.dart | 7 ++- .../lib/src/widgets/semantics_debugger.dart | 20 +++++--- .../test/material/back_button_test.dart | 2 +- .../material/calendar_date_picker_test.dart | 4 +- packages/flutter/test/material/chip_test.dart | 2 +- .../test/material/date_picker_test.dart | 4 +- .../material/floating_action_button_test.dart | 4 +- .../flutter/test/material/search_test.dart | 2 +- .../flutter/test/material/tooltip_test.dart | 5 +- .../test/material/tooltip_theme_test.dart | 6 ++- .../test/semantics/semantics_test.dart | 2 + .../test/semantics/semantics_update_test.dart | 3 +- .../flutter/test/widgets/semantics_test.dart | 28 ++++++++++ .../test/widgets/semantics_tester.dart | 10 ++++ .../flutter_test/lib/src/accessibility.dart | 2 +- packages/flutter_test/lib/src/matchers.dart | 8 +++ packages/flutter_test/test/matchers_test.dart | 1 + 20 files changed, 154 insertions(+), 25 deletions(-) diff --git a/packages/flutter/lib/src/material/tooltip.dart b/packages/flutter/lib/src/material/tooltip.dart index 7b49f81eb15e9..fd70a6b5eec2d 100644 --- a/packages/flutter/lib/src/material/tooltip.dart +++ b/packages/flutter/lib/src/material/tooltip.dart @@ -698,7 +698,7 @@ class TooltipState extends State with SingleTickerProviderStateMixin { _enableFeedback = widget.enableFeedback ?? tooltipTheme.enableFeedback ?? _defaultEnableFeedback; Widget result = Semantics( - label: _excludeFromSemantics + tooltip: _excludeFromSemantics ? null : _tooltipMessage, child: widget.child, diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart index 7d204b807671b..32fb58e9433ba 100644 --- a/packages/flutter/lib/src/rendering/proxy_box.dart +++ b/packages/flutter/lib/src/rendering/proxy_box.dart @@ -3859,6 +3859,7 @@ class RenderSemanticsAnnotations extends RenderProxyBox { AttributedString? attributedIncreasedValue, AttributedString? attributedDecreasedValue, AttributedString? attributedHint, + String? tooltip, SemanticsHintOverrides? hintOverrides, TextDirection? textDirection, SemanticsSortKey? sortKey, @@ -3917,6 +3918,7 @@ class RenderSemanticsAnnotations extends RenderProxyBox { _attributedIncreasedValue = attributedIncreasedValue, _attributedDecreasedValue = attributedDecreasedValue, _attributedHint = attributedHint, + _tooltip = tooltip, _hintOverrides = hintOverrides, _textDirection = textDirection, _sortKey = sortKey, @@ -4311,6 +4313,18 @@ class RenderSemanticsAnnotations extends RenderProxyBox { markNeedsSemanticsUpdate(); } + /// If non-null, sets the [SemanticsNode.tooltip] semantic to the given value. + /// + /// The reading direction is given by [textDirection]. + String? get tooltip => _tooltip; + String? _tooltip; + set tooltip(String? value) { + if (_tooltip == value) + return; + _tooltip = value; + markNeedsSemanticsUpdate(); + } + /// If non-null, sets the [SemanticsConfiguration.hintOverrides] to the given value. SemanticsHintOverrides? get hintOverrides => _hintOverrides; SemanticsHintOverrides? _hintOverrides; @@ -4843,6 +4857,8 @@ class RenderSemanticsAnnotations extends RenderProxyBox { config.attributedDecreasedValue = attributedDecreasedValue!; if (attributedHint != null) config.attributedHint = attributedHint!; + if (tooltip != null) + config.tooltip = tooltip!; if (hintOverrides != null && hintOverrides!.isNotEmpty) config.hintOverrides = hintOverrides; if (scopesRoute != null) diff --git a/packages/flutter/lib/src/semantics/semantics.dart b/packages/flutter/lib/src/semantics/semantics.dart index 851cd5e8819f9..a7373e589d195 100644 --- a/packages/flutter/lib/src/semantics/semantics.dart +++ b/packages/flutter/lib/src/semantics/semantics.dart @@ -316,6 +316,7 @@ class SemanticsData with Diagnosticable { required this.attributedIncreasedValue, required this.attributedDecreasedValue, required this.attributedHint, + required this.tooltip, required this.textDirection, required this.rect, required this.elevation, @@ -339,6 +340,7 @@ class SemanticsData with Diagnosticable { assert(attributedDecreasedValue != null), assert(attributedIncreasedValue != null), assert(attributedHint != null), + assert(tooltip == '' || textDirection != null, 'A SemanticsData object with tooltip "$tooltip" had a null textDirection.'), assert(attributedLabel.string == '' || textDirection != null, 'A SemanticsData object with label "${attributedLabel.string}" had a null textDirection.'), assert(attributedValue.string == '' || textDirection != null, 'A SemanticsData object with value "${attributedValue.string}" had a null textDirection.'), assert(attributedDecreasedValue.string == '' || textDirection != null, 'A SemanticsData object with decreasedValue "${attributedDecreasedValue.string}" had a null textDirection.'), @@ -429,6 +431,11 @@ class SemanticsData with Diagnosticable { /// See also [hint], which exposes just the raw text. final AttributedString attributedHint; + /// A textual description of the widget's tooltip. + /// + /// The reading direction is given by [textDirection]. + final String tooltip; + /// The reading direction for the text in [label], [value], /// [increasedValue], [decreasedValue], and [hint]. final TextDirection? textDirection; @@ -587,6 +594,7 @@ class SemanticsData with Diagnosticable { properties.add(AttributedStringProperty('increasedValue', attributedIncreasedValue)); properties.add(AttributedStringProperty('decreasedValue', attributedDecreasedValue)); properties.add(AttributedStringProperty('hint', attributedHint)); + properties.add(StringProperty('tooltip', tooltip, defaultValue: '')); properties.add(EnumProperty('textDirection', textDirection, defaultValue: null)); if (textSelection?.isValid ?? false) properties.add(MessageProperty('textSelection', '[${textSelection!.start}, ${textSelection!.end}]')); @@ -610,6 +618,7 @@ class SemanticsData with Diagnosticable { && other.attributedIncreasedValue == attributedIncreasedValue && other.attributedDecreasedValue == attributedDecreasedValue && other.attributedHint == attributedHint + && other.tooltip == tooltip && other.textDirection == textDirection && other.rect == rect && setEquals(other.tags, tags) @@ -637,6 +646,7 @@ class SemanticsData with Diagnosticable { attributedIncreasedValue, attributedDecreasedValue, attributedHint, + tooltip, textDirection, rect, tags, @@ -648,8 +658,8 @@ class SemanticsData with Diagnosticable { scrollExtentMin, platformViewId, maxValueLength, - currentValueLength, Object.hash( + currentValueLength, transform, elevation, thickness, @@ -785,6 +795,7 @@ class SemanticsProperties extends DiagnosticableTree { this.decreasedValue, this.attributedDecreasedValue, this.hint, + this.tooltip, this.attributedHint, this.hintOverrides, this.textDirection, @@ -1178,6 +1189,16 @@ class SemanticsProperties extends DiagnosticableTree { /// * [hint] for a plain string version of this property. final AttributedString? attributedHint; + /// Provides a textual description of the widget's tooltip. + /// + /// In Android, this property sets the `AccessibilityNodeInfo.setTooltipText`. + /// In iOS, this property is appended to the end of the + /// `UIAccessibilityElement.accessibilityLabel`. + /// + /// If a [tooltip] is provided, there must either by an ambient + /// [Directionality] or an explicit [textDirection] should be provided. + final String? tooltip; + /// Provides hint values which override the default hints on supported /// platforms. /// @@ -1469,6 +1490,7 @@ class SemanticsProperties extends DiagnosticableTree { properties.add(AttributedStringProperty('attributedDecreasedValue', attributedDecreasedValue, defaultValue: null)); properties.add(StringProperty('hint', hint, defaultValue: null)); properties.add(AttributedStringProperty('attributedHint', attributedHint, defaultValue: null)); + properties.add(StringProperty('tooltip', tooltip)); properties.add(EnumProperty('textDirection', textDirection, defaultValue: null)); properties.add(DiagnosticsProperty('sortKey', sortKey, defaultValue: null)); properties.add(DiagnosticsProperty('hintOverrides', hintOverrides, defaultValue: null)); @@ -1898,6 +1920,7 @@ class SemanticsNode extends AbstractNode with DiagnosticableTreeMixin { || _attributedValue != config.attributedValue || _attributedIncreasedValue != config.attributedIncreasedValue || _attributedDecreasedValue != config.attributedDecreasedValue + || _tooltip != config.tooltip || _flags != config._flags || _textDirection != config.textDirection || _sortKey != config._sortKey @@ -2027,6 +2050,12 @@ class SemanticsNode extends AbstractNode with DiagnosticableTreeMixin { AttributedString get attributedHint => _attributedHint; AttributedString _attributedHint = _kEmptyConfig.attributedHint; + /// A textual description of the widget's tooltip. + /// + /// The reading direction is given by [textDirection]. + String get tooltip => _tooltip; + String _tooltip = _kEmptyConfig.tooltip; + /// The elevation along the z-axis at which the [rect] of this [SemanticsNode] /// is located above its parent. /// @@ -2235,6 +2264,7 @@ class SemanticsNode extends AbstractNode with DiagnosticableTreeMixin { _attributedIncreasedValue = config.attributedIncreasedValue; _attributedDecreasedValue = config.attributedDecreasedValue; _attributedHint = config.attributedHint; + _tooltip = config.tooltip; _hintOverrides = config.hintOverrides; _elevation = config.elevation; _thickness = config.thickness; @@ -2282,6 +2312,7 @@ class SemanticsNode extends AbstractNode with DiagnosticableTreeMixin { AttributedString attributedIncreasedValue = _attributedIncreasedValue; AttributedString attributedDecreasedValue = _attributedDecreasedValue; AttributedString attributedHint = _attributedHint; + String tooltip = _tooltip; TextDirection? textDirection = _textDirection; Set? mergedTags = tags == null ? null : Set.of(tags!); TextSelection? textSelection = _textSelection; @@ -2336,6 +2367,8 @@ class SemanticsNode extends AbstractNode with DiagnosticableTreeMixin { attributedIncreasedValue = node._attributedIncreasedValue; if (attributedDecreasedValue == null || attributedDecreasedValue.string == '') attributedDecreasedValue = node._attributedDecreasedValue; + if (tooltip == '') + tooltip = node._tooltip; if (node.tags != null) { mergedTags ??= {}; mergedTags!.addAll(node.tags!); @@ -2385,6 +2418,7 @@ class SemanticsNode extends AbstractNode with DiagnosticableTreeMixin { attributedIncreasedValue: attributedIncreasedValue, attributedDecreasedValue: attributedDecreasedValue, attributedHint: attributedHint, + tooltip: tooltip, textDirection: textDirection, rect: rect, transform: transform, @@ -2457,6 +2491,7 @@ class SemanticsNode extends AbstractNode with DiagnosticableTreeMixin { decreasedValueAttributes: data.attributedDecreasedValue.attributes, hint: data.attributedHint.string, hintAttributes: data.attributedHint.attributes, + tooltip: data.tooltip, textDirection: data.textDirection, textSelectionBase: data.textSelection != null ? data.textSelection!.baseOffset : -1, textSelectionExtent: data.textSelection != null ? data.textSelection!.extentOffset : -1, @@ -2595,6 +2630,7 @@ class SemanticsNode extends AbstractNode with DiagnosticableTreeMixin { properties.add(AttributedStringProperty('increasedValue', _attributedIncreasedValue)); properties.add(AttributedStringProperty('decreasedValue', _attributedDecreasedValue)); properties.add(AttributedStringProperty('hint', _attributedHint)); + properties.add(StringProperty('tooltip', _tooltip, defaultValue: '')); properties.add(EnumProperty('textDirection', _textDirection, defaultValue: null)); properties.add(DiagnosticsProperty('sortKey', sortKey, defaultValue: null)); if (_textSelection?.isValid ?? false) @@ -3955,6 +3991,16 @@ class SemanticsConfiguration { _hasBeenAnnotated = true; } + /// A textual description of the widget's tooltip. + /// + /// The reading direction is given by [textDirection]. + String get tooltip => _tooltip; + String _tooltip = ''; + set tooltip(String tooltip) { + _tooltip = tooltip; + _hasBeenAnnotated = true; + } + /// Provides hint values which override the default hints on supported /// platforms. SemanticsHintOverrides? get hintOverrides => _hintOverrides; @@ -4420,6 +4466,8 @@ class SemanticsConfiguration { otherAttributedString: child._attributedHint, otherTextDirection: child.textDirection, ); + if (_tooltip == '') + _tooltip = child._tooltip; _thickness = math.max(_thickness, child._thickness + child._elevation); @@ -4442,6 +4490,7 @@ class SemanticsConfiguration { .._attributedDecreasedValue = _attributedDecreasedValue .._attributedHint = _attributedHint .._hintOverrides = _hintOverrides + .._tooltip = _tooltip .._elevation = _elevation .._thickness = _thickness .._flags = _flags diff --git a/packages/flutter/lib/src/widgets/basic.dart b/packages/flutter/lib/src/widgets/basic.dart index 417f09f2a18ea..f565db3598e2e 100644 --- a/packages/flutter/lib/src/widgets/basic.dart +++ b/packages/flutter/lib/src/widgets/basic.dart @@ -6695,6 +6695,7 @@ class Semantics extends SingleChildRenderObjectWidget { AttributedString? attributedDecreasedValue, String? hint, AttributedString? attributedHint, + String? tooltip, String? onTapHint, String? onLongPressHint, TextDirection? textDirection, @@ -6759,6 +6760,7 @@ class Semantics extends SingleChildRenderObjectWidget { attributedDecreasedValue: attributedDecreasedValue, hint: hint, attributedHint: attributedHint, + tooltip: tooltip, textDirection: textDirection, sortKey: sortKey, tagForChildren: tagForChildren, @@ -6901,6 +6903,7 @@ class Semantics extends SingleChildRenderObjectWidget { attributedIncreasedValue: _effectiveAttributedIncreasedValue, attributedDecreasedValue: _effectiveAttributedDecreasedValue, attributedHint: _effectiveAttributedHint, + tooltip: properties.tooltip, hintOverrides: properties.hintOverrides, textDirection: _getTextDirection(context), sortKey: properties.sortKey, @@ -6936,7 +6939,8 @@ class Semantics extends SingleChildRenderObjectWidget { final bool containsText = properties.attributedLabel != null || properties.label != null || properties.value != null || - properties.hint != null; + properties.hint != null || + properties.tooltip != null; if (!containsText) return null; @@ -6977,6 +6981,7 @@ class Semantics extends SingleChildRenderObjectWidget { ..attributedIncreasedValue = _effectiveAttributedIncreasedValue ..attributedDecreasedValue = _effectiveAttributedDecreasedValue ..attributedHint = _effectiveAttributedHint + ..tooltip = properties.tooltip ..hintOverrides = properties.hintOverrides ..namesRoute = properties.namesRoute ..textDirection = _getTextDirection(context) diff --git a/packages/flutter/lib/src/widgets/semantics_debugger.dart b/packages/flutter/lib/src/widgets/semantics_debugger.dart index b7796248921dd..062659186cd3e 100644 --- a/packages/flutter/lib/src/widgets/semantics_debugger.dart +++ b/packages/flutter/lib/src/widgets/semantics_debugger.dart @@ -281,27 +281,33 @@ class _SemanticsDebuggerPainter extends CustomPainter { assert(data.attributedLabel != null); final String message; - if (data.attributedLabel.string.isEmpty) { + final String tooltipAndLabel = [ + if (data.tooltip.isNotEmpty) + data.tooltip, + if (data.attributedLabel.string.isNotEmpty) + data.attributedLabel.string, + ].join('\n'); + if (tooltipAndLabel.isEmpty) { message = annotations.join('; '); } else { - final String label; + final String effectivelabel; if (data.textDirection == null) { - label = '${Unicode.FSI}${data.attributedLabel.string}${Unicode.PDI}'; + effectivelabel = '${Unicode.FSI}$tooltipAndLabel${Unicode.PDI}'; annotations.insert(0, 'MISSING TEXT DIRECTION'); } else { switch (data.textDirection!) { case TextDirection.rtl: - label = '${Unicode.RLI}${data.attributedLabel.string}${Unicode.PDF}'; + effectivelabel = '${Unicode.RLI}$tooltipAndLabel${Unicode.PDF}'; break; case TextDirection.ltr: - label = data.attributedLabel.string; + effectivelabel = tooltipAndLabel; break; } } if (annotations.isEmpty) { - message = label; + message = effectivelabel; } else { - message = '$label (${annotations.join('; ')})'; + message = '$effectivelabel (${annotations.join('; ')})'; } } diff --git a/packages/flutter/test/material/back_button_test.dart b/packages/flutter/test/material/back_button_test.dart index eb4db41a6bab1..d4ff9a92ffab1 100644 --- a/packages/flutter/test/material/back_button_test.dart +++ b/packages/flutter/test/material/back_button_test.dart @@ -154,7 +154,7 @@ void main() { await tester.pumpAndSettle(); expect(tester.getSemantics(find.byType(BackButton)), matchesSemantics( - label: 'Back', + tooltip: 'Back', isButton: true, hasEnabledState: true, isEnabled: true, diff --git a/packages/flutter/test/material/calendar_date_picker_test.dart b/packages/flutter/test/material/calendar_date_picker_test.dart index bf1add0ef3b3b..f21300a043847 100644 --- a/packages/flutter/test/material/calendar_date_picker_test.dart +++ b/packages/flutter/test/material/calendar_date_picker_test.dart @@ -649,7 +649,7 @@ void main() { // Prev/Next month buttons. expect(tester.getSemantics(previousMonthIcon), matchesSemantics( - label: 'Previous month', + tooltip: 'Previous month', isButton: true, hasTapAction: true, isEnabled: true, @@ -657,7 +657,7 @@ void main() { isFocusable: true, )); expect(tester.getSemantics(nextMonthIcon), matchesSemantics( - label: 'Next month', + tooltip: 'Next month', isButton: true, hasTapAction: true, isEnabled: true, diff --git a/packages/flutter/test/material/chip_test.dart b/packages/flutter/test/material/chip_test.dart index 80cb5ccec09fe..ea4c7947a20a4 100644 --- a/packages/flutter/test/material/chip_test.dart +++ b/packages/flutter/test/material/chip_test.dart @@ -1964,7 +1964,7 @@ void main() { ], children: [ TestSemantics( - label: 'Delete', + tooltip: 'Delete', actions: [SemanticsAction.tap], textDirection: TextDirection.ltr, flags: [ diff --git a/packages/flutter/test/material/date_picker_test.dart b/packages/flutter/test/material/date_picker_test.dart index 45ab8b05ccb97..525148fb82cf7 100644 --- a/packages/flutter/test/material/date_picker_test.dart +++ b/packages/flutter/test/material/date_picker_test.dart @@ -817,7 +817,7 @@ void main() { // Input mode toggle button expect(tester.getSemantics(switchToInputIcon), matchesSemantics( - label: 'Switch to input', + tooltip: 'Switch to input', isButton: true, hasTapAction: true, isEnabled: true, @@ -860,7 +860,7 @@ void main() { // Input mode toggle button expect(tester.getSemantics(switchToCalendarIcon), matchesSemantics( - label: 'Switch to calendar', + tooltip: 'Switch to calendar', isButton: true, hasTapAction: true, isEnabled: true, diff --git a/packages/flutter/test/material/floating_action_button_test.dart b/packages/flutter/test/material/floating_action_button_test.dart index 3b41bc336d01e..987e8a9905005 100644 --- a/packages/flutter/test/material/floating_action_button_test.dart +++ b/packages/flutter/test/material/floating_action_button_test.dart @@ -670,7 +670,7 @@ void main() { semantics.dispose(); }); - testWidgets('Tooltip is used as semantics label', (WidgetTester tester) async { + testWidgets('Tooltip is used as semantics tooltip', (WidgetTester tester) async { final SemanticsTester semantics = SemanticsTester(tester); await tester.pumpWidget( @@ -697,7 +697,7 @@ void main() { ], children: [ TestSemantics( - label: 'Add Photo', + tooltip: 'Add Photo', actions: [ SemanticsAction.tap, ], diff --git a/packages/flutter/test/material/search_test.dart b/packages/flutter/test/material/search_test.dart index 9d7ccb30daca4..9a6c24e1529d8 100644 --- a/packages/flutter/test/material/search_test.dart +++ b/packages/flutter/test/material/search_test.dart @@ -616,7 +616,7 @@ void main() { SemanticsFlag.isFocusable, ], actions: [SemanticsAction.tap], - label: 'Back', + tooltip: 'Back', textDirection: TextDirection.ltr, ), TestSemantics( diff --git a/packages/flutter/test/material/tooltip_test.dart b/packages/flutter/test/material/tooltip_test.dart index 842cf8b0c112c..2d25385bc6dc9 100644 --- a/packages/flutter/test/material/tooltip_test.dart +++ b/packages/flutter/test/material/tooltip_test.dart @@ -1263,7 +1263,7 @@ void main() { children: [ TestSemantics.rootChild( id: 1, - label: 'TIP', + tooltip: 'TIP', textDirection: TextDirection.ltr, ), ], @@ -1462,7 +1462,8 @@ void main() { flags: [SemanticsFlag.scopesRoute], children: [ TestSemantics( - label: 'Foo\nBar', + tooltip: 'Foo', + label: 'Bar', textDirection: TextDirection.ltr, ), ], diff --git a/packages/flutter/test/material/tooltip_theme_test.dart b/packages/flutter/test/material/tooltip_theme_test.dart index 999c335115b6a..2fedbf3a5e6f1 100644 --- a/packages/flutter/test/material/tooltip_theme_test.dart +++ b/packages/flutter/test/material/tooltip_theme_test.dart @@ -1066,7 +1066,8 @@ void main() { flags: [SemanticsFlag.scopesRoute], children: [ TestSemantics( - label: 'Foo\nBar', + tooltip: 'Foo', + label: 'Bar', textDirection: TextDirection.ltr, ), ], @@ -1108,7 +1109,8 @@ void main() { flags: [SemanticsFlag.scopesRoute], children: [ TestSemantics( - label: 'Foo\nBar', + tooltip: 'Foo', + label: 'Bar', textDirection: TextDirection.ltr, ), ], diff --git a/packages/flutter/test/semantics/semantics_test.dart b/packages/flutter/test/semantics/semantics_test.dart index ebc240b3436d4..4f2be0e967e11 100644 --- a/packages/flutter/test/semantics/semantics_test.dart +++ b/packages/flutter/test/semantics/semantics_test.dart @@ -561,6 +561,7 @@ void main() { ' increasedValue: ""\n' ' decreasedValue: ""\n' ' hint: ""\n' + ' tooltip: ""\n' ' textDirection: null\n' ' sortKey: null\n' ' platformViewId: null\n' @@ -659,6 +660,7 @@ void main() { ' increasedValue: ""\n' ' decreasedValue: ""\n' ' hint: ""\n' + ' tooltip: ""\n' ' textDirection: null\n' ' sortKey: null\n' ' platformViewId: null\n' diff --git a/packages/flutter/test/semantics/semantics_update_test.dart b/packages/flutter/test/semantics/semantics_update_test.dart index 78b0926dee053..0026e50674306 100644 --- a/packages/flutter/test/semantics/semantics_update_test.dart +++ b/packages/flutter/test/semantics/semantics_update_test.dart @@ -158,7 +158,8 @@ void main() { 'properties: SemanticsProperties, ' 'attributedLabel: "label" [SpellOutStringAttribute(TextRange(start: 0, end: 5))], ' 'attributedValue: "value" [LocaleStringAttribute(TextRange(start: 0, end: 5), en-MX)], ' - 'attributedHint: "hint" [SpellOutStringAttribute(TextRange(start: 1, end: 2))]' // ignore: missing_whitespace_between_adjacent_strings + 'attributedHint: "hint" [SpellOutStringAttribute(TextRange(start: 1, end: 2))], ' + 'tooltip: null'// ignore: missing_whitespace_between_adjacent_strings ')', ); diff --git a/packages/flutter/test/widgets/semantics_test.dart b/packages/flutter/test/widgets/semantics_test.dart index d8e6fc636d9da..5586aa83860a6 100644 --- a/packages/flutter/test/widgets/semantics_test.dart +++ b/packages/flutter/test/widgets/semantics_test.dart @@ -61,6 +61,34 @@ void main() { semantics.dispose(); }, semanticsEnabled: false); + testWidgets('Semantics tooltip', (WidgetTester tester) async { + final SemanticsTester semantics = SemanticsTester(tester); + + final TestSemantics expectedSemantics = TestSemantics.root( + children: [ + TestSemantics.rootChild( + tooltip: 'test1', + textDirection: TextDirection.ltr, + ), + ], + ); + + await tester.pumpWidget( + Semantics( + tooltip: 'test1', + textDirection: TextDirection.ltr, + ), + ); + + expect(semantics, hasSemantics( + expectedSemantics, + ignoreTransform: true, + ignoreRect: true, + ignoreId: true, + )); + semantics.dispose(); + }); + testWidgets('Detach and reattach assert', (WidgetTester tester) async { final SemanticsTester semantics = SemanticsTester(tester); final GlobalKey key = GlobalKey(); diff --git a/packages/flutter/test/widgets/semantics_tester.dart b/packages/flutter/test/widgets/semantics_tester.dart index 3c4cc90ac8112..e15332dfc7d31 100644 --- a/packages/flutter/test/widgets/semantics_tester.dart +++ b/packages/flutter/test/widgets/semantics_tester.dart @@ -39,6 +39,7 @@ class TestSemantics { this.actions = 0, this.label = '', this.value = '', + this.tooltip = '', this.increasedValue = '', this.decreasedValue = '', this.hint = '', @@ -72,6 +73,7 @@ class TestSemantics { this.increasedValue = '', this.decreasedValue = '', this.hint = '', + this.tooltip = '', this.textDirection, this.transform, this.textSelection, @@ -110,6 +112,7 @@ class TestSemantics { this.label = '', this.hint = '', this.value = '', + this.tooltip = '', this.increasedValue = '', this.decreasedValue = '', this.textDirection, @@ -176,6 +179,9 @@ class TestSemantics { /// performed on this node. final String hint; + /// A textual tooltip of this node. + final String tooltip; + /// The reading direction of the [label]. /// /// Even if this is not set, the [hasSemantics] matcher will verify that if a @@ -292,6 +298,8 @@ class TestSemantics { return fail('expected node id $id to have decreasedValue "$decreasedValue" but found value "${nodeData.decreasedValue}".'); if (hint != nodeData.hint) return fail('expected node id $id to have hint "$hint" but found hint "${nodeData.hint}".'); + if (tooltip != nodeData.tooltip) + return fail('expected node id $id to have tooltip "$tooltip" but found hint "${nodeData.tooltip}".'); if (textDirection != null && textDirection != nodeData.textDirection) return fail('expected node id $id to have textDirection "$textDirection" but found "${nodeData.textDirection}".'); if ((nodeData.label != '' || nodeData.value != '' || nodeData.hint != '' || node.increasedValue != '' || node.decreasedValue != '') && nodeData.textDirection == null) @@ -365,6 +373,8 @@ class TestSemantics { buf.writeln("$indent decreasedValue: '$decreasedValue',"); if (hint != null && hint != '') buf.writeln("$indent hint: '$hint',"); + if (tooltip != null && tooltip != '') + buf.writeln("$indent tooltip: '$tooltip',"); if (textDirection != null) buf.writeln('$indent textDirection: $textDirection,'); if (textSelection?.isValid ?? false) diff --git a/packages/flutter_test/lib/src/accessibility.dart b/packages/flutter_test/lib/src/accessibility.dart index 5bb9262a91745..f23c589b81de5 100644 --- a/packages/flutter_test/lib/src/accessibility.dart +++ b/packages/flutter_test/lib/src/accessibility.dart @@ -228,7 +228,7 @@ class LabeledTapTargetGuideline extends AccessibilityGuideline { !data.hasAction(ui.SemanticsAction.tap)) { return result; } - if (data.label == null || data.label.isEmpty) { + if ((data.label == null || data.label.isEmpty) && (data.tooltip == null || data.tooltip.isEmpty)) { result += Evaluation.fail( '$node: expected tappable node to have semantic label, ' 'but none was found.\n', diff --git a/packages/flutter_test/lib/src/matchers.dart b/packages/flutter_test/lib/src/matchers.dart index bad708fe4f7b8..338e5bcaf1860 100644 --- a/packages/flutter_test/lib/src/matchers.dart +++ b/packages/flutter_test/lib/src/matchers.dart @@ -494,6 +494,7 @@ Matcher matchesSemantics({ String? increasedValue, AttributedString? attributedIncreasedValue, String? decreasedValue, + String? tooltip, AttributedString? attributedDecreasedValue, TextDirection? textDirection, Rect? rect, @@ -625,6 +626,7 @@ Matcher matchesSemantics({ value: value, attributedValue: attributedValue, increasedValue: increasedValue, + tooltip: tooltip, attributedIncreasedValue: attributedIncreasedValue, decreasedValue: decreasedValue, attributedDecreasedValue: attributedDecreasedValue, @@ -1783,6 +1785,7 @@ class _MatchesSemanticsData extends Matcher { this.attributedIncreasedValue, this.decreasedValue, this.attributedDecreasedValue, + this.tooltip, this.flags, this.actions, this.textDirection, @@ -1808,6 +1811,7 @@ class _MatchesSemanticsData extends Matcher { final AttributedString? attributedIncreasedValue; final String? decreasedValue; final AttributedString? attributedDecreasedValue; + final String? tooltip; final SemanticsHintOverrides? hintOverrides; final List? actions; final List? customActions; @@ -1845,6 +1849,8 @@ class _MatchesSemanticsData extends Matcher { description.add(' with decreasedValue: $decreasedValue '); if (attributedDecreasedValue != null) description.add(' with attributedDecreasedValue: $attributedDecreasedValue'); + if (tooltip != null) + description.add(' with tooltip: $tooltip'); if (actions != null) description.add(' with actions: ').addDescriptionOf(actions); if (flags != null) @@ -1942,6 +1948,8 @@ class _MatchesSemanticsData extends Matcher { return failWithDescription( matchState, 'attributedDecreasedValue was: ${data.attributedDecreasedValue}'); } + if (tooltip != null && tooltip != data.tooltip) + return failWithDescription(matchState, 'tooltip was: ${data.tooltip}'); if (textDirection != null && textDirection != data.textDirection) return failWithDescription(matchState, 'textDirection was: $textDirection'); if (rect != null && rect != data.rect) diff --git a/packages/flutter_test/test/matchers_test.dart b/packages/flutter_test/test/matchers_test.dart index 48a9d781035b6..4632aba6fc4ea 100644 --- a/packages/flutter_test/test/matchers_test.dart +++ b/packages/flutter_test/test/matchers_test.dart @@ -566,6 +566,7 @@ void main() { attributedValue: AttributedString('c'), attributedDecreasedValue: AttributedString('d'), attributedHint: AttributedString('e'), + tooltip: 'f', textDirection: TextDirection.ltr, rect: const Rect.fromLTRB(0.0, 0.0, 10.0, 10.0), elevation: 3.0, From ab889ab976fbe69ff9d54afbf1ba41a696c32b2c Mon Sep 17 00:00:00 2001 From: Abhishek Ghaskata Date: Fri, 22 Apr 2022 01:04:07 +0530 Subject: [PATCH 010/141] macos support for image_list (#84899) --- examples/image_list/macos/.gitignore | 6 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../macos/Runner.xcodeproj/project.pbxproj | 572 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 89 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../image_list/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 +++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 46993 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3276 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 1429 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 5933 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1243 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 14800 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1874 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 339 +++++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + examples/image_list/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 19 + .../macos/Runner/Release.entitlements | 8 + 26 files changed, 1214 insertions(+) create mode 100644 examples/image_list/macos/.gitignore create mode 100644 examples/image_list/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 examples/image_list/macos/Flutter/Flutter-Release.xcconfig create mode 100644 examples/image_list/macos/Runner.xcodeproj/project.pbxproj create mode 100644 examples/image_list/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/image_list/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 examples/image_list/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 examples/image_list/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/image_list/macos/Runner/AppDelegate.swift create mode 100644 examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 examples/image_list/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 examples/image_list/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 examples/image_list/macos/Runner/Configs/Debug.xcconfig create mode 100644 examples/image_list/macos/Runner/Configs/Release.xcconfig create mode 100644 examples/image_list/macos/Runner/Configs/Warnings.xcconfig create mode 100644 examples/image_list/macos/Runner/DebugProfile.entitlements create mode 100644 examples/image_list/macos/Runner/Info.plist create mode 100644 examples/image_list/macos/Runner/MainFlutterWindow.swift create mode 100644 examples/image_list/macos/Runner/Release.entitlements diff --git a/examples/image_list/macos/.gitignore b/examples/image_list/macos/.gitignore new file mode 100644 index 0000000000000..d2fd3772308cc --- /dev/null +++ b/examples/image_list/macos/.gitignore @@ -0,0 +1,6 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/xcuserdata/ diff --git a/examples/image_list/macos/Flutter/Flutter-Debug.xcconfig b/examples/image_list/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000000000..c2efd0b608ba8 --- /dev/null +++ b/examples/image_list/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/examples/image_list/macos/Flutter/Flutter-Release.xcconfig b/examples/image_list/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000000000..c2efd0b608ba8 --- /dev/null +++ b/examples/image_list/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/examples/image_list/macos/Runner.xcodeproj/project.pbxproj b/examples/image_list/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000000000..65e1baa895ba6 --- /dev/null +++ b/examples/image_list/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,572 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* image_list.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "image_list.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* image_list.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* image_list.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 0930; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/examples/image_list/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/image_list/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000000..18d981003d68d --- /dev/null +++ b/examples/image_list/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/image_list/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/image_list/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000000000..8d8f1dd636d6d --- /dev/null +++ b/examples/image_list/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/image_list/macos/Runner.xcworkspace/contents.xcworkspacedata b/examples/image_list/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000000..1d526a16ed0f1 --- /dev/null +++ b/examples/image_list/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/examples/image_list/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/image_list/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000000..18d981003d68d --- /dev/null +++ b/examples/image_list/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/image_list/macos/Runner/AppDelegate.swift b/examples/image_list/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000000000..d080d41951d35 --- /dev/null +++ b/examples/image_list/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000000..a2ec33f19f110 --- /dev/null +++ b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4935a7ca84f0976aca34b7f2895d65fb94d1ea GIT binary patch literal 46993 zcmZ5|3p`X?`~OCwR3s6~xD(})N~M}fiXn6%NvKp3QYhuNN0*apqmfHdR7#ShNQ99j zQi+P9nwlXbmnktZ_WnO>bl&&<{m*;O=RK!cd#$zCdM@AR`#jH%+2~+BeX7b-48x|= zZLBt9*d+MZNtpCx_&asa{+CselLUV<<&ceQ5QfRjLjQDSL-t4eq}5znmIXDtfA|D+VRV$*2jxU)JopC)!37FtD<6L^&{ia zgVf1p(e;c3|HY;%uD5<-oSFkC2JRh- z&2RTL)HBG`)j5di8ys|$z_9LSm^22*uH-%MmUJs|nHKLHxy4xTmG+)JoA`BN7#6IN zK-ylvs+~KN#4NWaH~o5Wuwd@W?H@diExdcTl0!JJq9ZOA24b|-TkkeG=Q(pJw7O;i z`@q+n|@eeW7@ z&*NP+)wOyu^5oNJ=yi4~s_+N)#M|@8nfw=2#^BpML$~dJ6yu}2JNuq!)!;Uwxic(z zM@Wa-v|U{v|GX4;P+s#=_1PD7h<%8ey$kxVsS1xt&%8M}eOF98&Rx7W<)gY(fCdmo{y*FPC{My!t`i=PS1cdV7DD=3S1J?b2<5BevW7!rWJ%6Q?D9UljULd*7SxX05PP^5AklWu^y` z-m9&Oq-XNSRjd|)hZ44DK?3>G%kFHSJ8|ZXbAcRb`gH~jk}Iwkl$@lqg!vu)ihSl= zjhBh%%Hq|`Vm>T7+SYyf4bI-MgiBq4mZlZmsKv+S>p$uAOoNxPT)R6owU%t*#aV}B z5@)X8nhtaBhH=={w;Du=-S*xvcPz26EI!gt{(hf;TllHrvku`^8wMj7-9=By>n{b= zHzQ?Wn|y=;)XM#St@o%#8idxfc`!oVz@Lv_=y(t-kUC`W)c0H2TX}Lop4121;RHE(PPHKfe_e_@DoHiPbVP%JzNudGc$|EnIv`qww1F5HwF#@l(=V zyM!JQO>Rt_PTRF1hI|u^2Uo#w*rdF*LXJky0?|fhl4-M%zN_2RP#HFhSATE3&{sos zIE_?MdIn!sUH*vjs(teJ$7^7#|M_7m`T>r>qHw>TQh?yhhc8=TJk2B;KNXw3HhnQs za(Uaz2VwP;82rTy(T3FJNKA86Y7;L(K=~BW_Q=jjRh=-k_=wh-$`nY+#au+v^C4VV z)U?X(v-_#i=3bAylP1S*pM_y*DB z2fR!imng6Dk$>dl*K@AIj<~zw_f$T!-xLO8r{OkE(l?W#W<={460Y02*K#)O4xp?W zAN+isO}!*|mN7B#jUt&!KNyFOpUxv&ybM>jmkfn8z^llBslztv!!`TBEPwu;#eR3d z@_VDa)|ByvXx1V=^Up4{;M8ji3FC7gm(C7Ty-#1gs+U<{Ouc(iV67{< zam#KwvR&s=k4W<13`}DxzJ9{TUa97N-cgWkCDc+C339)EEnC@^HQK6OvKDSCvNz(S zOFAF_6omgG!+zaPC8fBO3kH8YVBx9_AoM?->pv~@$saf(Myo|e@onD`a=;kO*Utem ze=eUH&;JB2I4}?Pm@=VnE+yb$PD~sA5+)|iH3bi|s?ExIePeoAMd(Z4Z%$mCu{t;B9(sgdG~Q}0ShAwe!l8nw0tJn zJ+m?ogrgty$3=T&6+JJa!1oS3AtQQ1gJ z3gR1<=hXU>{SB-zq!okl4c+V9N;vo4{fyGeqtgBIt%TPC1P&k!pR-GZ7O8b}9=%>3 zQrV%FQdB+CcCRKK)0}v>U25rbQk(1^9Ax|WcAo5?L(H&H@%zAoT2RH$iN6boyXpsYqME}WJZI6T%OMlkWXK>R`^7AHG&31 z&MIU}igQ7$;)7AEm#dXA+!I&6ymb7n6D;F7c$tO3Ql(`ht z1sFrzIk_q5#=!#D(e~#SdWz5K;tPF*R883Yu>*@jTeOGUjQekw zM+7HlfP{y8p}jA9bLfyKC_Ti8k#;AVp@RML^9MQp-E+Ns-Y zKA!aAZV-sfm<23fy#@TZZlQVQxH%R7rD}00LxHPUF!Yg3%OX ziDe4m<4fp{7ivBS?*AlJz$~vw5m)Ei8`|+~xOSqJ$waA0+Yys$z$9iN9TIXu8 zaYacjd09uRAsU|)g|03w`F|b1Xg#K~*Mp2X^K^)r3P^juoc}-me&YhkW3#G|H<~jK zoKD?lE@jOw7>4cpKkh!8qU!bF(i~Oa8a!EGy-j46eZYbKUvF=^^nq`EtWFK}gwrsB zeu<6~?mk+;+$whP)8ud8vjqh+NofU+Nu`~|pb&CN1y_idxxf6cGbT=fBZR_hl&G)GgnW$*oDrN-zz;cKs18n+dAn95w z)Y>l6!5eYpebJGw7it~Q5m}8$7@%p&KS=VtydFj4HPJ{xqUVS_Ih}c(^4nUdwG|0% zw8Fnm{IT`8MqoL(1BNtu_#7alS@3WSUUOFT@U*`V!zrPIeCbbO=pE%|g92$EU|lw; z^;^AqMVWVf-R5^OI79TzIyYf}HX%0Y)=aYH;EKo}?=R~ZM&s&F;W>u%hFUfNafb;- z8OkmkK3k||J#3`xdLuMJAhj9oPI?Cjt}cDN7hw26n7irWS0hsy`fs&Y?Y&(QF*Nu! z!p`NggHXaBU6$P42LkqnKsPG@363DHYGXg{!|z6VMAQt??>FK1B4x4{j;iY8A+7o% z*!0qt&w+w#Ob@pQp;q)u0;v^9FlY=AK>2!qku)!%TO<^lNBr!6R8X)iXgXi^1p`T8 z6sU@Y_Fsp6E89E1*jz~Tm2kF=mjYz_q99r^v0h-l7SP6azzL%woM6!7>IFWyizrNwAqoia3nN0q343q zFztMPh0)?ugQg5Izbk{5$EGcMzt*|=S8ZFK%O&^YV@V;ZRL>f!iG?s5z{(*Xq20c^ z(hkk~PljBo%U`$q>mz!ir7chKlE-oHA2&0i@hn4O5scsI&nIWsM>sYg;Ph5IO~VpT z%c-3_{^N>4kECzk?2~Z@V|jWio&a&no;boiNxqXOpS;ph)gEDFJ6E=zPJ$>y5w`U0 z;h9_6ncIEY?#j1+IDUuixRg&(hw+QSSEmFi%_$ua$^K%(*jUynGU@FlvsyThxqMRw z7_ALpqTj~jOSu2_(@wc_Z?>X&(5jezB6w-@0X_34f&cZ=cA-t%#}>L7Q3QRx1$qyh zG>NF=Ts>)wA)fZIlk-kz%Xa;)SE(PLu(oEC8>9GUBgd$(^_(G6Y((Hi{fsV; zt*!IBWx_$5D4D&ezICAdtEU!WS3`YmC_?+o&1RDSfTbuOx<*v`G<2SP;5Q4TqFV&q zJL=90Lcm^TL7a9xck}XPMRnQ`l0%w-fi@bRI&c*VDj!W4nj=qaQd$2U?^9RTT{*qS_)Q9OL>s}2P3&da^Pf(*?> z#&2bt;Q7N2`P{{KH@>)Tf5&za?crRmQ%8xZi<9f=EV3={K zwMet=oA0-@`8F;u`8j-!8G~0TiH5yKemY+HU@Zw3``1nT>D ziK465-m?Nm^~@G@RW2xH&*C#PrvCWU)#M4jQ`I*>_^BZB_c!z5Wn9W&eCBE(oc1pw zmMr)iu74Xl5>pf&D7Ml>%uhpFGJGyj6Mx=t#`}Mt3tDZQDn~K`gp0d)P>>4{FGiP$sPK*ExVs!1)aGgAX z6eA;-9@@Muti3xYv$8U{?*NxlHxs?)(6%!Iw&&l79K86h+Z8;)m9+(zzX?cS zH*~)yk)X^H1?AfL!xctY-8T0G0Vh~kcP=8%Wg*zZxm*;eb)TEh&lGuNkqJib_}i;l z*35qQ@}I#v;EwCGM2phE1{=^T4gT63m`;UEf5x2Get-WSWmt6%T6NJM`|tk-~4<#HHwCXuduB4+vW!BywlH8murH@|32CNxx7} zAoF?Gu02vpSl|q1IFO0tNEvKwyH5V^3ZtEO(su1sIYOr{t@Tr-Ot@&N*enq;Je38} zOY+C1bZ?P~1=Qb%oStI-HcO#|WHrpgIDR0GY|t)QhhTg*pMA|%C~>;R4t_~H1J3!i zyvQeDi&|930wZlA$`Wa9)m(cB!lPKD>+Ag$5v-}9%87`|7mxoNbq7r^U!%%ctxiNS zM6pV6?m~jCQEKtF3vLnpag``|bx+eJ8h=(8b;R+8rzueQvXgFhAW*9y$!DgSJgJj% zWIm~}9(R6LdlXEg{Y3g_i7dP^98=-3qa z$*j&xC_$5btF!80{D&2*mp(`rNLAM$JhkB@3al3s=1k^Ud6HHontlcZw&y?`uPT#a za8$RD%e8!ph8Ow7kqI@_vd7lgRhkMvpzp@4XJ`9dA@+Xk1wYf`0Dk!hIrBxhnRR(_ z%jd(~x^oqA>r>`~!TEyhSyrwNA(i}={W+feUD^8XtX^7^Z#c7att{ot#q6B;;t~oq zct7WAa?UK0rj0yhRuY$7RPVoO29JV$o1Z|sJzG5<%;7pCu%L-deUon-X_wAtzY@_d z6S}&5xXBtsf8TZ13chR&vOMYs0F1?SJcvPn>SFe#+P3r=6=VIqcCU7<6-vxR*BZUm zO^DkE{(r8!e56)2U;+8jH4tuD2c(ptk0R{@wWK?%Wz?fJckr9vpIU27^UN*Q$}VyHWx)reWgmEls}t+2#Zm z_I5?+htcQl)}OTqF<`wht89>W*2f6e)-ewk^XU5!sW2A2VtaI=lggR&I z;Rw{xd)WMqw`VUPbhrx!!1Eg_*O0Si6t@ny)~X^Gu8wZZDockr)5)6tm+<=z+rYu? zCof+;!nq6r9MAfh zp4|^2w^-3vFK~{JFX|F5BIWecBJkkEuE%iP8AZ z^&e|C+VEH&i(4Y|oWPCa#C3T$129o5xaJa=y8f(!k&q+x=M|rq{?Zw_n?1X-bt&bP zD{*>Io`F4(i+5eE2oEo6iF}jNAZ52VN&Cp>LD{MyB=mCeiwP+v#gRvr%W)}?JBTMY z_hc2r8*SksC%(pp$KGmWSa|fx;r^9c;~Q(Jqw1%;$#azZf}#Fca9NZOh{*YxV9(1ivVA^2Wz>!A&Xvmm-~{y8n!^Jdl8c>`J#=2~!P{ zC1g_5Ye3={{fB`R%Q|%9<1p1;XmPo5lH5PHvX$bCIYzQhGqj7hZ?@P4M0^mkejD|H zVzARm7LRy|8`jSG^GpxRIs=aD>Y{Cb>^IwGEKCMd5LAoI;b{Q<-G}x*e>86R8dNAV z<@jb1q%@QQanW1S72kOQ$9_E#O?o}l{mHd=%Dl{WQcPio$baXZN!j{2m)TH1hfAp{ zM`EQ=4J`fMj4c&T+xKT!I0CfT^UpcgJK22vC962ulgV7FrUrII5!rx1;{@FMg(dIf zAC}stNqooiVol%%TegMuWnOkWKKA}hg6c)ssp~EnTUVUI98;a}_8UeTgT|<%G3J=n zKL;GzAhIQ_@$rDqqc1PljwpfUwiB)w!#cLAkgR_af;>}(BhnC9N zqL|q8-?jsO&Srv54TxVuJ=rfcX=C7{JNV zSmW@s0;$(#!hNuU0|YyXLs{9$_y2^fRmM&g#toh}!K8P}tlJvYyrs6yjTtHU>TB0} zNy9~t5F47ocE_+%V1(D!mKNBQc{bnrAbfPC2KO?qdnCv8DJzEBeDbW}gd!g2pyRyK`H6TVU^~K# z488@^*&{foHKthLu?AF6l-wEE&g1CTKV|hN7nP+KJnkd0sagHm&k{^SE-woW9^fYD z7y?g*jh+ELt;$OgP>Se3o#~w9qS}!%#vBvB?|I-;GM63oYrJ}HFRW6D+{54v@PN8K z2kG8`!VVc+DHl^8y#cevo4VCnTaPTzCB%*)sr&+=p{Hh#(MwaJbeuvvd!5fd67J_W za`oKxTR=mtM7P}i2qHG8=A(39l)_rHHKduDVA@^_Ueb7bq1A5#zHAi**|^H@fD`_W z#URdSG86hhQ#&S-Vf_8b`TIAmM55XhaHX7}Ci-^(ZDs*yb-WrWV&(oAQu3vMv%u$5 zc;!ADkeNBN_@47r!;%G3iFzo;?k)xTS-;1D-YeS5QXN7`p2PzGK~e6ib;8COBa5)p zfMn}dA--&A12~zr&GVk?qnBGfIEo`5yir;-Q;ZLn{Fimdrk;e!)q`sAkYh^~^>4Q@ zN5RT>s38+`V{|6@k&vZW!W0*BEqV&~34d+Ev8h)ObYL7Bd_hgbUzjdJaXP=S@Dp6X z)i013q3K4Gr5d%2YIp>218pYK!xwH;k)j?uUrT-yVKLg*L3y~=a+qd!RWGTL`z>29 z-Zb4Y{%pT%`R-iA#?T58c-i@?jf-Ckol9O>HAZPUxN%Z=<4ad9BL7n`_kH0i#E(m& zaNb039+z~ONUCLsf_a|x*&ptU?`=R*n}rm-tOdCDrS!@>>xBg)B3Sy8?x^e=U=i8< zy7H-^BPfM}$hf*d_`Qhk_V$dRYZw<)_mbC~gPPxf0$EeXhl-!(ZH3rkDnf`Nrf4$+ zh?jsRS+?Zc9Cx7Vzg?q53ffpp43po22^8i1Obih&$oBufMR;cT2bHlSZ#fDMZZr~u zXIfM5SRjBj4N1}#0Ez|lHjSPQoL&QiT4mZn=SxHJg~R`ZjP!+hJ?&~tf$N!spvKPi zfY;x~laI9X`&#i#Z}RJ`0+MO_j^3#3TQJu2r;A-maLD8xfI+2Y*iDf4LsQ$9xiu?~ z?^wHEf^qlgtjdj(u_(W5sbGx1;maVPDHvI-76u2uUywf;>()=e>0le;bO0LIvs)iy z*lJTO+7gyf^)2uS-PhS_O-+RToQmc6VT>ej^y^stNkwIxUg?E|YMAAwQ}U!dC&cXL ziXKU?zT~xbh6C};rICGbdX~;8Z%L~Jdg|`senVEJo-CiDsX47Kc`;EiXWO<9o)(`4 zGj(9@c+Me=F~y(HUehcAy!tkoM&e1y#(qqCkE(0lik_U>wg8vOhGR(=gBGFSbR`mh zn-%j3VTD4 zwA1Kqw!OSgi_v0;6?=Bk4Z{l-7Fl4`ZT535OC{73{rBwpNHMPH>((4G`sh zZhr!v{zM@4Q$5?8)Jm;v$A2v$Yp9qFG7y`9j7O-zhzC+7wr3Cb8sS$O{yOFOODdL) zV2pU{=nHne51{?^kh%a$WEro~o(rKQmM!p?#>5Pt`;!{0$2jkmVzsl|Nr^UF^IHxG z8?HmZEVMY~ec%Ow6hjfg6!9hCC4xY?V;5Ipo-myV=3TmfT^@XkKME`+=_inm4h7ki z->K~a+20?)zic^zc&7h=0)T{Aa24FU_}(O|9DMW3Bf>MW=O%~8{unFxp4}B+>>_KN zU%rKs3Va&&27&OX4-o&y2ie|sN2p-=S^V<2wa2NUQ4)?0e|hgna*1R7(#R_ys3xmG zE#(ry+q=O~&t|RX@ZMD`-)0QmE*x%SBc(Yvq60JtCQ4RL(gdA(@=}0rYo5yKz36bW zkvLOosP6I?7qH!rce(}q@cH-{oM2ThKV2RZe+{{25hkc?T>=Tky12xHr0jmfH@SZi zLHPJ@^Oo^Zo%`gZk_hrbCzS+t|=O!Bt zWi|>M8mz~sD|Z>C1ZPf_Cs&R!S5E2qK+@j*UpP>;5_|+h+y{gb=zub7#QKSUabet# zFH2H0ul;zO+uc+V=W_W@_Ig-791T7J9&=5)wrBE?JEHS_A6P~VQ)u6s1)Pu|VxP(aYJV*(e<)(42R zm3AK>dr1QLbC1RMoQ|M5k+TWBjY9q+_vY=K-tUte35m4RWl51A<4O0ptqV3)KzL7U z0gpp-I1)|zvtA8V7-e-o9H)lB_Rx6;Bu7A2yE)6)SuDqWDs}~Ojfk?DFwI% z3E1(>LbbB7I(&E@B7nlulhvY=Wa1mGXD@ijD7WF^y@L1e55h)-hzoq}eWe!fh9m3V{)x^6F8?ed1z>+4;qW6A4hYYj zZCYP=c#I8+$pAIVyiY*#%!j3ySAnH`tp|=^lh{)#JimWaP_rXK40A0WcsEUj`G1}O zG?XQ~qK4F!lqauv6-BL_Up3+-l1=kVfD;D*C)yr>o9>W=%mIyATtn_OBLK+h@p)j5jRAb;m&Ok?TZH-5Q)~#UwdYFp~rEE{judWa9E)z zE>135C-xMdHYY&AZGR)tb`K}s0CK9 z1!))p^ZaUC*e50t`sL+)@`)#kJ}?C_cCMH@k{f4wh~0`OFnGQ2nzUuuu;=r4BYRcI z){G#a6Y$S(mIc6B#YS;jFcU{0`c)Raa$nG+hV(K|2|^ZWOI566zlF0N;t~$jD<_AX zjnD?HN-G>xRmHwtL3BcJX7)Q^YGfc?cS4Nj=yYl5MB(uBD?r@VTB|mIYs=au$e)e{ zLHWd!+EN*v2*(=y%G1JzyQdY&%|?~R5NPb)`S2dw1AJW8O;L=p?yVxJs=X?U#-l1O zk6xh8yyY;OTR7aF{P=kQ>y`*EFivnw%rQioA-I67WS+~hVamG4_sI)(Jo4vHS|@F@ zqrBHbxHd_Y8+?8Gfq=Z1O^Fs5moGayCHVUHY^8)^j)Aj*RB!S2-FA?4#-`puwBW`` zJ_6OQj(FGo8DotHYRKq;;$4xDn9=4rgw}5xvxhi)?n?W5{*%4%h9Tg)zlQl&fN~Z1)gL(Dn7X!P428I zwA+U-x5!cQ57g1N=2bLqAWF z!&cbvsD)dvYoqP5vaQz%rL@kv*J>0AMzWAKn~Mxi5g2GlI7qvVZo)Z5oj=#O!M&*O z`3O3)uvrjNTeremC}nW@(m%#E-sITB>j-!yBM#(=FN`~c#@XjL3e)SjR9&%QO%tUg zzGv=SLH()`ZIt?Ayym;9VG1Muq+a+7Zo+59?SuRu_`k>@S4!yS3roMnq+SDO?`C7V#2 z8vHf4&0k;{kLT)fa==7EILSu3e|ZnxtFO;1 zGqP-;Xo(>_QKcYUhsi-X72BqH#7Zb-TsiNIF>G9xOHT3XoA*qX^10+#XCU0)UO4_%A_s_vO=uDd3_Q%D{OsvLMW9wGvuuRnF52{2vH06D~7N672!bIMt@it_D}& zwjZ7gV!RzZ86*wbEB5cnMJRbEqMM{G!K)bfJjyPH^9nGnrOI9S{~!dm4~P#&b*~)h zCMwM8mR+y5i~E5*JAopwZ>F`=ORfA&IF%O8(aS<}^H6wcY1g^=lYLPtFpyvW9F z3;FCS-TGFYPr#Y$ue>}?rTYrmWr^VbUu>!eL$cEdh1e>5_UDnZ@Mu$l*KVo_NDEu^ zBn*!qVnzYv>t|<(>nt8%CoNPhN!qGP|sANRN^#+2YSSYHa>R1mss->c0f=#g@U58@? zA4sUbrA7)&KrTddS0M6pTSRaz)wqUgsT3&8-0eG|d;ULOUztdaiD3~>!10H`rRHWY z1iNu6=UaA8LUBoaH9G*;m`Mzm6d1d+A#I8sdkl*zfvbmV0}+u` zDMv=HJJm?IOwbP;f~yn|AI_J7`~+5&bPq6Iv?ILo2kk$%vIlGsI0%nf1z9Mth8cy! zWumMn=RL1O9^~bVEFJ}QVvss?tHIwci#ldC`~&KFS~DU5K5zzneq_Q91T~%-SVU4S zJ6nVI5jeqfh~*2{AY#b(R*Ny95RQBGIp^fxDK{I9nG0uHCqc-Ib;pUUh$t0-4wX*< z=RzW~;iR3xfRnW<>5Jr5O1MP)brA3+ei@H8Hjkt7yuYIpd7c-4j%U=8vn8HD#TPJo zSe+7~Db}4U3Y^4dl1)4XuKZ67f(ZP;?TYg9te>hbAr4R_0K$oq3y5m-gb?fR$UtF9 zS~S^=aDyFSE}9W2;Okj%uoG-Um^&Qo^bB#!W?|%=6+P>``bumeA2E7ti7Aj%Fr~qm z2gbOY{WTyX$!s5_0jPGPQQ0#&zQ0Zj0=_74X8|(#FMzl`&9G_zX*j$NMf?i3M;FCU z6EUr4vnUOnZd`*)Uw#6yI!hSIXr%OF5H z5QlF8$-|yjc^Y89Qfl!Er_H$@khM6&N*VKjIZ15?&DB?);muI`r;7r0{mI03v9#31 z#4O*vNqb=1b}TjLY`&ww@u^SE{4ZiO=jOP3!|6cKUV2*@kI9Aw0ASwn-OAV~0843$1_FGl7}eF6C57dJb3grW)*jtoUd zpqXvfJSCIv4G*_@XZE?> z4Lt=jTSc*hG3`qVq!PVMR2~G-1P{%amYoIg!8Odf4~nv6wnEVrBt-R5Au=g~4=X|n zHRJGVd|$>4@y#w;g!wz>+z%x?XM^xY%iw%QoqY@`vSqg0c>n_}g^lrV))+9n$zGOP zs%d&JWT2Jjxaz`_V%XtANP$#kLLlW=OG2?!Q%#ThY#Sj}*XzMsYis2HiU2OlfeC>d z8n8j-{Npr1ri$Jv2E_QqKsbc$6vedBiugD~S`_0QjTTtX(mS}j6)6e;xdh*sp5U0aMpuN}qTP=^_Qn zh~0padPWs&aXmf6b~}{7Raglc)$~p?G89N4)&a}`izf|bA)IUmFLQ8UM$T!6siQxr z=%)pPsWYXWCNdGMS3fK6cxVuhp7>mug|>DVtxGd~O8v@NFz<+l`8^#e^KS3})bovWb^ zILp4a_9#%Y*b6m$VH8#)2NL@6a9|q!@#XOXyU-oAe)RR$Auj6?p2LEp*lD!KP{%(- z@5}`S$R)Kxf@m68b}Tr7eUTO=dh2wBjlx;PuO~gbbS2~9KK1szxbz$R|Frl8NqGn= z2RDp@$u5Obk&sxp!<;h=C=ZKPZB+jk zBxrCc_gxabNnh6Gl;RR6>Yt8c$vkv>_o@KDMFW1bM-3krWm|>RG>U`VedjCz2lAB1 zg(qb_C@Z~^cR=_BmGB@f;-Is3Z=*>wR2?r({x}qymVe?YnczkKG%k?McZ2v3OVpT* z(O$vnv}*Tle9WVK_@X@%tR^Z!3?FT_3s@jb3KBVf#)4!p~AFGgmn%1fBbZe3T53$_+UX_A!@Kz63qSLeH@8(augJDJ;RA>6rNxQYkd6t(sqK=*zv4j;O#N(%*2cdD z3FjN6`owjbF%UFbCO=haP<;Y1KozVgUy(nnnoV7{_l5OYK>DKEgy%~)Rjb0meL49X z7Fg;d!~;Wh63AcY--x{1XWn^J%DQMg*;dLKxs$;db`_0so$qO!>~yPDNd-CrdN!ea zMgHt24mD%(w>*7*z-@bNFaTJlz;N0SU4@J(zDH*@!0V00y{QfFTt>Vx7y5o2Mv9*( z1J#J27gHPEI3{!^cbKr^;T8 z{knt%bS@nrExJq1{mz2x~tc$Dm+yw=~vZD|A3q>d534za^{X9e7qF29H5yu};J)vlJkKq}< zXObu*@ioXGp!F=WVG3eUtfIA$GGgv0N?d&3C47`Zo)ms*qO}A9BAEke!nh#AfQ0d_ z&_N)E>5BsoR0rPqZb)YN}b~6Ppjyev;MMis-HkWF!az%G? z#&it84hv!%_Q>bnwch!nZKxB05M=jgiFaB^M=e-sj1xR?dPYUzZ#jua`ggyCAcWY> z-L$r#a{=;JP5X}9(ZPC&PdG~h5>_8SueX($_)Qu(;()N3*ZQH(VGnkWq^C}0r)~G3_?a10y*LsFz zokU5AKsW9DUr-ylK61shLS#4@vPcteK-Ga9xvRnPq=xSD_zC=Q_%6IuM?GpL(9aDx z|8d_;^6_D4{IQ1ndMAcFz5ZaT+Ww0wWN`xP(U#^=POs(BpKm;(H(lmYp+XCb7Kaw0 z;LT945Ev3IkhP6$lQBiMgr+vAL}{8xO&IObqJBEP4Y^x&V?iGC=1lVIbH^Z!eXxr@ zz)D7Fon`z~N|Pq>Bsue&_T9d;G+d8#@k^cq~F^I8ETsZ*cGOf*gZ4ghlAzW|aZ;WA13^B!Tlr0sWA zosgXD-%zvO-*GLU@hVV(bbQ`s@f~Ux=4}(@7O)%o5EH((gYflccBC@jbLF3IgPozv zglX2IL}kL1rtn4mu~`J(MMY83Rz6gc1}cX4RB+tZO2~;3FI# z@dU(xa5J_KvL0)oSkvwz9|!QcEA$jKR@a-4^SU3O449TrO+x$1fkBU<<=E_IHnF6> zPmZ7I2E+9A_>j6og$>Nih~b2F_^@6ef|Hm-K2(>`6ag{Vpd`g35n`yW|Jme78-cSy z2Jz7V#5=~u#0eLSh3U4uM3Smk31>xEh^-Os%&5tK6hSAX83jJi%5l!MmL4E?=FerNG#3lj^;-F1VISY!4E)__J~gY zP{o~Xo!8DW{5lsBFKL~OJiQoH>yBZ+b^};UL&UUs!Hbu7Gsf<9sLAsOPD4?-3CP{Q zIDu8jLk6(U3VQPyTP{Esf)1-trW5Mi#zfpgoc-!H>F$J#8uDRwDwOaohB(_I%SuHg zGP)11((V9rRAG>80NrW}d`=G(Kh>nzPa1M?sP;UNfGQaOMG1@_D0EMIWhIn#$u2_$ zlG-ED(PU+v<1Dd?q-O#bsA)LwrwL>q#_&75H)_X4sJK{n%SGvVsWH7@1QZqq|LM`l zDhX8m%Pe5`p1qR{^wuQ&>A+{{KWhXs<4RD< z=qU6)+btESL>kZWH8w}Q%=>NJTj=b%SKV3q%jSW>r*Qv1j$bX>}sQ%KO7Il zm?7>4%Q6Nk!2^z})Kchu%6lv-7i=rS26q7)-02q?2$yNt7Y={z<^<+wy6ja-_X6P4 zoqZ1PW#`qSqD4qH&UR57+z0-hm1lRO2-*(xN-42|%wl2i^h8I{d8lS+b=v9_>2C2> zz(-(%#s*fpe18pFi+EIHHeQvxJT*^HFj2QyP0cHJw?Kg+hC?21K&4>=jmwcu-dOqEs{%c+yaQ z2z6rB>nPdwuUR*j{BvM-)_XMd^S1U|6kOQ$rR`lHO3z~*QZ71(y(42g`csRZ1M@K7 zGeZ27hWA%v`&zQExDnc@cm9?ZO?$?0mWaO7E(Js|3_MAlXFB$^4#Zpo;x~xOEbay( zq=N;ZD9RVV7`dZNzz+p@YqH@dW*ij8g053Cbd=Mo!Ad8*L<5m1c4Kk ziuca5CyQ05z7gOMecqu!vU=y93p+$+;m=;s-(45taf_P(2%vER<8q3}actBuhfk)( zf7nccmO{8zL?N5oynmJM4T?8E))e;;+HfHZHr` zdK}~!JG}R#5Bk%M5FlTSPv}Eb9qs1r0ZH{tSk@I{KB|$|16@&`0h3m7S+)$k*3QbQ zasW2`9>hwc)dVNgx46{Io zZ}aJHHNf1?!K|P;>g7(>TefcLJk%!vM`gH8V3!b= z>YS+)1nw9U(G&;7;PV4eIl{=6DT^Vw<2Elnox;u@xF5ad*9Fo|yKgq<>*?C$jaG2j z|29>K)fI^U!v?55+kQ*d2#3}*libC4>Dl4 zIo3Jvsk?)edMnpH<|*l<*0Pf{2#KedIt>~-QiB{4+KEpSjUAYOhGDpn3H_N9$lxaP ztZwagSRY~x@81bqe^3fb;|_A7{FmMBvwHN*Xu006qKo{1i!RbN__2q!Q*A;U*g-Mz zg)-3FZ`VJdognZ~WrWW^2J$ArQAr1&jl~kWhn+osG5wAlE5W&V%GI{8iMQ!5lmV~# zeb3SKZ@?7p;?7{uviY6`Oz16t0=B70`im=`D@xJa16j2eHoCtElU*~7={YUzN41sE z#Th>DvJq-#UwEpJGKx;;wfDhShgO0cM|e!Ej){RX#~>a?)c2|7Hjhh2d=)VUVJL<^Aq|>_df4DX>b9W2$_DM zTjF#j(9?Co`yor?pK<16@{h#F&F8~1PG|qQNZPX^b!L*L&?PH#W8za0c~v6I2W($Jderl%4gufl z#s;C*7APQJP46xHqw;mUyKp3}W^hjJ-Dj>h%`^XS7WAab^C^aRu1?*vh-k2df&y9E z=0p*sn0<83UL4w30FqnZ0EvXCBIMVSY9Zf?H1%IrwQybOvn~4*NKYubcyVkBZ4F$z zkqcP*S>k6!_MiTKIdGlG+pfw>o{ni`;Z7pup#g z4tDx3Kl$)-msHd1r(YpVz7`VW=fx9{ zP}U8rJ-IP)m}~5t&0Y$~Quyjflm!-eXC?_LMGCkZtNDZf0?w<{f^zp&@U@sQxcPOZ zBbfQTFDWL_>HytC*QQG_=K7ZRbL!`q{m8IjE0cz(t`V0Ee}v!C74^!Fy~-~?@}rdn zABORRmgOLz8{r!anhFgghZc>0l7EpqWKU|tG$`VM=141@!EQ$=@Zmjc zTs`)!A&yNGY6WfKa?)h>zHn!)=Jd73@T^(m_j|Z;f?avJ{EOr~O~Q2gox6dkyY@%M zBU+#=T?P8tvGG|D5JTR}XXwjgbH(uwnW%W?9<-OQU9|6H{09v#+jmnxwaQ-V;q{v% zA8srmJX7Fn@7mr*ZQ@)haPjWVN@e3K z_`+@X$k*ocx*uF^_mTqJpwpuhBX~CSu=zPE(Sy%fYz&lzZmz3xo4~-xBBvU0Ao?;I-81*Z%8Do+*}pqg>bt^{w-`V6Sj>{Znj+ z70GS2evXinf|S#9=NNoXoS;$BTW*G0!xuTSZUY45yPE+~*&a-XC+3_YPqhd*&aQ>f z$oMUq^jjA;x#?iJKrpAqa<2<21h*_lx9a}VMib;a6c$~=PJOj6XJXJ|+rc7O7PEN5uE7!4n9nllo@BI4$VW2Nf_jqnkz%cvU4O4umV z#n6oXGWOt3tuIjmX*b!!$t~94@a@QgybLpQo3icAyU`iNbY~XNAArFAn$nFJ()d-U zFaO#nxxVF-%J{UB**uRo0*+?S>=^il)1m7v-u`PDy*ln%|3E-{3U~R=QcE&zhiG_c zDnGMgf1}3h1gWz8IV0Oc7FmEt>6W?Eva;J`(!;IIny}PvD?vztz`F6su_tUO`M%K5 z%C#=nXbX})#uE!zcq2mB;hPUVU1!`9^2K303XfOIVS{mlnMqJyt}FV=$&fgoquO+N zU6!gWoL%3N1kyrhd^3!u>?l6|cIl*t4$Z$=ihyzD7FFY~U~{RaZmfyO4+$kC7+m zo+-*f-VwpUjTi_Idyl~efx)!$GpE!h+in4G1WQkoUr<#2BtxLNn*2A>a-2BL#z%QO@w0v^{s=`*I6=ew2nUj1=mvi%^U@2#Wf& zs1@q6l8WqrqGm!)Yr|*``||#A+4#du6`mR^_#?CymIr}O!8Zm?(XY$u-RGH;?HFMGIEYVuA1& z`3RlG_y0%Mo5w@-_W$E&#>g6j5|y1)2$hg(6k<{&NsACgQQ0c8&8Tdth-{@srKE*I zAW64%AvJJ+Z-|I~8`+eWv&+k8vhdJk5%jolc%e`^%_vul0~U8t)>=bU&^ z6qXW&GDP%~1{L1-nKK>IsFgDJrh>!wr3?Vu-cmi#wn`;F`$GNc_>D|>RSuC8Vh21N z|G;J1%1YxwLZDD400Ggw+FirsoXVWYtOwg-srm}6woBb!8@OIc`P$!?kH>E55zbMB z8rdpODYfVmf>cF`1;>9N>Fl(Rov!pm=okW>I(GNJoNZ6jfIunKna-h6zXZPoZ9E2PythpyYk3HRN%xhq2c?gT$?4}Ybl42kip$QiA+ab zf-!EqBXkT1OLW>C4;|irG4sMfh;hYVSD_t6!MISn-IW)w#8kgY0cI>A`yl?j@x)hc z=wMU^=%71lcELG|Q-og8R{RC9cZ%6f7a#815zaPmyWPN*LS3co#vcvJ%G+>a3sYE`9Xc&ucfU0bB}c_3*W#V7btcG|iC>LctSZUfMOK zlIUt>NBmx6Ed}w_WQARG+9fLiRjS1;g49srN1Xi&DRd|r+zz*OPLWOu>M?V>@!i49 zPLZ3Q(99%(t|l%5=+9=t$slX0Pq(K@S`^n|MKTZL_Sj+DUZY?GU8sG=*6xu)k5V3v zd-flrufs*;j-rU9;qM zyJMlz(uBh0IkV<(HkUxJ747~|gDR6xFu?QvXn`Kr|IWY-Y!UsDCEqsE#Jp*RQpnc# z8y3RX%c2lY9D*aL!VS`xgQ^u0rvl#61yjg03CBER7-#t7Z++5h_4pw{ZZ~j0n_S_g zR=eVrlZDiH4y2}EZMq2(0#uU|XHnU!+}(H*l~J&)BUDN~&$ju@&a=s$tH5L`_wLeB z944k;)JIH^T9GEFlXiNJ6JRymqtLGZc?#Mqk2XIWMuGIt#z#*kJtnk+uS;Gp}zp$(O%LOC|U4ibw%ce-6>id$j5^y?wv zp1At~Sp7Fp_z24oIbOREU!Mji-M;a|15$#ZnBpa^h+HS&4TCU-ul0{^n1aPzkSi1i zuGcMSC@(3Ac6tdQ&TkMI|5n7(6P4(qUTCr)vt5F&iIj9_%tlb|fQ{DyVu!X(gn<3c zCN6?RwFjgCJ2EfV&6mjcfgKQ^rpUedLTsEu8z7=q;WsYb>)E}8qeLhxjhj9K**-Ti z9Z2A=gg+}6%r9HXF!Z~du|jPz&{zgWHpcE+j@p0WhyHpkA6`@q{wXl6g6rL5Z|j~G zbBS~X7QXr3Pq0$@mUH1Snk^1WJ0Fx2nTyCGkWKok$bJZV0*W?kjT|mkUpK<)_!_K^OoTjMc+CWc^~{ZP8vgm`f&=ppzKtw}cxwV^gppu}^df1|va7Q?@=(076-( z4KJVmu?l(aQwmQ*y_mke>YLW^^Rsj@diLY$uUBHL3yGMwNwb7OR3VD%%4tDW(nC984jBWCd90yY(GEdE8s(j>(uPfknLwh!i6*LX}@vvrRCG`c?EdB8uYU zqgsI4=akCeC+&iMNpVu56Fj2xZQHs6SdWssIF#Q@u@f9kab0&y*PlG+PynjHy`}GT zg%aTjRs2+7CknhTQKI%YZhFq1quSM{u24Oy2As@4g(bpbi%y1i0^TwI)%1Whpa~qE zX4MD(PgFEK@jZBPXkFd437aL6#COs$WrNT#U=er-X1FX{{v9!0AS$HR{!_u;zldwY zKko!`w2u@($c&k_3uLFE0Z*2vms?uw1A{AqZw^jwg$|D7jAY20j`s*l##=4Ne_K5) zOtu6_kziEF@vPsS7+@UwqOW6>OUwF$j{r4=nOSf-{UC(rEKidie7IUn>5`UoNJ9k) zxJXXEBQifng+Pte3mPQ76pVlZ<`jnI##F1*YFA*)ZCEncvgF-%)0dUXV*pXTT^L`n zL=?A5Vty#{R9W4K)m$`me~*_(&a88M?Eon$P-YdVG}#Gq4=hh#w=`>8f`9}}zhv;~ za?I=Gb3v$Ln?-SDTBow0J5Tt&xPlw|%`*VTyVee1Oh<-&;mA|;$ zoPl;^f7Q~}km#_#HT2|!;LEqORn%~KJaM)r#x_{PstSGOiZ!zX2c}^!ea3+HSWrwE z=6SJ!7sNDPdbVr#vnUf}hr&g@7_Yj&=sY=q(v^BwLKQm|oSB}172GpPlj?a3GqX#B zJko4zRRttIY>Fv#2b#A<_DLx=T@eUj+f}!u?p)hmN)u4(Jp(`9j58ze{&~rV?WVbP z%A=|J96mQjtD037%>=yk3lkF5EOIYwcE;uQ5J6wRfI^P3{9U$(b>BlcJF$2O;>-{+a1l4;FSlb z_LRpoy$L%S<&ATf#SE z;L?-lQlUDX_s&jz;Q1Lr@5>p_RPPReGnBNxgpD!5R#3)#thAI3ufgc^L)u%Rr+Hlb zT(pLDt%wP7<%z(utq=l%1M78jveI@T$dF#su(&>JkE(#=f4;D54l*%(-^(nfbCUQe)FV9non9F%K+KZ(4_`uOciy82CO)OolxisUd0m^cqueIRnY< z;BgA4S1&XC3uUP?U$}4o&r|0VCC7fkuMZBa|2n4asR>*5`zBaOJPWT$bNn(W_CK%L$c2AsfSlwq?A8Q6 zhK&USSV=^-4vZ^5<}pnAOb&IKseHNxv_!|B{g@d^&w%{?x;i3iSo)+vt^VnMmS!v) zM)W)05vXqzH5^hOWWw~$#&7HoIw}}DD3bCQgc=I8Rv|G5fM8O^58?--_-*>%Nwk)j zIfvfok0n05!w%tZ=-dpffezI7(+}yX5XhwYk#0@KW%PkR;%#t|P6Ze_K*N6ns%jOt zNeW(bRsv0BK7ah~9U~UBAVA_L34F+;14x6-;I|o=%>?sS3@dpRv|GKxilsa#7N#@! z!RX~>&JX&r{A^^>S~n_hPKkPR_(~~g>SuPj5Kx6VI%8BOa(Iit&xSMU8B#EY-Wr?9 zOaRPw0PEbVSW@Wk{8kkVn34;D1pV2mUXnXWp{V-M9+d}|qfb6F`!a9JQO_-wlH?zf z4Sn0F4-q-tzkaJ?1fV0+cJBF$f0g6*DL6U3y`Tr`1wzCiwY#muw7Q-Ki)uN}{MoCWP%tQ@~J4}tyr1^_bV9PScNKQHK=BZFV!`0gRe?mVxhcA4hW5?p0B<5oK+?vG^NM%B%NDOvu0FMq#)u&zt_-g&2 z7?z%~p&32OAUSQV{<=pc_j2^<;)`8$zxCEomh=rvMiliShS?ahdYI1grE-M&+qkK_ zD=5Hexi<&8qb4hgtgj81OD(tfX3EJSqy9KFcxpeBerG`apI4!#93xpEFT??vLt>kf zac28;86CpMu=BWIe$NOT~+Es!y#+$ zvm2s*c`J9Gy*ERvLSI<9<=j*O=0xUG>7rYh^R4bGsvz;j-SBO|P^OQ1>G9_akF}D; zlRmB@k3c5!s|Vz3OMZ8M*n0AMTiSt5ZpRy+R1|ckna&w`UQjklt9f&0Z~=->XImVA zLXizO2h=<|wM~w>%}3q1!E{oSq7LBPwQ~93p-peDq-W?wCm8NOKgTSz-P)|cm}S5&HBsx#C@Ba5;hzi#Yw@y-kC~)@u4}Rf?KV0$lPjv}} zcFpNy=YJfsS||9&!-JFjw=@NU96ESzU^gme0_oNy?})II`>Sy>bUCHs_(m&)vn^&isCl+`F~qu8elAO z)-ZP7`gYE2H(1)5tKalz&NJbcutAU&&JFV~$Jrai31^j>vZ|HV1f}#C1<5>F8 zS1RWIzM%b{@2dAF^$+i4p>TC8-weiLAPN+Aa#(bxXo9%Vz2NEkgF&s#_>V?YPye^_ z`` z-h3Cv^m6K%28I$e2i=cFdhZN?JTWhqJC{Q9mg0Vg|FiPEWDl&K)_;Bz_K`jH7W7QX^d$WQF*iF@#4_P*D36w9&iJr2E{w?LRFapwZIIVHGH ziTp*5>T{=;(E}z{1VL4;_H`BAXA~&zpeWX!gN9m|AfcJ{`!XVz48O^&+0Gd|w;udP zzU|DbGTS|7qZoEoDZEH9Kb0%DZvCaWDzuJ=8jZz}pqPn+I!c_+*~>m>BQqN2560*< z$6sx_y8WRqj$SugYGip+et$;iJ!SQAx=HgVSh_3e)MOFHuXD@sg>Yi_p8Sh`{lP=5 zo?AFv1h;KqR`Yj!8Pjji3lr+qae2|a1GmlxE*su%_V)K0Xu0(#2LcO!*k11w*V12$ z;f~i{kI#9PzvFLZ3pz@d558HeK2BTvk*JvS^J8L^_?q4q z);;4Z!DsV!P*M>F>FiF*{|p_nUgy;pDh?J8vwO;emgOAAcxrgDXiSDS5ag?0l*jj< z(khZ3-)>eiwPwpb6T9meeL)!2C-K@z9fF`0j|t@;^f5+dx86R3ZM{bnx9Hm1O$s)N zk$OvZR0u2`Z^QP8V%{8sEhW~_xbZMad2jtz&0+ekxmp;9`ae;_f%-ltk5E%)VT*a6 zRbMnpCLPnalu+1TafJ4M0xNV8g}U4Mjk{le6MA|0y0rk)is}M%Z9tUU22SvIAh7`w zTysd{Pztfkk=jD^*!lA+rBcqb)Fx`A5iaU2tl&XdL1D)U@pLEXdu%#YB*ol1N?4ti zHBQcU#_%UqiQ1)J^u-ovU@-7l?`YzYFvA2#tM0mEh3?CpyEh_NUuVajD16t zyg$C*5du9R=K~6mCJ`W+dFI$9WZZauO)p2H)*SKpHVsIu2CxfJvi2>; zcit#57RP7DpSwMF-VBm|4V5d=tRgX7RM9%KQ0JRo6d<)RmiIPWe2zh6tmswP`fs^) zwy};#jk|NXMqCSfwIR3QZ#W2`(%sJ>qvk=53CYoLmQt9q|2Gm$sB;rEuBqGJA1OUM zoyl4Wy-HYn0J6L=cad8o)R!Ea^;`rSMg9hYo3?Fw6B9dUq75a-MSb56n8~AAsS(JP zZ!1khPu}!GRpsj+jvl`N1tDD8m1myJCI3c-c<9U-1Vg`xJO~}5_wvPXYh^=Boo^|V z3Tp}|lH!9m4Ipa_$p;b8fjUd=zc4iO7vr)M&Xs0_m$fgY@+hB9%K~4*9$p0d)m2bO ze5JH`W0fnIKdcW!oO#^g1YceSQ4u->{>u@>tLi!fky)o&$h(=he?Fe_6?}O~iSf(F zV&(P~*5h>BW{3e1H%8*7#_%L1#>W97b0@jHtliES^w6w5oldI7QL+?I(Pl$DaN>~d5nXx z;CO1E+S?3E2PLq~)-?ygkHAO1m&hOYmj7?;2XM!$D^f0l9K4P{n}mgb{CoYH6RJ8o ztydc6dNqA)`CG?=Gd~EIbi`UM)eyzGF^+i?&TOdyW~mFH_^Gye(D}clDVFQ@V2Tvy z7rQIaq8Xx`kC;AO-_{k%VI2e6X@bIy^mupEX%{u0=KDUGu~r6lS*7GOeppy{&I&Ly zjOTz=9~jC|qWXznRbrfjg!1`cE!Hzyjzw6l{%>X)TK(UEGi9Uy3f9D6bbn0gT-s`< z8%$Msh!^8WidX7S;)n2jh_n1-QCtSyOAKcPQc(Xlf0*Q|5CSBjo(I-u!R0GJgzTkL z|6QdQRrUMbUO|q0dQ%+d^4)*Mjbm$R}RUcz(7|E0Bq-bAYY@)OsM<+2>}CV zzPBgeD~kBHE(Y+@l2orJrdtV7XXq_V8IETas%7OCYo`oi)+h&v#YN!Qpp7drXFS>6 z?r-q7px+(rIy+bo1uU#I2A5s@ASe01FgGMbouFkhbkm-9yZ8Q2@Q1vuhDQ3D3L+zA z(uz8^rc24VmE5r0Gbd;yOrXnQKAEBfa3@T7fcF$#QYv^00)VZPYehpSc@?^8we}o{ zlX0~o_I<`xSfI8xF(WXO-DX1>wJ`XN?4rw@}_RLD*${$}UaXL=oM(=SDMIxZj1Ji#jAcrH7nYG`r z#ewodj>F5Bf9j(j`a;>)=*2j_ZN}vf!~Hq`2Eyt;9UH1_(yjq1OUO(1M0lI3FZ2j-fU9)L59v&OiQ>5$;d!jg?Fo{Svf5t5FCZbb?)* zJN=Q!?2BztV$7)CWtG0MO~Lr4E5>aoHD5N4(+@~gQEbZTc4s3HrIl_G23PCng4Y3f zbLZK1A-x9x!)WwuI=UBkQ5QyE^&Nrw?@fsRKK41G9-xq=#VyO%CEo`{_eioDj%M!3x=>I zfOPFiFX{1t-|+3E@?UuK=0miGN04hW0=JnJrEyWw{Bg-jMvAA}cg<5LN1c5BQdrIZ z#+bxj9Jbu`11@IUjU|RKfL(UzRlVB4XT ze|(WaxL$KiRqkgCr3^Al(19!_Y7b=E(4Xm7LCO$y5+k;Fu6B#=OSzW`-7p{zRv-_) zPr!|km?8aF}+3hm)QG92YaI+jctX&5IrvTUGf{Y$)TK6)s9v!SMhU=HIpEC~2 z4>o14mG$El2sTA(Ct?xS!l*x7^)oo}|3+BF8QNe;bBHcqdHVmb?#cbS*NqZ%mYS~z z`KLoq7B#KULt%9a#DE%VTEo4TV03T2nr`FK5jUTA$FP0JH6F9oD*|0z1Yf2b5?H0_ zD|K|_5Zk`uu?ZN0U! z_mL>>F;mnHU=@to!Vv*s4;TQr9y)L@1BXXz^a85NSifPTL4h6I>+m_S3~FkXB{N?E zS<3ue_(wqaIS5;4e9{HB`Okl9Y}iFiju+oTqb)BY)QT?~3Oag7nGu-NB5VCOFsiRs zs@m%Ruwl^FuJ1b}g^=*_R?=SYJQ@7o>c9j>)1HgB zyN9LI9ifwu{Shlb6QO2#MWhxq~IG!U^I!6%5}(sbi>=bq8!8@s;4Iaun#kvh7NPwX34Rjbp2f!D)cF&sNIO%9~;C`cs&ZY2=d@c3PpN$YZjUT}X7rY`dlWX$yc znw(7=fzWapI=KzQnJ(6!o0K_aDk!^dZ#)pSTif+jQtQXga$bPApM z=);jZ5c*?*GoeGMnV0=RrZucRRYBjx>tx`A3OuY)#tp2w7mh}&kj)SKoAvbbf;uO! z?+RItUow0xc*6StuO4D--+qY!o}Isy}s;ts5aM5X~eJUZoLOq@dGv=a4hHJD<* z5q{dZSN{bv_(Vj#pFm7Q<$C;MwL|Qizm~QCFx~xQyJoCOZ$`sYD}}q>PwRZjb<=E< zAeMP?qVfM>xu2}Il2xT6={KBdDIstxY-`5IWXN zUiWV&Oiy5R_=2X9Y$ug9Ee=ZSCaza!>dWBMYWrq7uqp>25`btLn^@ydwz?+v?-?2V z?yVwD=rAO!JEABUU1hQ|cY+_OZ14Hb-Ef`qemxp+ZSK?Z;r!gDkJ}&ayJBx+7>#~^ zTm<>LzxR^t-P;1x3$h;-xzQgveY$^C28?jNM6@8$uJiY81sCwNi~+F=78qJZ@bIsz1CO! zgtPM~p6kaCR~-M>zpRCpQI}kUfaiZS`ez6%P6%*!$YCfF=sn}dg!593GFRw>OV2nQ ztTF6uB&}1J`r>gJuBP(z%KW{I^Uz%(^r5#$SK~%w1agl)Gg9Zy9fSK0kyLE24Z(34 zYtihZMQO^*=eY=<5R6LztHaB1AcuIrXoFuQ=7&C}L{c?Z$rto$%n=!whqoqG>#vvC z2%J5LVkU%Ta8hoM($p1WqN}wurA!d@#mQGU5Nb>~#XC84EYH)Zf&DZR!uY+-;VqS< z@q?$ggdX#auS#%%%oS^EN)?JhSR4JYpSgGRQZD<9!YvvF+zp0>C#$!x*x}l8U|Bb& zv?v*im5Bq_(5Wi40b1^nKun$XTST(a8yOAcqQZmKTgGLo)Ig6JuEh5J9NnqJXin@Gxzz-k6xXWYJ&@=JZw=$+ zFPGde%HsR`gI+y`rtiPaMYwbtyp!sVb!pX~;c3zLoPO0eaZSV+O_z z%9H@UhqNowzBTPcMfL6kC>LRaFF6KVaSv1R@%4}rtleX!EMnL`rethYrhTLj1x$tj z;)H!fKo08&T(;i|FT&rPgZ*D0d=B2dXuO_(Uaoi9+vEhs4%{AD{Fl@4^|`X=PvH(s zI7$6bWJiWndP$;&!kSCIR1l57F2?yzmZm~lA5%JKVb;1rQwj*O=^WW~`+n*+fQkK0 zydInOU1Be2`jhA!rnk1iRWR=1SOZpzFoU5{OPpc&A#j6Oc?D&>fAw=>x@H7?SN;d^ z-o&}WR;E|OR`QKItu(y4mT)%Pgqju-3uyH?Y@5>oSLO2Y(0(P!?_xOL=@5+R7rWw# z3J8%Hb@%Pzf^`=J6fEJ_aG6+e7>OUnhaO1(R1<6>f}L z?d@Wnqw9?^;2?q(b@?Wd=T6r_8a@Z4)*_@Q7A`+ zW3w?j!HW0KbhxF%D`9d2HpvIrBxM!36W3Yh5=8_0qYfnHm*yiLB?Ay|V10N%F9XYq zanaDtDk$rS+|_H_r|a${C}C7b{E)Ii20-a?Grff$E?&|gWF<#Ern2GqhCiS0~Y%knIi8zY^lE4qLaR-3M;_Rkz(s;wu z9207W1PXIe#4h4Zw}dvdV&FYcnUlD5_C4hzJ@bPSBVBLpl$&52mi+wwH;svyVIzAB zoA+NQ;Hpqh?A}^Et~xhl>YQNQwh20!muW{ zq}|Pg3jHZWnDBN?r1KhiVG$%Sm-4+=Q2MZzlNr3{#Abqb9j}KK%sHZj{Vr2y4~GIQ zA3Mz1DjQ3q(CC~OyCaZn0M2!){)S!!L~t>-wA&%01?-*H5?nzW?LJB`{r&)vLB4!K zrSm({8SeZ0w(bL9%ZZAZ*^jf=8mAjK^ZR0q9004|3%73z#`-Npqx*X^Ozbja!C1MW z-M~84#=rU1r>p{+h9JU<#K_x$eWqJ+aP%e?7KTSK&1>dlxwhQmkr69uG~0iD@y|L- zlY0vSR2|IhZoS6PpfUai_AhKo2HfdD&mhv#k51CX;T z*sU)XbDyfKjxYC$*_^(U)2-c0>GJ(zVm$CihHKlFSw&1A$mq$vsRt-!$jJe3GTaZ6 z3GcVvmwZ0D>`U+f3i*pQ>${p1UeyF~G9g~g-n{ThVOuC#9=ok`Zgz@qKCSN!1&P`N z=pdlGNwal%9;)ujwWH*#K6CQG*fJDAQiKlO2vKJHeA1lj&WQC+VU^@ea8$#~UOX$*Q!V^8L- zL0$W5(Y3=??%&j_WUq6*x>=?BfmI*d8fmDF*-!XVvxL8p7$r+}Igd_(&`|D*;Z#GE zqm{tHx&aHBpXw&~l6>7-FlyiSPJtTJblAjLU5Ho$FeN0mDguFAq?r+6^~o6|b+rfE zGVcZ&O-X~tE3liGcdI~hHSCT+&F&uH8rr&f{6pr^1y5061`fu~=^_|Idrgti5+*U7 zQOb9G?Rz$j-G0Y}x+i{HB0!4ZmKzykB<0;Rbmo2)T4|VdcwujI_otLG@@8OOKg3kw zP|0ST0D4@zT?O=(0Pikp)Rpwxw_VsmW4!^j^sFd6r5l zw}SG_HQPs>ae%Bq{sye_SaBX%|F-}&^)Wz@Xi<)YNbO?lPs7z@3c;$b^Aw@>E%mOj zW^c%IdtC(Kk@s*}9NbKxEf8SZtP+32ZTxjnrNWS7;W&D~ft{QY?oqOmxlV7JP!kW!Yj`Ur{QbbM1h=0KMaIAmWiISb7TKd4=gMeo+Tcz2>e#NihnOV%iNdx` zeiuoOK^{}D+M+p(Y7EC=&-`$B0F< zQ=zHaM;&QQR4jM$sG=N&sqOvD_Bx*drQ6c@u0()g05cwl`Xm{!S_Nuaa2KlL*rmmk z51yPE)q?Bl$sNM474Y!=zZ zc{EVGpdJ!Su{Qq%llR5O6#zK8l(ld*UVl87@|iaH@C3+*;XBxjEg&fsQrzpMo3EEG zv*Tpms7a;7!|iz8WY7={0a$0ItO-(ajXl;wX_$$yzEF5k9nc>L3wv!p{8h2)G0W?h z{v6vH=7+>$Ho^+)9hDtCd+S_yh8pzS9$)hYev-=eDu?lGIR;-fgz+dr+wcmM-^dZp z9}`&kAf$~z1ovF)>Hgxc!Xe3cju-jQRluCm;c_1=PYQygb?Oxe z!QG0L3sT_k=WpfOPL#|EPlD^t;ENCC39O?tHd<(kfx7SOcxl+E#;ff19_+{vbkZSvbS$I{#>31KZj^$n%ayX0jj}EvsgnHg16P z_A6Y)pdp>kLW<;PtR*Vs#mVb%)ao7AXw{O&hBDmD;?mc3iMH;Ac@rZZ_BQa8CQ~|0 z&d1L{in-z--lBO|pxqc%bqy^~LAGv=E*eaVU~OeuVV{d`Vv#-_W7EYdTDzVraG9H+LC_dWcgZMn~KcP)XvKWbcr5&d+=a>{*(Ha6Y1$==bR z{O-?$7H;`2dt0B%Vm?6`_?ZOjJkyu9ZJsh^WH*+es&^@KDcR%Zej%3PJ*XovgyhTbaH(!H1H_OF~=*f55Jr8A%uW zz5IoAB~1e2-tDGp9}`MnavAMy?jgPM5F%y`%$}dFLrz_* zIrO=afT8+AkK5B1s3{ZDVP$g6y$-*U*=?-fh!cNyn3q6YhNhfRxW&GLIJ2#>9bYMD7-F%{|Iw%@a=DoAAU;3k9p$`V zImKm{5HU~wq|nQFwab)_7lNckW#1z2$|oW5x7vDbBURVjw8674P?L1ogMKpHoV>;# zO%*1OwI|($UOr#hL(*M~qsn3PF%_|15uc%Hy9@D>_~N|?<%lig6yKX0a#1s$o(^Laj8bF#5fGPOFMGmMiUaxSwE}Qf#SG_f79d2Iv=TFBXzTpr$^avJ?=|arh2<+ce}&248Kw0} zhlva`wD6X~s7|37la4FnFOgIHhBiFo`lw~?lSbk{>)P(3jyVhM4O)a=GX3(sW1vIC zz0mJ>;J{!eN5#nf2>$u=3Kq>`7u9QnChi8>CjONBN-b+W_UQIuN#{N$Q<$}IOvpQP zB&5ZrY{V&D=4)voh;6<1U`PFA>V%XUW73S9D^J>cQYfzIyIV5i35WNb5K9c^|M}=* zN_C3rnjCZP1^v{;EaGK7Tp5z~B#?f5NZaAsFUOLK)mI~bJTaL8DF_eRikE{%^J?y9-n_U32EKHPCkB^ZN2*zk{bC=GM%_I z61}nkr+Plg6S0V=mY>H_KQU&)P~=y3$#$*U8FunXkb_e1O-7t@m$5re%u!_G%^?_| zRIJzg+lX$}+ba|qx)Ec6c^ip;`_QfQrD~SPa4MoyRUOtX&~^XWcO^a}KBkXK9J{ZFOA~rovYa0!7btTC*=xNQrwJ)$Eu`TT$;%V&2@y@$ISdNn ztbM7|nO+U9r;ae{{;QiNEYpe4nrFq_x3 z4Tvf^b(I@_3odwhVe!aC0X&~inrYFu# zh)+eF__8ly&nLr4KlLWl%B_ZMo=zCH2QfO^$lJ zBvU*LQ#M(5HQ}2Z9_^y~i@C#h)1C*?N3v68pY+7DD09nxowdG#_AAM5z&*|-9NcB{ z_xKUY>Ya7>TO#Bat}yM}o(~8Ck^!QHnIj8N9}c*uyIs}IEqGn`xP;q3vhW6gsqUe>`m1 z)~ad@y1=?H`1SNl?ANCs5ZD`8tG&Hi=j|R%pP(%gB8pd)Q--E?hWU@)e?>SLV4s(- z!_I^oVC0x97@I(;cnEm$ttKBnI3gXE>>`K?vAq~SK?0YSBsx{@s1ZdiKfFb|zf}ju z7@rJb3mC{U`$R`YS(Z#KyxQx_*nU`kf;}QL%bw17%5~6!mMao^-{FFmX}|ItFuR~F zAAvTF%f4XKYo>2-PJ~ro@Ly#t@Sf69CrA+rmMRpihqH7V&SXX+$Sw`HZF`I*_3Vjz z%kPMyN0J3sl>X{-h12)j&XRhAAI;Aou%%z}gI>G+32z*qpZg{m`CezFrzg#&yc<1` z%j~}PN!F5Ddq(>R{+t0v{j6v^0XwWGu@5+`-$m`_>pCzM`r}wz*8Qv=$|P0R$%tJp z>D+N4GZ|Tg>XL<6XP9_wQRGDs^1icY*5GP4>*7mGMr;V zI%kT_^_SQml6$#uRE4Ps>}?ES)_XI8m-%GN{o^itb^S7e_bM$-wo_Ws)W? zx4_6#*X;T$n2N==N0#xzb~BQU#%^NF6|~898JGDbQxjK(ex;Q}_Qn@?Y>!kkUYUeY z&VclG1#eDPU78K@^p3tAUvZi1(nFfk6AAVHWt)Wbi7dPbjA4isOY~?*1&asp!wg#Q zSpSI6*!TGn3|-%vuJE<9V_1EKkz_0%z}Mb7;E!uz)+0^k;@x+<5tzj5 z!InbRtc`YwNCbCac{plY&Y}hWp#PC{o@5UsBj#tv3f^ns^`;$MVN?>q!pW+MYeC7= zkWr1kAX(0xVQ<{qny&CO*|g1{Mk_yE>1t}_YT<5#p8P7QXf;o|s>XQ#SoA&!ddE+8 zOM&VsxsRGS(Spli?P$^pK7Ty{v86RP_6h|MU^J z`J>vn0|BG3Vf!uR0zM|GwtiTPZNb;a@@1+V5+$P4GI_&$%6m!YRGL=lz5kh?z#5f55 z76COi1`R(5p69;ThuQnJ$R3w?I?jigai2arApagd=^tT~oMUWp^u|H_@zXBjpI)Dv zEFc^_`mVu5U*;ClT?x-t9{#fto_+92GF^dotz0sFWTDwZ`s40AY@mv+Qh5c-Ts8Zp z!(v7!zPvFhUZ-xkR!IvaW`{PqN|k)L4*anbtmK+UU&K*awl?DhxRalbtmDw`$#VzK zYFaG}?$F)1j`Qx7wbn|XzMJ&g@3Ai#u5M?%CLPghk;lD^)-|21{Sr+M(suBU4}6CMTMxc_tD;X;z<1-{FeHte=kh1B9O6Hl z!v2i$d1VFC&z&58zU0`G#7^K3Cs@9LYN16O%Vz)?-iQL!G6&sg6aaX>DBZmm@lFrRJpcL{K3(;+`$9GDFDw62Mud@LZjabzVC=w$dx>TQa}U z-{dhKYTYx*C=Fio`ez@wrzx+p%Fk3i&v?6ENXMb3p^?;_&huLLueDwr zpRqHbU%i;9TmexFxCS8F1rPo-ea3!}!ew7{(($76Rdnfa`~$9{8H@f7U&0&HjZ3TZ zuBc||%FljS_e&wNZ$1ezT$*})XAfm??$_cY_?13vM^tT0EKY2ptb+v5P10}a%aTk_ zh8@_T{ns2@jTFhv`)-Vxh}u(0DiL0MUi(We_eic$;gCoqj(T_S{jDo^PahnKJUp3@ zMOk+%weP*c%K6VFXR2icY`J~-&fVMYUg6fsFI->jlA|9`+07y~$Fsz}^;w;mNk$ms zu?y)VA@QH__tvYDudhEWuDD20H&uvrf_boY{($?5{s-SDjyRxSC%%2Xs5d2dpjdk$ zU*NURD#ovwIfd^H{fXR@UuaooJtQr7$d0+(K+1UEwtG9_T?sb$ExV$e-bpf}a@YUe zuzInI59w!x;<)>Be;a7ukLW>V=8~J6nKU<0@H+SQ!Be;1Za_pw#hiuW_PMPBo8W2G z*WDtiIAN<>HQOmh)DMi{s-0H^GmV3QMf4Zu(zXT!-c;2)uv4gUwt(-}-N*|KUOo$h z+Ak^R)h8yB5UD8 zsSjHgY}KguNi?xV=tdCWqJR!~dDpFQoRJOwxrWH^vfRq4%)v;sDfIjsLXF^)uy>!i z*S8Njd7yfa`+7(|8H9j73Rh|TwFpF(8H-p;RLLIU>k<*qI%A*SL{u$%<=X@Jm1QFe zVkQ(X8P4Tohl?_tSO__^aqaI?k$CC8uNLv2mp_zD@4oDaZfEN5;3#XY!L{8B!;Dtt zb~Zge@JF|#Gsk^5$-|(OPI73po|WZh<`UxaH#Y2!&p05Ph?H)d3Bc3J4sDi$f(6K`?&D&~eHVuE@_Prkt>_&8&aq=OzoN!ANkvho;qIX(g|d#EKQbJ@;-%_iARmgSF1fEK z@B4W@5mDME7AzfL**c&2#B7xO9>rA4x$rM{N=%0=goumK1kL{TF@CSk0yvqR2oo&m z)?nyiL$9~Jt(qnEuWt9Hc_duim%|zJQYiaF*~orVNDvJB;`%ZW_2x%Uu01LeX-JP& zD&fas6d3=igAgcfeki79{5!XPHHYR#nfLYRKv^wkv~cnEbLHMwQ8%yCZI^rK!D2qT zk40Vg;e!_!3d56&umIuidN?6MTZFzHot}AdqKzDh#w0s`)cV!2A74RSH1@lDXtC38 z+UhO4A9?oZEOV{bIgGd1{2qMR&xT+}q!=I8m)W23v!W2WPC?Tf!F!e%_(m^lQZtq* zYwi}gY(KZ*Y^OWRNj$Ph#uEEBM+wtN8QFQ@^`GDOln^ioNrmtvzNNi*qS5lPHxI96#sMil*teLVaa%$msF>@5p#SjT%q8|<4ZOUB#!-kG+|eFSED z!|3c8fXaym9qH`L;pmqTWcG}WE$(h1sZ3seM>)E3ptoP<;~h~qe6XA)lGVanf&->P zjZwi;_;Dt+bYdAeD_XSQ-DgXRXqLv`3Wcgl}myA-JlzBBIh zWq4Q*9#(zjAk_H8VS_AJ`?OS*^gB-rp|~qt;v(C5ef=SErv;~zL64hW`#g!UZQcvZ zF6Ra@S@YhVSkSWVAY=Z1w)w-hfJDRwKTUH0o-OG5TlW0HDH36hIjnP=?A+8u1)Qyy5U8Gi$! zt^!vy|f=YHfQ`ZRK?D zXXn*kItRg50vr2+_hV5kjOleg#s~z(J2p#`=1Tq4#JS`MC^e4p&s7Ir=3m(K$LW#` z=ULCoWtna!so+QQ*JHb~6Ps9_&Ag>9qsUskp0pKbi`n?(u3&@QT!?}N}rXn z>1eHi6(@LicU*AR1obe+nbzTCD#VTJ`PFLRT(nc$NWrhsgRwFni*D(#?W^x=J6?|b zENSc^D}s>Y55)PzFs2d_2;yh89E0ZIgs&>6JV=pL6k9g_(`$04EoY+Zjn}}8e#n83 zJ=zB>BU<253Erdo$wE4^+@QQJFZyAj#(InFlN;!UGg96R@{Y&%OlGG;dM)^X8=Ddw@&2Vx?zui$tO z-{zgaU7&F!xs=e`Mn}r+xrdIAmkraRN_7P1?qu1|TZ%1QR(Mn?k+pq`Xys2v9Gs=a z?r@g&;UKcM#?36r9k*eVD(}9qe8?irotsn0+eHH8*4 zPX@Lusr)$J%8jarx5ssEJ?twFyu4kAbrf`96_z{6at^&UkyDzFa69RXP>PeK+dAWqE5<5P+aHa zs<<*+OO_2ObTXau%y)Nn{(p5`XIPWlvi|asjYcui;E@)Ig{YKBXi}spqC!-P5owwL z3L*+9;0C0G!xoN;4KNfDaElv>1#DMDglI&MAVoK2+c2Pr8&sl*1dYj=^>NRS`{O&%YV25@5*eoOvpD_(xdKsnqb^`T}bm;n0BN9ben1Ynyi*OOf;qLpf^ z!T{}GzkXSszN_Xqzp>}S*Im)_Y8~2|B*ybw(U=Q)5_NcMkT;)1&52YQJB)Tn%kPK! z@3;^AI){B(&UOv<{v9KKJrInkdcXV0%O1%1=7vYV*j?v(Kp~arZio$#(A@$kYB3aM zRdm4!^Je15%66($EkCIWGhi@=kNAyLJ3ydlJnCpPuxH0+OA}J)+t8d7nT->##Nz4w-L=S7ExQt=Rx}S*mpT91(>t~qe7tM%e|O)TIO^dP zfo61GNS=cJbLutqUh84?7X#bq)bv57s&D_zm{+xNv7vHjb=_}j-Lrj-Ss*pcD@ts$ z)5Dol8Z_&*1@JdAQE7SL$*!TXI|YE7q=YGkIiUeLvT0)14Q-ivs|+cqeT6DTi9eQ)h?Pu9pqmH51B* zFMd|;l2@D4*56|EhMFlDxl2i<8qq=c+AhMYS3(A28#3DZ;_Ln>RA3q#IAdJq7M#N> zTZ8t=_>lq0=W&w|bdQ^sy&m^@KR)mNi3|1<6|OL(0KLtP#I6ix$2b{-Y9GP5I7 z8AJUSCnlia5vWawX%ZLWTC2UV$cn^sfv68W!6)QO;ZjnX=7#`$ZPRG~irfl)ZUJ^D z{lUk?(*SU7XIiS^H{Lpxn%542#PgxdeG)Ociej#(uvX)z;Z3)<16Yhd z-sv?qQ5D4a)ZYoYPRep2Zvom@U)HKq*54ZEwdaEq^FZG#(CyG!=Vw(0j8CCmP~`_z z=OR^i&WkDCf2cLvWm@d?)mEgme{hA(o#xAL023LZ3(82SGRg6jJF7$kZ4! z6*FTm4y6v~CP!3$+fxg{QeFo24<3iucgI!oyjV|9Dsx}r~4X@lt^VaH$u zD?87}1Jh=?G8OYg*ts2k;X9{f*Za?yu8IUUfyuQ**wbcWT+KncjD^qQ3h&w2+S(Mj zZM~?Ot%ggTIHwkBkL-4&jI5R=B+MCOR42bKzC2M>l?1%x2Iv7amIfQ1B#wwfD`z|m z+E?G+o(tde*Ws?;Wo4p#Yy>Nnf|*b<nj@-s(rZ)-U@ z(Xe(qZ1(_dH|J3yWu|bAPINK}DwF(kZ>FKx(?ZmU^KFC6*bh$;FKGh~pH1 zozA+kgcIk9@2aAwEJ=VYizT!sxDXX$N?XDiGKaaT-OU@Ib=~4DmgEk&{2D@IvyjF* zuF@sDcuuqx_FAgx;B@@8gqjMh!kQeEKA*y4+q+^4&uc0|>M;$Xb+ z@X%eUx1m%$WSP}Qchx68NQ?dO!h`6;Quq+A1(RORsQ-;6bZ90vj#^0(7>cLR+-_;9 zCd@b~B5V>$tpjkQU#BD%9^zu7-l>U8nzt+XuX5cYDCHYaX5t~~3?lpa;)Mr>q;5XW zu(Th;fr}-GkP`K)u97(#UB|L3f;H7Cd#Pox+auV`=m?a=mSv1v)(V!E=$%gkIJZ;` zZj{Lb@bhs%bRa znZw9cD$cDFVHPtpXwY1K)wys@LS~;!qdqkR>@&RtP>?M^>xe{4N#EtZy4zZ5Ar$ZF zV=X=(!xin-58MC<+b~;jk8Q|3B3THGIA$cM8Bg)Yd6ygP#i?4VrX3OvP_k5i{Cppw z-{$XwrJ-+X$ccJ(Q{|?T@U9=-?qlsfA43%8t247KZn?`+C4e`b-e^(df*iW66=Oc2 z3w9UhohfdY@pH1MZ}vc<1osV(2CGG)Ree$E-T;8>$zw*>x-505b&4(shMGIjbAfLS zEZ3ys(`SmCWc(75)^=aKer}>67qj^nGKtCK{35I|tA}wQa!uM!suX%Gb~ylORGGc( ze^|m|N!}G0#Ph|;wSXz`SByQM>lPM#8>mdSQs`7RxkXaSAADYA24u6xWqkIXY?o%z z%TEFL+wNW^&nrvaA1_#P%&Hbzrjl!*hIft>F0@g0IVydUU4MJgS3_3Js8{*>|G2jC z4%n#cOy9b2Xf&Pw=14;0Dtf00C^Z$I-v05OqtvN9>sAC&oV1Tk;;ku7VR`sQK4oFq zQ8)yoZNuTwV$t13|GCUIC{ID_r7M5&R*zhsxbrkg;EgMtL|9ne=^}BM!dxV!KDeXkWA^MfQTkQEt8~t>JznNh%ULvn@dbQ2cyf} z|C%ns#NJU}SHU(7Pg$<&8uDK>d5GZJ&`;CcfGP(~b-#UusXevc^q!km1X6_wVMqGk z^m&ZS6#42?p4c_t1TA$_+}h1L2c<<=$k%;v+D!<@j5hs|{>d18>~~v#oq4yGyS@QP zgTX2oJbEy@eJbo-f{ZQ>-nmB-#AqWcHbMQXFi*T)0n!(HIexz=pp<(O*DMh7CMupX z)ei1ZYuIW~E={-ND*nD;okiZdm!?^|LjLZhs*FHZvWld5TDj zcvWB)`-1Me9bu`*4M=CO6ye=pMgxlgYvsh2rV#5Z$hFKw0GX30%oufb=hJ0BFIJH` z+Fii4gQ+7!)8K^yc*PVEW^#f!|BW0Q5*`IewQ5YDFh?{x1L7tlaUAX@3Y+D>6FPVf zJzOGex~H34`8eq+TL$FsHm+27RS>3$CG;>0Jj4*1ukX$za})*b^S5p}I2jbFCHLsA zzYwAyftMz`uo2c8ieQcy-p&9iP3fMk(uRw+OlBPm`KCLei6g!|Vnk*-kjs>A25MTE z5GLDMV$70AC0j-tx*0sCruvKh{fSM)3X}13U>m|KeaOb`9^}v^44!$`06-JHf@L4EKyxV)M!8cL zi5p9kF97RiAT92!e?%9CP=qX3wyv^A8q!w%07d(9f-U))uDgsr4FDVL;|%r)fw}-@ zlB$F79X^EKYF%8J7mU?3VzJoYQ0<;NczW1jH4=4kEh_)q|^9wj zIsn-SsmRx0_EJ7(6WypwptIwZ)-T<__UgUu?BXt zoIf|a!5`?&JEb$w2PZSqhA>J;GIA^rJ-Cpz8MKX~bcqZNOUzPtu|NMvEP>+cO;V*W zNQ8YPENkr!)lN+tlxB79RUD20$)+_P6Jc`+4q@%Kno{F+#1qR*zrj%T>nTSceO?a5 zyqGDa59#G6k*RXu6+#=e=e!~i1Y&15!cHmE6sLh_K%Ppv$tFE-Le3RQs-nx5LB>gy z5A))kwkxWSy73{@I{%{DY8X+2o{CLJb~R$3r=oT^P~Xo$2lKz8?Z!3QLn$5l#L2k2 zb1=?UT&c<8!&9gW1M&jI!5%dhJbD3nQXpaeNJ>=zR+EL!4iY(nMBQI+|2J+Hw-WMr z08Mt9h8(PGbY?zKtk=cqw(yW}1A#htn* z8&}5Y>$uc>Lv!bSuWQ5UB&ct7*jiZAFpxz|%xO&5kg zzlf?6xy7H3G^*wvP5scW*Wf(<&eP!YIUf%&HT?K)RWmKg$G^=mSoi~;&9dU%{o}WV z#BX;9+q)fpVU`>Vdo~AtYK)`7z*H;dc-e|q6Qt;3J0APUL!~g&Q literal 0 HcmV?d00001 diff --git a/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4cc16421680a50164ba74381b4b35ceaa0ccfc GIT binary patch literal 3276 zcmZ`*X*|?x8~)E?#xi3t91%vcMKbnsIy2_j%QE2ziLq8HEtbf{7%?Q-9a%z_Y^9`> zEHh*&vUG%uWkg7pKTS-`$veH@-Vg8ZdG7oAJ@<88AMX3Z{d}TU-4*=KI1-hF6u>DKF2moPt09c{` zfN3rO$X+gJI&oA$AbgKoTL8PiPI1eFOhHBDvW+$&oPl1s$+O5y3$30Jx9nC_?fg%8Om)@;^P;Ee~8ibejUNlSR{FL7-+ zCzU}3UT98m{kYI^@`mgCOJ))+D#erb#$UWt&((j-5*t1id2Zak{`aS^W*K5^gM02# zUAhZn-JAUK>i+SNuFbWWd*7n1^!}>7qZ1CqCl*T+WoAy&z9pm~0AUt1cCV24f z3M@&G~UKrjVHa zjcE@a`2;M>eV&ocly&W3h{`Kt`1Fpp?_h~9!Uj5>0eXw@$opV(@!pixIux}s5pvEqF5$OEMG0;c zAfMxC(-;nx_`}8!F?OqK19MeaswOomKeifCG-!9PiHSU$yamJhcjXiq)-}9`M<&Au|H!nKY(0`^x16f205i2i;E%(4!?0lLq0sH_%)Wzij)B{HZxYWRl3DLaN5`)L zx=x=|^RA?d*TRCwF%`zN6wn_1C4n;lZG(9kT;2Uhl&2jQYtC1TbwQlP^BZHY!MoHm zjQ9)uu_K)ObgvvPb}!SIXFCtN!-%sBQe{6NU=&AtZJS%}eE$i}FIll!r>~b$6gt)V z7x>OFE}YetHPc-tWeu!P@qIWb@Z$bd!*!*udxwO6&gJ)q24$RSU^2Mb%-_`dR2`nW z)}7_4=iR`Tp$TPfd+uieo)8B}Q9#?Szmy!`gcROB@NIehK|?!3`r^1>av?}e<$Qo` zo{Qn#X4ktRy<-+f#c@vILAm;*sfS}r(3rl+{op?Hx|~DU#qsDcQDTvP*!c>h*nXU6 zR=Un;i9D!LcnC(AQ$lTUv^pgv4Z`T@vRP3{&xb^drmjvOruIBJ%3rQAFLl7d9_S64 zN-Uv?R`EzkbYIo)af7_M=X$2p`!u?nr?XqQ_*F-@@(V zFbNeVEzbr;i2fefJ@Gir3-s`syC93he_krL1eb;r(}0yUkuEK34aYvC@(yGi`*oq? zw5g_abg=`5Fdh1Z+clSv*N*Jifmh&3Ghm0A=^s4be*z5N!i^FzLiShgkrkwsHfMjf z*7&-G@W>p6En#dk<^s@G?$7gi_l)y7k`ZY=?ThvvVKL~kM{ehG7-q6=#%Q8F&VsB* zeW^I zUq+tV(~D&Ii_=gn-2QbF3;Fx#%ajjgO05lfF8#kIllzHc=P}a3$S_XsuZI0?0__%O zjiL!@(C0$Nr+r$>bHk(_oc!BUz;)>Xm!s*C!32m1W<*z$^&xRwa+AaAG= z9t4X~7UJht1-z88yEKjJ68HSze5|nKKF9(Chw`{OoG{eG0mo`^93gaJmAP_i_jF8a z({|&fX70PXVE(#wb11j&g4f{_n>)wUYIY#vo>Rit(J=`A-NYYowTnl(N6&9XKIV(G z1aD!>hY!RCd^Sy#GL^0IgYF~)b-lczn+X}+eaa)%FFw41P#f8n2fm9=-4j7}ULi@Z zm=H8~9;)ShkOUAitb!1fvv%;2Q+o)<;_YA1O=??ie>JmIiTy6g+1B-1#A(NAr$JNL znVhfBc8=aoz&yqgrN|{VlpAniZVM?>0%bwB6>}S1n_OURps$}g1t%)YmCA6+5)W#B z=G^KX>C7x|X|$~;K;cc2x8RGO2{{zmjPFrfkr6AVEeW2$J9*~H-4~G&}~b+Pb}JJdODU|$n1<7GPa_>l>;{NmA^y_eXTiv z)T61teOA9Q$_5GEA_ox`1gjz>3lT2b?YY_0UJayin z64qq|Nb7^UhikaEz3M8BKhNDhLIf};)NMeS8(8?3U$ThSMIh0HG;;CW$lAp0db@s0 zu&jbmCCLGE*NktXVfP3NB;MQ>p?;*$-|htv>R`#4>OG<$_n)YvUN7bwzbWEsxAGF~ zn0Vfs?Dn4}Vd|Cf5T-#a52Knf0f*#2D4Lq>-Su4g`$q={+5L$Ta|N8yfZ}rgQm;&b z0A4?$Hg5UkzI)29=>XSzdH4wH8B@_KE{mSc>e3{yGbeiBY_+?^t_a#2^*x_AmN&J$ zf9@<5N15~ty+uwrz0g5k$sL9*mKQazK2h19UW~#H_X83ap-GAGf#8Q5b8n@B8N2HvTiZu&Mg+xhthyG3#0uIny33r?t&kzBuyI$igd`%RIcO8{s$$R3+Z zt{ENUO)pqm_&<(vPf*$q1FvC}W&G)HQOJd%x4PbxogX2a4eW-%KqA5+x#x`g)fN&@ zLjG8|!rCj3y0%N)NkbJVJgDu5tOdMWS|y|Tsb)Z04-oAVZ%Mb311P}}SG#!q_ffMV z@*L#25zW6Ho?-x~8pKw4u9X)qFI7TRC)LlEL6oQ9#!*0k{=p?Vf_^?4YR(M z`uD+8&I-M*`sz5af#gd$8rr|oRMVgeI~soPKB{Q{FwV-FW)>BlS?inI8girWs=mo5b18{#~CJz!miCgQYU>KtCPt()StN;x)c2P3bMVB$o(QUh z$cRQlo_?#k`7A{Tw z!~_YKSd(%1dBM+KE!5I2)ZZsGz|`+*fB*n}yxtKVyx14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>GbI`Jdw*pGcA%L+*Q#&*YQOJ$_%U#(BDn``;rKxi&&)LfRxIZ*98z8UWRslDo@Xu)QVh}rB>bKwe@Bjzwg%m$hd zG)gFMgHZlPxGcm3paLLb44yHI|Ag0wdp!_yD5R<|B29Ui~27`?vfy#ktk_KyHWMDA42{J=Uq-o}i z*%kZ@45mQ-Rw?0?K+z{&5KFc}xc5Q%1PFAbL_xCmpj?JNAm>L6SjrCMpiK}5LG0ZE zO>_%)r1c48n{Iv*t(u1=&kH zeO=ifbFy+6aSK)V_5t;NKhE#$Iz=+Oii|KDJ}W>g}0%`Svgra*tnS6TRU4iTH*e=dj~I` zym|EM*}I1?pT2#3`oZ(|3I-Y$DkeHMN=8~%YSR?;>=X?(Emci*ZIz9+t<|S1>hE8$ zVa1LmTh{DZv}x6@Wz!a}+qZDz%AHHMuHCzM^XlEpr!QPzf9QzkS_0!&1MPx*ICxe}RFdTH+c}l9E`G zYL#4+3Zxi}3=A!G4S>ir#L(2r)WFKnP}jiR%D`ZOPH`@ZhTQy=%(P0}8ZH)|z6jL7 N;OXk;vd$@?2>?>Ex^Vyi literal 0 HcmV?d00001 diff --git a/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..bcbf36df2f2aaaa0a63c7dabc94e600184229d0d GIT binary patch literal 5933 zcmZ{Idpwix|Np(&m_yAF>K&UIn{t*2ZOdsShYs(MibU!|=pZCJq~7E>B$QJr)hC5| zmk?V?ES039lQ~RC!kjkl-TU4?|NZ{>J$CPLUH9vHy`Hbhhnc~SD_vpzBp6Xw4`$%jfmPw(;etLCccvfU-s)1A zLl8-RiSx!#?Kwzd0E&>h;Fc z^;S84cUH7gMe#2}MHYcDXgbkI+Qh^X4BV~6y<@s`gMSNX!4@g8?ojjj5hZj5X4g9D zavr_NoeZ=4vim%!Y`GnF-?2_Gb)g$xAo>#zCOLB-jPww8a%c|r&DC=eVdE;y+HwH@ zy`JK(oq+Yw^-hLvWO4B8orWwLiKT!hX!?xw`kz%INd5f)>k1PZ`ZfM&&Ngw)HiXA| ze=+%KkiLe1hd>h!ZO2O$45alH0O|E+>G2oCiJ|3y2c$;XedBozx93BprOr$#d{W5sb*hQQ~M@+v_m!8s?9+{Q0adM?ip3qQ*P5$R~dFvP+5KOH_^A+l-qu5flE*KLJp!rtjqTVqJsmpc1 zo>T>*ja-V&ma7)K?CE9RTsKQKk7lhx$L`9d6-Gq`_zKDa6*>csToQ{&0rWf$mD7x~S3{oA z1wUZl&^{qbX>y*T71~3NWd1Wfgjg)<~BnK96Ro#om&~8mU{}D!Fu# zTrKKSM8gY^*47b2Vr|ZZe&m9Y`n+Y8lHvtlBbIjNl3pGxU{!#Crl5RPIO~!L5Y({ym~8%Ox-9g>IW8 zSz2G6D#F|L^lcotrZx4cFdfw6f){tqITj6>HSW&ijlgTJTGbc7Q#=)*Be0-s0$fCk z^YaG;7Q1dfJq#p|EJ~YYmqjs`M0jPl=E`Id{+h%Lo*|8xp6K7yfgjqiH7{61$4x~A zNnH+65?QCtL;_w(|mDNJXybin=rOy-i7A@lXEu z&jY(5jhjlP{TsjMe$*b^2kp8LeAXu~*q&5;|3v|4w4Ij_4c{4GG8={;=K#lh{#C8v z&t9d7bf{@9aUaE94V~4wtQ|LMT*Ruuu0Ndjj*vh2pWW@|KeeXi(vt!YXi~I6?r5PG z$_{M*wrccE6x42nPaJUO#tBu$l#MInrZhej_Tqki{;BT0VZeb$Ba%;>L!##cvieb2 zwn(_+o!zhMk@l~$$}hivyebloEnNQmOy6biopy`GL?=hN&2)hsA0@fj=A^uEv~TFE z<|ZJIWplBEmufYI)<>IXMv(c+I^y6qBthESbAnk?0N(PI>4{ASayV1ErZ&dsM4Z@E-)F&V0>tIF+Oubl zin^4Qx@`Un4kRiPq+LX5{4*+twI#F~PE7g{FpJ`{)K()FH+VG^>)C-VgK>S=PH!m^ zE$+Cfz!Ja`s^Vo(fd&+U{W|K$e(|{YG;^9{D|UdadmUW;j;&V!rU)W_@kqQj*Frp~ z7=kRxk)d1$$38B03-E_|v=<*~p3>)2w*eXo(vk%HCXeT5lf_Z+D}(Uju=(WdZ4xa( zg>98lC^Z_`s-=ra9ZC^lAF?rIvQZpAMz8-#EgX;`lc6*53ckpxG}(pJp~0XBd9?RP zq!J-f`h0dC*nWxKUh~8YqN{SjiJ6vLBkMRo?;|eA(I!akhGm^}JXoL_sHYkGEQWWf zTR_u*Ga~Y!hUuqb`h|`DS-T)yCiF#s<KR}hC~F%m)?xjzj6w#Za%~XsXFS@P0E3t*qs)tR43%!OUxs(|FTR4Sjz(N zppN>{Ip2l3esk9rtB#+To92s~*WGK`G+ECt6D>Bvm|0`>Img`jUr$r@##&!1Ud{r| zgC@cPkNL_na`74%fIk)NaP-0UGq`|9gB}oHRoRU7U>Uqe!U61fY7*Nj(JiFa-B7Av z;VNDv7Xx&CTwh(C2ZT{ot`!E~1i1kK;VtIh?;a1iLWifv8121n6X!{C%kw|h-Z8_U z9Y8M38M2QG^=h+dW*$CJFmuVcrvD*0hbFOD=~wU?C5VqNiIgAs#4axofE*WFYd|K;Et18?xaI|v-0hN#D#7j z5I{XH)+v0)ZYF=-qloGQ>!)q_2S(Lg3<=UsLn%O)V-mhI-nc_cJZu(QWRY)*1il%n zOR5Kdi)zL-5w~lOixilSSF9YQ29*H+Br2*T2lJ?aSLKBwv7}*ZfICEb$t>z&A+O3C z^@_rpf0S7MO<3?73G5{LWrDWfhy-c7%M}E>0!Q(Iu71MYB(|gk$2`jH?!>ND0?xZu z1V|&*VsEG9U zm)!4#oTcgOO6Hqt3^vcHx>n}%pyf|NSNyTZX*f+TODT`F%IyvCpY?BGELP#s<|D{U z9lUTj%P6>^0Y$fvIdSj5*=&VVMy&nms=!=2y<5DP8x;Z13#YXf7}G)sc$_TQQ=4BD zQ1Le^y+BwHl7T6)`Q&9H&A2fJ@IPa;On5n!VNqWUiA*XXOnvoSjEIKW<$V~1?#zts>enlSTQaG2A|Ck4WkZWQoeOu(te znV;souKbA2W=)YWldqW@fV^$6EuB`lFmXYm%WqI}X?I1I7(mQ8U-pm+Ya* z|7o6wac&1>GuQfIvzU7YHIz_|V;J*CMLJolXMx^9CI;I+{Nph?sf2pX@%OKT;N@Uz9Y zzuNq11Ccdwtr(TDLx}N!>?weLLkv~i!xfI0HGWff*!12E*?7QzzZT%TX{5b7{8^*A z3ut^C4uxSDf=~t4wZ%L%gO_WS7SR4Ok7hJ;tvZ9QBfVE%2)6hE>xu9y*2%X5y%g$8 z*8&(XxwN?dO?2b4VSa@On~5A?zZZ{^s3rXm54Cfi-%4hBFSk|zY9u(3d1ButJuZ1@ zfOHtpSt)uJnL`zg9bBvUkjbPO0xNr{^{h0~$I$XQzel_OIEkgT5L!dW1uSnKsEMVp z9t^dfkxq=BneR9`%b#nWSdj)u1G=Ehv0$L@xe_eG$Ac%f7 zy`*X(p0r3FdCTa1AX^BtmPJNR4%S1nyu-AM-8)~t-KII9GEJU)W^ng7C@3%&3lj$2 z4niLa8)fJ2g>%`;;!re+Vh{3V^}9osx@pH8>b0#d8p`Dgm{I?y@dUJ4QcSB<+FAuT)O9gMlwrERIy z6)DFLaEhJkQ7S4^Qr!JA6*SYni$THFtE)0@%!vAw%X7y~!#k0?-|&6VIpFY9>5GhK zr;nM-Z`Omh>1>7;&?VC5JQoKi<`!BU_&GLzR%92V$kMohNpMDB=&NzMB&w-^SF~_# zNsTca>J{Y555+z|IT75yW;wi5A1Z zyzv|4l|xZ-Oy8r8_c8X)h%|a8#(oWcgS5P6gtuCA_vA!t=)IFTL{nnh8iW!B$i=Kd zj1ILrL;ht_4aRKF(l1%^dUyVxgK!2QsL)-{x$`q5wWjjN6B!Cj)jB=bii;9&Ee-;< zJfVk(8EOrbM&5mUciP49{Z43|TLoE#j(nQN_MaKt16dp#T6jF7z?^5*KwoT-Y`rs$ z?}8)#5Dg-Rx!PTa2R5; zx0zhW{BOpx_wKPlTu;4ev-0dUwp;g3qqIi|UMC@A?zEb3RXY`z_}gbwju zzlNht0WR%g@R5CVvg#+fb)o!I*Zpe?{_+oGq*wOmCWQ=(Ra-Q9mx#6SsqWAp*-Jzb zKvuPthpH(Fn_k>2XPu!=+C{vZsF8<9p!T}U+ICbNtO}IAqxa57*L&T>M6I0ogt&l> z^3k#b#S1--$byAaU&sZL$6(6mrf)OqZXpUPbVW%T|4T}20q9SQ&;3?oRz6rSDP4`b z(}J^?+mzbp>MQDD{ziSS0K(2^V4_anz9JV|Y_5{kF3spgW%EO6JpJ(rnnIN%;xkKf zn~;I&OGHKII3ZQ&?sHlEy)jqCyfeusjPMo7sLVr~??NAknqCbuDmo+7tp8vrKykMb z(y`R)pVp}ZgTErmi+z`UyQU*G5stQRsx*J^XW}LHi_af?(bJ8DPho0b)^PT|(`_A$ zFCYCCF={BknK&KYTAVaHE{lqJs4g6B@O&^5oTPLkmqAB#T#m!l9?wz!C}#a6w)Z~Z z6jx{dsXhI(|D)x%Yu49%ioD-~4}+hCA8Q;w_A$79%n+X84jbf?Nh?kRNRzyAi{_oV zU)LqH-yRdPxp;>vBAWqH4E z(WL)}-rb<_R^B~fI%ddj?Qxhp^5_~)6-aB`D~Nd$S`LY_O&&Fme>Id)+iI>%9V-68 z3crl=15^%0qA~}ksw@^dpZ`p;m=ury;-OV63*;zQyRs4?1?8lbUL!bR+C~2Zz1O+E@6ZQW!wvv z|NLqSP0^*J2Twq@yws%~V0^h05B8BMNHv_ZZT+=d%T#i{faiqN+ut5Bc`uQPM zgO+b1uj;)i!N94RJ>5RjTNXN{gAZel|L8S4r!NT{7)_=|`}D~ElU#2er}8~UE$Q>g zZryBhOd|J-U72{1q;Lb!^3mf+H$x6(hJHn$ZJRqCp^In_PD+>6KWnCnCXA35(}g!X z;3YI1luR&*1IvESL~*aF8(?4deU`9!cxB{8IO?PpZ{O5&uY<0DIERh2wEoAP@bayv z#$WTjR*$bN8^~AGZu+85uHo&AulFjmh*pupai?o?+>rZ7@@Xk4muI}ZqH`n&<@_Vn zvT!GF-_Ngd$B7kLge~&3qC;TE=tEid(nQB*qzXI0m46ma*2d(Sd*M%@Zc{kCFcs;1 zky%U)Pyg3wm_g12J`lS4n+Sg=L)-Y`bU705E5wk&zVEZw`eM#~AHHW96@D>bz#7?- zV`xlac^e`Zh_O+B5-kO=$04{<cKUG?R&#bnF}-?4(Jq+?Ph!9g zx@s~F)Uwub>Ratv&v85!6}3{n$bYb+p!w(l8Na6cSyEx#{r7>^YvIj8L?c*{mcB^x zqnv*lu-B1ORFtrmhfe}$I8~h*3!Ys%FNQv!P2tA^wjbH f$KZHO*s&vt|9^w-6P?|#0pRK8NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifbFy+6aSK)V_AxLppYn8Z42d|rc6w}vOsL55 z`t&mC&y2@JTEyg!eDiFX^k#CC!jq%>erB=yHqUP0XcDOTw6ko}L zX;EmMrq(fKk*eygEuA616;0)>@A{TK|55PV@70 z$OfzS*(VJxQev3J?yY?O=ul(v`fp}?u9z`JK3ugibK>)DyCwImZOF4d{xK%%Ks1*} zv$oa)9anR%lXIBUqYnhLmT>VOzHfNP?ZwJNZ!5$s9M08RynIvaXw>@G^T9@r9^KH1 zVy??F&uuk)bH9Y4pQY!hP58i_H6 znl-NcuCpLV6ZWU;4C zu@9exF&OZi`Bovq_m%T+WhU2kvkz@^_LpycBvqm3bMpLw8X-Or5sL>0AKE1$(k_L=_Zc=CUq#=x1-QZf)G7nHu@fmsQ1eN_N3+nTEz`4HI4Z6uVlE zJH+X&det8JU?tO?upcM4Z=cV!JV;yF>FfL5Q$M|W_2Z!P`S=}Wzp|_1^#d%e?_H`> zV@%vA$+bFVqhw9`U;TfP|5|PD{||OiYdor8P*i??|NJcb%kzT_73*7WE?Ua5hAnR2 z=7WE=PhTlJ#ZeRznjTUb;`E(wkMZrj4e|Hilz-mK>9cZHQY**5TUPw~u}k;u73KI}xAx!0m-)GVia|x^d3p~s_9gh83jA&Ra<8rM%`>U3x69t&NzbwWY}7Ar?)FK#IZ0z|d0H0EkRO w3{9;}4Xg|ebq&m|3=9_N6z8I7$jwj5OsmAL;bP(Gi$Dzwp00i_>zopr02+f8CIA2c literal 0 HcmV?d00001 diff --git a/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..e71a726136a47ed24125c7efc79d68a4a01961b4 GIT binary patch literal 14800 zcmZ{Lc|26@`~R6Crm_qwyCLMMh!)vm)F@HWt|+6V6lE=CaHfcnn4;2x(VilEl9-V} zsce-cGK|WaF}4{T=lt&J`Fy_L-|vs#>v^7+XU=`!*L|PszSj43o%o$Dj`9mM7C;ar z@3hrnHw59q|KcHn4EQr~{_70*BYk4yj*SqM&s>NcnFoIBdT-sm1A@YrK@dF#f+SPu z{Sb8441xx|AjtYQ1gQq5z1g(^49Fba=I8)nl7BMGpQeB(^8>dY41u79Dw6+j(A_jO z@K83?X~$;S-ud$gYZfZg5|bdvlI`TMaqs!>e}3%9HXev<6;dZZT8Yx`&;pKnN*iCJ z&x_ycWo9{*O}Gc$JHU`%s*$C%@v73hd+Mf%%9ph_Y1juXamcTAHd9tkwoua7yBu?V zgROzw>LbxAw3^;bZU~ZGnnHW?=7r9ZAK#wxT;0O<*z~_>^uV+VCU9B@)|r z*z^v>$!oH7%WZYrwf)zjGU|(8I%9PoktcsH8`z^%$48u z(O_}1U25s@Q*9{-3O!+t?w*QHo;~P99;6-KTGO{Cb#ADDYWF!eATsx{xh-!YMBiuE z%bJc7j^^B$Sa|27XRxg(XTaxWoFI}VFfV>0py8mMM;b^vH}49j;kwCA+Lw=q8lptk z?Pe`{wHI39A&xYkltf5*y%;-DF>5v`-lm0vydYtmqo0sClh5ueHCLJ+6$0y67Z zO-_LCT|JXi3tN7fB-!0_Kn#I+=tyUj87uR5*0>|SZ zy3x2;aql87`{aPZ@UbBwY0;Z-a*lYL90YApOAMKur7YgOiqA~Cne6%b&{V-t>Am2c z{eyEuKl!GsA*jF2H_gvX?bP~v46%3ax$r~B$HnZQ;UiCmRl`ROK8v>;Zs~upH9}qu1ZA3kn-AY2k2@CaH=Qh7K6`nU z3ib(Bk%H*^_omL6N4_G5NpY20UXGi}a$!}#lf<&J4~nhRwRM5cCB3Zvv#6+N1$g@W zj9?qmQ`zz-G9HTpoNl~bCOaEQqlTVYi7G0WmB5E34;f{SGcLvFpOb`+Zm)C(wjqLA z2;+nmB6~QDXbxZGWKLt38I%X$Q!;h zup9S~byxKv=$x|^YEV;l0l67jH~E8BU45ft_7xomac-48oq4PZpSNJbw<7DTM4mmz z!$)z#04cy%b8w@cOvjmb36o;gwYIOLwy+{I#3dJj#W4QdOWwJQ2#20AL49`hSFUa7 zFNAN3OD==G3_kbr1d96>l`_cI`<=thKNh5>hgg7FV>5TfC6d#u)9BNXi@p1K*;2Is zz+x;l4GbSt#*%>1iq}jGIebXYJY5;PGG0y(^{>SSuZY89aL`sDghOM&&pyP6ABJ#w zYwK~4^1eUQD)4!GL>`zrWeHV z-W!6JZbW*Ngo;Edhp_cOysYr!uhKS}vIg_UC}x z=jXxQfV@4B3`5 z!u#byBVXV5GtrSx_8bnT@iKv=Uc6n)Zpa`<9N>+!J~Loxptl5$Z`!u<3a)-+P)say z#=jc7^mJzPMI2;yMhCmN7YN78E7-^S(t8E}FklC;z|4PL{bO|JieM#p1mBjwyZMEm zkX^A1RXPGeS2YqtPMX~~t^$~oeFfWAU#jVLi%Z@l2hle^3|e(q?(uS=BVauF?VF{j z(owKLJuze;_@5p1OtRyrT`EFXf)NfMYb-)E8RVVdr<@}M>4R&~P=;B`c1L%o|8YfB z-a(LB-i8jc5!&B5cowyI2~M^YID&@Xt(D9v{|DB z959W z*vEA77fh3*w*UJ`4Y(bxsoEy6hm7_Wc5gT0^cvso%Ow>9<&@9Q>mxb6-^pv)5yc>n zQ~^!qY(lPQ1EDGkr%_*y*D8T^YbCa52^MVqYpTLhgJ;N5PfCQ{SXk|plD#Sm+g4c- zFeL2Dih35W4{_qb75U`4Rb#S0FEo%F85dOhXSX0huPOxdAid{&p6P;+9}I)XU7^=3RZu9M(g0dLyz_7$8K{`AddBLOfU&B_QNHtmsnNXq`hy~% zvJ{vtz~Yt9X|o}5vXX)9ZCHaRq8iAb zUDj8%(MpzJN39LferYKvIc!)z^5T-eW@j3h9a6d%WZ!%@2^@4+6%Z9W1GHZbOj|sb z0cU$}*~G$fYvDC|XulSC_;m}?KC2jg5pxES$Bt!hA|@EX*2+O!UEb5sn_^d>z;>;r~ zmO3BivdXboPY*}amsO&`xk|e)S*u=`o67MC(1WTB;OwG+ua4UV7T5Wvy%?U{Pa5cO zMoLG>#@chO{Oc72XPyX8f3jC7P`$j4$)0wc(b50COaDP3_Cm}aPAglUa7kRXAqmo5 z0KDD7G>Gmnpons40WJNYn+pxko92GXy@PvSErKE-Ou3)3UiRr7!L4+0%+5}sD{bf)uj^ounQ-Yn2%%JoZ%FjUv%yjS?Ks4u_88Jh%tNliYW~817IV@fqd1T zi(?;Fv-s3rQEn=9G*E-QzSl%YS|^fe*yn}Aqh!&P<5%#oB?*{wZMa5$PYa*A{VA8! zbOfS1W!W}cTo%g~iP$>WhE_x7#O4?h$jq=>{M77>bTAK_ z6uU0tl6HARboGi}=4krr6WP`9`aAt&P5ON1v(+H{T?jZuJ}B{L-=z3VX)}mZwzrqH zpf?T!k&$?{&{0_p>b`kdJbSb(p~tFcuG4zh6}hfl@ues6CfJu<-P+!>FlYMlD_3!E z9$6VE==tlxNYe(s;@8@+4c4jQ$R2g8t0QwE>Et|)5)@kJj6^yaqFYY?0LEM2C!+7+ z+FN|UxR1GCy1KA`{T_%24U+Vserchr5h`;U7TZPr@43x#MMN{@vV?KSII}R@5k`7cVK}E;c)$f~_{ZLDOoL|-01p~oafxi4F zG$?Wha&a*rTnz-nTI-bAJ*SLb!5(L!#iRdvLEyo>7D_=H78-qZrm=6{hkUR{tR{H! z`ZTOV$Oi6^qX5=_{f}V9h}WJAO%h9)kEUF#*-JyYDbOGZ>Nfs%7L}4p zopIul&&Bbn!C9o83ypC6W4F$X=_|pex$V4!Whm#48Wfm3*oAW0Gc&#&b+oq<8>aZR z2BLpouQQwyf$aHpQUK3pMRj(mS^^t#s$IC3{j*m9&l7sQt@RU{o_}N-xI_lh`rND^ zX~-8$o(;p^wf3_5-WZ^qgW`e8T@37{`J)e2KJdSSCUpX6KZu0Ga&U*+u3*PDAs1uK zpl)40+fROA@Vo#vK?^@Pq%w8DO9HdfmH+~vNinZ$5GRz?sD|k246NepqZd`>81P^P z#x#3kUS-}x4k%&~iEUrsb&-X#_;;?y9oCP4crMkC`=q58#NxQ| z*NXNA;GR4X=GiGXwab5=&M3j04fQw%2UxM`S(aE)_PlgJttBX96$$lY@Q%0xV^IbcHqzw^Uk&E=vFB;EQ@kzVIeM8lDIW_Q_ zrfy)l6s2QBApF;J2xTD_@wuNMlwDfsdfMyzRq)<>qG{M)Yt}9F1{1HaI_X7=F=7>& zYB54VaKlxu0lIgS;Ac&25Aw(tcf@K~(cvPi8(OChzhlYp6}#<_MVhU95sD&)n0FtL zmxm4w$~s(S9jmHOgyovpG!x4uLfJsMsJn^QMraKAa1Ix?{zkV!a7{f%-!u2{NqZ&) zo+^XB`eFQ4 zk-(;_>T#pTKyvW${yL|XXbcv?CE2Tp<3(PjeXhu^Jrp6^Mj}lg_)jamK{g;C+q^Da ztb!gV!q5)B7G1%lVanA2b>Xs?%hzCgJ{Hc!ldr9dnz7k^xG#4pDpr|0ZmxxiUVl}j zbD_rg3yAFQ>nnc)0>71D==715jRj4XsRb2#_lJoSOwky&c4957V-|m)@>b^Nak1!8 z@DsIOS8>Oe^T>tgB)WX3Y^I^65Uae+2M;$RxX_C)Aoo0dltvoRRIVQkpnegWj;D#G z+TwFIRUN%bZW3(K{8yN8!(1i0O!X3YN?Zo08L5D~)_tWQA8&|CvuQb8Od?p_x=GMF z-B@v9iNLYS1lUsbb`!%f5+1ev8RFPk7xyx5*G;ybRw(PW*yEZ$unu2`wpH)7b@ZXEz4Jr{?KZKYl!+3^)Q z)~^g?KlPGtT!{yQU&(Z&^rVjPu>ueeZN86AnhRwc)m|;5NvM&W3xD%n`+Hjg5$e8M zKh1Ju82L~&^ z-IQ5bYhsjqJfr38iwi~8<{oeREh|3l)*Enj4&Q$+mM$15YqwXeufK9P^(O=pj=F-1 zD+&REgwY~!W#ZPccSEi(*jiKJ5)Q|zX;hP}S2T9j_);epH9JQs{n>RG}{Nak)vIbfa zFQm?H;D+tzrBN2)6{?Mo%fzN6;6d_h0Qyn61)+XT63=!T*WQyRUoB_x0_)Ir`$FtS zak07C(mOaWN5m%bk?F9X&@mEVKN%{R6obt(9qw&p>w&p;R*l2th9$D^*`pC}NmB+v z>bk;OJ(C8p$G;jNvRsBbt=a!!tKnjJ`9*yQFgjEN1HcC<&>u9aStT3>Oq=MOQV!#WOZ6{cv$YVmlJdovPRV}<=IZUPeBVh5DC z91-?kimq3JUr;UMQ@0?h52gupvG=~(5AVdP(2(%*sL8!#K1-L$9B7MrWGdt(h&whR@vz~0oEHF8u3U1Q zdGdaIytJj4x@eF*E+^zgi{nPCA8tkjN}UoR8WhDzM3-zLqx0z?2tTdDKyENM={fp8VC@3Dt`AiK$;K#H$K2{08mrHG%jgEOLX3MCsG>afZm_0mLPS4jmYUJp~Dm! z5AUe_vEaOAT3zWdwl#cLvqwd1^lwW?gt7(92wEsOE6c#<0}{szFV4(uO70?3>=((! zQr}1{J?Wx2ZmjxYL_8OB*m&mimfojzYn~PiJ2g8R&ZRx-i^yF#sdhEWXAUIZ@J?T$ zs3PgT2<&Ki>Bob_n(@S>kUIvE+nY~ti9~6j;O9VAG#{oZ!DZCW)}i6iA!Tgsyz+hC z1VVyvbQ_nwgdZSEP=U4d#U`2*`e~d4y8uM4Bcmm%!jidaee#4WqN!ZnlBmbYpuaO! z!rU3`Kl2 z0O7PD&fQ|_b)Ub!g9^s;C2e>1i*2&?1$6yEn?~Y zI)-WIN8N(5s9;grW+J@K@I%g#?G&hzmlgV=L}ZA{f>3YCMx^P{u@c5Z;U1qmdk#)L zvX6z1!sL>+@vxO8qVn#k3YxYi?8ggV){?Rn@j$+Fd4-QkuH1@)j#3-=f82GZ!nl~{ zzZ(?kO`ANttVeHSo%xmH!NmNZECh*{s!-8S>ALoe5xOPs>|P5BbUmP@rlV8`d(c=7 zypcpLaI*FM^;GM%@q`GAb8kO`$oE|R48yn)?p(c1t>5;Wwn5r6ck&uw4}TnT80jI`IS~J%q8CpaVgIze<8IykSpVBg8~E! zW_tGqB;GO47r_er05y+Kwrcn{VLxL*1;HMv@*sd}MB6DH4zaP~u4Y;>@Nw7?F8S?c zfVIY(^ntnGgWlD|idzGz$Y+Oh(Ra=&VIf4!K2W*a)(%5%78s}8qxOknAGtDAq+HMO zM+Nu;0OgQRn36 zA@~a8`uVQ~v9?d!BxnsVaB-z-djypO44BjQAmg7&eVoaew|~)wH$SgefJ2$7_RiY+ z_7ACGoFM6Lhvho+eUG@pU&0X(Uy(*j;9pr?ET?FHTXadlfXC|MReZoU5>AG`mTM<% zc~*I@E*u0|hwVTdFA~4^b2VT7_~}~tCueNY{de3og=ASFQ`)0dhC2~Ne<}}Rc?ptA zi}+bQE%N9o*hpSUMH)9xt%Zlz&^p&5=cW}{m#f85iVX64^{!(vhClT<I)+c)RuiyrZqIw4v`z%YK&;_Fh4_+0B?qAGxMfAM`LzG_bjD>ib4;KGT4_1I>sxvL&&qp40ajgQOqIE^9=Az4w#ymo)bW-Vg{T!n=l&|nR_ zw+wcH|FxUH63)~{M;goHepmD{Fe?W9sO|eJP9L$G<{e_7FxxuXQ+)(Z^@;X8I1=%k zTK$gbHA1^4W<`q~ubQ0M_C^CA5#Z&*nGc(T?4Y_2jLu&FJDQYpCSiRny->$+nC9Jl z?avTW`ZXYT51%SrEq!}dXNM&!pM6nmL^lce=%S7{_TS)ckN8;{p*LT~LMgmlE~dpL zEBQy-jDj%cSK6N3)|CCR0LQ$N6iDM~+-1Oz|LAdkip(VZcO`gqCuJ+(Mm{m6@P%_; zBtF|MMVMP;E`5NJ{&@4j^JE5j&}(Jq{lCGL(P^#uqvbD`2)FVyfNgy|pvT!XY;02Z zZWbgGsvi6#!*$Zxwd{Xk6_M{+^yV_K@%_SAW(x)Lg|*AuG-%g2#GQYk8F?W&8|2dU z;00ppzrQnnYXnT`(S%_qF2#QNz&@Y$zcq+O8p>Gto2&4z8(^#cY?DuQwBQP4Fe?qUK_-yh4xT{8O@gb`uh` z>Q%jrgPAnANn4_)->n;w{Mei#J)F+`12&+-MLKSRzF6bL3;4O~oy~v7 zL0K-=m?>>(^qDCgvFRLBI@`04EGdTxe5}xBg#7#Wb!aUED;?5BLDEvZ@tai4*Rh8& z4V)cOr}DJ0&(FjWH%50Y+&=WtB42^eEVsmaHG)Il#j265oK&Bot(+-IIn`6InmuE# z;)qXs+X{fSb8^rYb#46X5?KCzH9X0>ppBQi(aKS--;4yA%0N|D<#8RZlOS(8n26=u zv~y;KC>`ypW=aqj`&x9 z0Zm>NKp}hPJu1+QDo(_U(Gt0SZ`IJWnp%QK`pye>Bm!w{sG>;VU^2 z4lZhV1}tCE8(?zu#j99|l3-qRBcz3bG+DlyxPGB$^6B^ssc_qYQ6lG0q~EAI?1$?( zahfn%etVvuKwB7R=>JDQluP97nLDM6*5;b0Ox#b{4nIgZA*+?IvyDN{K9WGnlA=Ju z+)6hjr}{;GxQQIDr3*lf32lRp{nHP8uiz^Fa|K+dUc@wD4Kf5RPxVkUZFCdtZH{+=c$AC)G2T-Qn@BPbr zZigIhKhKrVYy`!Mlc#HVr=CURVrhUjExhI~gZ%a=WM9BwvnN?=z!_ZQ$(sP?X;2Jy zyI$}H^^SvH2tf6+Uk$pJww@ngzPp856-l9g6WtW+%Yf>N^A}->#1W2n=WJ%sZ0<){Z&#% z^Kzl$>Km)sIxKLFjtc;}bZeoaZSpL4>`jCmAeRM-NP9sQ&-mi@p0j7Iq>1n&z@8?M z%dM7K^SgE5z)@i5w#rLE4+8%|^J`a6wYr`3BlvdD>7xW?Dd>`0HC0o{w7r_ot~h*G z2gI7Y!AUZ6YN+z$=GNzns@Tu7BxgAb3MBha30-ZG7a%rckU5}y{df`lj@^+34kr5> z988PPbWYdHye~=?>uZ4N&MN@4RBLk_?9W*b$}jqt0j%>yO9QOV(*!#cX~=wRdVL&S zhPQ{${0CGU-rfdS&b@u|IK{hV2Z=(*B2d0?&jwWfT=?Gk`4T9TfMQ)CfNgpLQa#>Q z%6A$w#QNc&qOtrHAbqY>J782@!X{9Y@N(HMSr;PP^;0DlJNxfC`oMB%Ocg zC*hnEsF|p*=CVe^dT)>BTL0yff)uo!U<+_2o3p)CE8quU1JI(=6)9$KxVdJYD*S*~ zzNeSkzFIQyqK}578+qq6X8rrRdgX z4k&R=AGex~a)MoB0pK&|yA<(*J#P&tR?ImBVD)ZTA4VH5L5DxXe<-*s`Aox%H1{-^Qa`kG_DGXD%QX-;l1#&#IVQP6>kir ztO@~ZvJDPnTvKt>fc*(j$W^)JhWk{4kWwbpFIXzuPt2V%M4H19-i5Gn*6(D`4_c1+ zYoI1@yT^~9JF~t>2eVM6p=GP3b*;daJpQOhAMNO|LKnwE2B5n8y9mf;q=)-L_FfD0 z<}YIRBO{k)6AHAn8iG>pYT+3bJ7jvP9}LSMR1nZW$5HR%PD1rFz z{4XE^Vmi-QX#?|Farz=CYS_8!%$E#G%4j2+;Avz|9QBj|YIExYk?y-1(j}0h{$$MnC_*F0U2*ExSi1ZCb_S9aV zTgyGP0Cl=m`emxM4Qih1E{`J{4oJo8K}WnH`@js^pR7Z-vTBK5F5JIFCDN}7pU^_nV>NTz@2$|Kcc5o+L&^Db_AQ);F?)X5BF*QJRCdLI-a%gW z++DZM)x=6*fNrSaUA&hf&CUqC$F*y^CJC-MAm9gd*5#^mh;-dR1?a&<3-hp3@}XN! z&8dcwo6=MQua%0KFvYbi>O{j)RrbDQo3S*y!oEJ~2=}^-v%zn~@hnmKGOvX6JLr;>DNC3)={8OM9n5Zs*(DlS*|%JTniJX2Uav7sOFT0vdIiUOC5pEtY?EF)@Fh9pCfD%N zXskZ8b^ldI{HHj{-l?iWo@IW6Nr`hAS>f8S*8FGc*gmcK^f2JS+>I&r#Gcewy=-JM zv0*w<5qBa6UQB@`esOG*4*t@7c9AkrTpM`v=eY?cO#z17H9B%Xy4m!}LhW}*iZ27w1?HrevgB1SZ1q2X$mm@FK@Qt7o z!s~Lio^IRdwzyvQ80{5iYeTV@mAo=2o5>KepRH0d{*Szlg~n%w2)S5v2|K8}pj;c{ zoDRLvYJO1@?x-=mq+LVhD{l-1-Dw4`7M?3@+ z`fu7?1#9W++6Y46N=H0+bD|CJH~q*CdEBm8D##VS7`cXy4~+x=ZC17rJeBh zI~qW^&FU`+e!{AKO3(>z5Ghh14bUT$=4B>@DVm(cj* zSLA*j!?z!=SLuVvAPh_EFKx}JE8T8;Gx)LH^H136=#Jn3Bo*@?=S`5M{WJPY&~ODs z+^V57DhJ2kD^Z|&;H}eoN~sxS8~cN5u1eW{t&y{!ouH`%p4(yDZaqw$%dlm4A0f0| z8H}XZFDs?3QuqI^PEy}T;r!5+QpfKEt&V|D)Z*xoJ?XXZ+k!sU2X!rcTF4tg8vWPM zr-JE>iu9DZK`#R5gQO{nyGDALY!l@M&eZsc*j*H~l4lD)8S?R*nrdxn?ELUR4kxK? zH(t9IM~^mfPs9WxR>J{agadQg@N6%=tUQ8Bn++TC|Hbqn*q;WydeNIS@gt|3j!P`w zxCKoeKQ*WBlF%l4-apIhERKl(hXS1vVk$U?Wifi)&lL6vF@bmFXmQEe{=$iG)Zt*l z0df@_)B-P_^K2P7h=>OIQ6f0Q-E@|M?$Z5n^oN>2_sBCpN>q(LnqUoef{tm^5^L$# z{<SL zKmH78cHX`4cBKIY8u1x*lwrgP^fJ%E&&AmHrRY7^hH*=2OA9K?!+|~Aeia=nAA`5~ z#zI=h#I>@FXaGk(n)0uqelNY;A5I9obE~OjsuW!%^NxK*52CfBPWYuw--v<1v|B>h z8R=#$TS-Pt3?d@P+xqmYpL4oB8- z>w99}%xqy9W!A^ODfLq8iA@z}10u?o#nG#MXumSaybi(S{`wIM z&nE3n2gWWMu93EvtofWzvG2{v;$ysuw^8q?3n}y=pB1vUr5gi++PjiyBH3jzKBRny zSO~O++1ZLdy7v7VzS&$yY;^Z7*j_#BI`PK`dAzJa9G1{9ahPqPi1C}ti+L)WHii*= z+RZ^+at-tlatc4|akPa&9H;%gn9aS`X_kfb>n>#NTyUVM6m4NCIfLm(28>qaYv7}t zn`M;XcONtXoa3#u3{L-ytd_&g z2mO$8CnE?460w#eSm|smlnNwFHM;A&IxSKLzVkV7nNVqZ*A`)eI{Nbg6WxsarAFuc=FFf1z|%#eTvBgUhY}N zsCT>`_YO>14i^vFX0KXbARLItzT{TeD%N~=ovGtZ6j{>PxkuYlHNTe0!u>rgw#?td z{)n=QrGvgCDE6BUem$Rh(1y!$@(Bn!k3E0|>PQ(8O==zN`?yBhAqlWyq+c%+h?p^- zE&OtLind}^_=>pbhxOgOIC0q9{cLK6p6*eg_|S+p9$W~_u4wzx@N?$QmFg2S)m~^R znni$X{U*!lHgdS@fI;|Owl=9Gwi?dr0m#>yL<8<}bLW_Kpl| zSGesADX&n?qmHC`2GyIev^hi~ka}ISZ^Y4w-yUzyPxaJB0mm%ww^>if3<;P^U+L5=s+cifT-ct*;!dOOk#SOZNv@a^J|DrS3YtSn8EEAlabX1NV3RfHwZn_41Xa z4;$taa6JJR()-FQ<#0G~WlML<l5I+IPnqDpW(PP>hRcQ+S2zU?tbG^(y z1K_?1R){jF;OKGw0WYjnm>aPxnmr5?bP?^B-|Fv`TT4ecH3O`Z3`X_r;vgFn>t1tE zGE6W2PODPKUj+@a%3lB;lS?srE5lp(tZ;uvzrPb){f~n7v_^z! z=16!Vdm!Q0q#?jy0qY%#0d^J8D9o)A;Rj!~j%u>KPs-tB08{4s1ry9VS>gW~5o^L; z7vyjmfXDGRVFa@-mis2!a$GI@9kE*pe3y_C3-$iVGUTQzZE+%>vT0=r|2%xMDBC@>WlkGU4CjoWs@D(rZ zS1NB#e69fvI^O#5r$Hj;bhHPEE4)4q5*t5Gyjzyc{)o459VkEhJ$%hJUC&67k z7gdo`Q*Jm3R&?ueqBezPTa}OI9wqcc;FRTcfVXob^z|dNIB0hMkHV26$zA%YgR$sM zTKM61S}#wJ#u+0UDE3N+U*~Tz1nnV;W<8Akz&6M7-6mIF(Pq`wJ1A%loYL( zIS;&2((xbyL7zoyaY2Sa%BBYBxo6Aa*53`~e@|RA`MP+?iI4KZ+y4EU&I zS_|(#*&j2hxpELa3r0O7ok&5!ijRiRu9i-_3cdnydZU9Mp6Y);skv%!$~`i-J7e-g zj@EoHf+gtcrKf;tY5`4iLnWSHa)9brUM$XmEzG3T0BXTG_+0}p7uGLs^(uYh0j$;~ zT1&~S%_Y5VImvf1EkD7vP-@F%hRlBe{a@T!SW(4WEQd1!O47*Crf@u-TS==48iR5x z!*`Ul4AJI^vIVaN3u5UifXBX{fJ@z>4Q2#1?jpcdLocwymBgKrZ+^Cb@QuIxl58B* zD{t-W3;M;{MGHm_@&n(6A-AsD;JO#>J3o4ru{hy;k;8?=rkp0tadEEcHNECoTI(W31`El-CI0eWQ zWD4&2ehvACkLCjG`82T`L^cNNC4Oo2IH(T4e;C75IwkJ&`|ArqSKD}TX_-E*eeiU& ziUuAC)A?d>-;@9Jcmsdca>@q1`6vzo^3etEH%1Gco&gvC{;Y-qyJ$Re`#A!5Kd((5 z6sSiKnA20uPX0**Mu&6tNgTunUR1sodoNmDst1&wz8v7AG3=^huypTi`S7+GrO$D6 z)0Ja-y5r?QQ+&jVQBjitIZ`z2Ia}iXWf#=#>nU+ zL29$)Q>f#o<#4deo!Kuo@WX{G(`eLaf%(_Nc}E`q=BXHMS(Os{!g%(|&tTDIczE_# z5y%wjCp9S?&*8bS3imJi_9_COC)-_;6D9~8Om@?U2PGQpM^7LKG7Q~(AoSRgP#tZfVDF_zr;_U*!F9qsbVQ@un9O2>T4M5tr0B~~v_@a=w^8h510a#=L z;8+9zhV}57uajb+9DbZm1G`_NqOuKN`bQ2fw9A*v*Kdb_E-SA`?2 z)OFIY-%uD`JZUZg?D4lHtNegKgWr!1m%hOpu5`R+bZ2K#&)*R-7ElKYo0$0xYxIL8 zLg%u|4oZixz}ILB-@aS4=XOe)z!VL6@?dX{LW^YCPjKtyw44)xT=H;h(fmFr>R?p%r5*}W z7_bo0drVDRq9V9QL4_!dazughK6t}tVVvBq={T0+3(1zmb>f+|;{D%J?^xnZcqio5 z%H?@L+L-CIdO=x6QrALL9&PwvjrZi5NS)1e<*%V8ntw~S2PF}zH}B5f_DHyB=I3m@ z_;^TpN|sesCU}qxQ`~jIwF>#8wGvxg9kdMT$}us8BM&W>OzZ|ry2BB)+UY*_yH+&L zl_=Jy9BNzIZs}D~Yv_H%HPjVGNV=xT3xpIW!Np1F^G#9Y8X zl)c_V1(DhYu-v%H3-m&n%M_}}c{E5Wu+6*>R24gW_A7$(U=9D|H$r;;;@o zJ)c_CmVf9l*;4SyJ}E{+4)}^C>SIJ*_bul7OJ{v&0oO>jG(5xzYP0$I%*YH|Mwu#r zubNW5VZ9^X#Phw<;?=^G?Kg&C)^x1FVsKGZ*n+{C1znj~YHSP?6PS(k5e9qGvS4X* z=1kA_27(iV65a(i+Sicmd@Vzf^2@*Wed-`aYQ~em=-h%Pu`gHfz)&@$hpr<&mNO={ zl^kI0HP0wTbbh{d(>5a#;zT2_=ppef?;D4;2^}&kZjB^yl%LBJ;|> zkLc)JEg*5rpQ;_)w?PnKynWtv!@ z>}+am{@(g$KKM+e$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/image_list/macos/Runner/Configs/AppInfo.xcconfig b/examples/image_list/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000000000..55939c7dca21e --- /dev/null +++ b/examples/image_list/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = image_list + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.imageList + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2021 com.example. All rights reserved. diff --git a/examples/image_list/macos/Runner/Configs/Debug.xcconfig b/examples/image_list/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000000000..36b0fd9464f45 --- /dev/null +++ b/examples/image_list/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/examples/image_list/macos/Runner/Configs/Release.xcconfig b/examples/image_list/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000000000..dff4f49561c81 --- /dev/null +++ b/examples/image_list/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/examples/image_list/macos/Runner/Configs/Warnings.xcconfig b/examples/image_list/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000000000..42bcbf4780b18 --- /dev/null +++ b/examples/image_list/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/examples/image_list/macos/Runner/DebugProfile.entitlements b/examples/image_list/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000000000..dddb8a30c851e --- /dev/null +++ b/examples/image_list/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/examples/image_list/macos/Runner/Info.plist b/examples/image_list/macos/Runner/Info.plist new file mode 100644 index 0000000000000..4789daa6a443e --- /dev/null +++ b/examples/image_list/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/examples/image_list/macos/Runner/MainFlutterWindow.swift b/examples/image_list/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000000000..a97a96274ee93 --- /dev/null +++ b/examples/image_list/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,19 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/examples/image_list/macos/Runner/Release.entitlements b/examples/image_list/macos/Runner/Release.entitlements new file mode 100644 index 0000000000000..852fa1a4728ae --- /dev/null +++ b/examples/image_list/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + From 4a72c5345eca5540d1420019caf6217e638eeca5 Mon Sep 17 00:00:00 2001 From: Casey Hillers Date: Thu, 21 Apr 2022 12:49:08 -0700 Subject: [PATCH 011/141] [ci.yaml] Migrate bringup targets to cocoon scheduler (#102249) --- .ci.yaml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.ci.yaml b/.ci.yaml index eaee1eb4d8915..c8946b32847b9 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -1425,7 +1425,6 @@ targets: tags: > ["devicelab","android","linux"] task_name: android_semantics_integration_test - scheduler: luci - name: Linux_android android_stack_size_test recipe: devicelab/devicelab_drone @@ -2302,7 +2301,6 @@ targets: ] tags: > ["framework","hostonly"] - scheduler: luci timeout: 60 - name: Linux_android opacity_peephole_one_rect_perf__e2e_summary @@ -2383,7 +2381,6 @@ targets: tags: > ["devicelab","android","linux"] task_name: gradient_dynamic_perf__e2e_summary - scheduler: luci - name: Linux_android gradient_consistent_perf__e2e_summary bringup: true @@ -2394,7 +2391,6 @@ targets: tags: > ["devicelab","android","linux"] task_name: gradient_consistent_perf__e2e_summary - scheduler: luci - name: Linux_android gradient_static_perf__e2e_summary bringup: true @@ -2405,7 +2401,6 @@ targets: tags: > ["devicelab","android","linux"] task_name: gradient_static_perf__e2e_summary - scheduler: luci - name: Linux_android android_choreographer_do_frame_test recipe: devicelab/devicelab_drone @@ -2426,7 +2421,6 @@ targets: tags: > ["devicelab","android","linux"] task_name: android_lifecycles_test - scheduler: luci - name: Mac build_aar_module_test recipe: devicelab/devicelab_drone @@ -2908,7 +2902,6 @@ targets: tags: > ["framework","hostonly","shard"] test_timeout_secs: "2700" - scheduler: luci runIf: - dev/** - packages/flutter_tools/** @@ -3103,7 +3096,6 @@ targets: tags: > ["devicelab","android","mac"] task_name: entrypoint_dart_registrant - scheduler: luci runIf: - dev/** - packages/flutter_tools/** @@ -3344,7 +3336,6 @@ targets: tags: > ["devicelab","ios","mac"] task_name: flutter_view_ios__start_up - scheduler: luci - name: Mac_ios hello_world_ios__compile recipe: devicelab/devicelab_drone @@ -3477,7 +3468,6 @@ targets: tags: > ["devicelab","ios","mac"] task_name: large_image_changer_perf_ios - scheduler: luci - name: Mac_ios macos_chrome_dev_mode recipe: devicelab/devicelab_drone @@ -3508,7 +3498,6 @@ targets: tags: > ["devicelab","ios","mac"] task_name: new_gallery_ios__transition_perf - scheduler: luci - name: Mac_ios new_gallery_impeller_ios__transition_perf bringup: true # Flaky https://github.com/flutter/flutter/issues/96401 @@ -3519,7 +3508,6 @@ targets: tags: > ["devicelab","ios","mac"] task_name: new_gallery_impeller_ios__transition_perf - scheduler: luci - name: Mac_ios ios_picture_cache_complexity_scoring_perf__timeline_summary recipe: devicelab/devicelab_drone @@ -3620,7 +3608,6 @@ targets: tags: > ["devicelab","ios","mac"] task_name: hot_mode_dev_cycle_ios__benchmark - scheduler: luci - name: Mac_ios tiles_scroll_perf_ios__timeline_summary recipe: devicelab/devicelab_drone @@ -3640,7 +3627,6 @@ targets: tags: > ["devicelab","ios","mac"] task_name: native_ui_tests_ios - scheduler: luci - name: Mac native_ui_tests_macos recipe: devicelab/devicelab_drone From 900e5405c223e9983f644d237467e18cda0a51f5 Mon Sep 17 00:00:00 2001 From: Taha Tesser Date: Thu, 21 Apr 2022 22:59:07 +0300 Subject: [PATCH 012/141] Replace `ListTile` with `Chip` in the `debugCheckHasMaterial control test` (#102311) --- packages/flutter/test/material/debug_test.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/flutter/test/material/debug_test.dart b/packages/flutter/test/material/debug_test.dart index 37628bb8c17a7..46f9e61b37fd9 100644 --- a/packages/flutter/test/material/debug_test.dart +++ b/packages/flutter/test/material/debug_test.dart @@ -8,7 +8,7 @@ import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('debugCheckHasMaterial control test', (WidgetTester tester) async { - await tester.pumpWidget(const ListTile()); + await tester.pumpWidget(const Chip(label: Text('label'))); final dynamic exception = tester.takeException(); expect(exception, isFlutterError); final FlutterError error = exception as FlutterError; @@ -28,7 +28,7 @@ void main() { error.toStringDeep(), 'FlutterError\n' ' No Material widget found.\n' - ' ListTile widgets require a Material widget ancestor.\n' + ' Chip widgets require a Material widget ancestor.\n' ' In material design, most widgets are conceptually "printed" on a\n' " sheet of material. In Flutter's material library, that material\n" ' is represented by the Material widget. It is the Material widget\n' @@ -39,7 +39,7 @@ void main() { ' one, or use a widget that contains Material itself, such as a\n' ' Card, Dialog, Drawer, or Scaffold.\n' ' The specific widget that could not find a Material ancestor was:\n' - ' ListTile\n' + ' Chip\n' ' The ancestors of this widget were:\n' ' [root]\n', ); From b63689de691a77679687dc419346a88b12536b38 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 21 Apr 2022 16:09:07 -0400 Subject: [PATCH 013/141] Roll Engine from 701e5e8f44ac to 1cb7af579661 (1 revision) (#102322) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 6b14862e5a17e..05562aaa5ad50 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -701e5e8f44acea0c556adda5c84d1b877096c0b4 +1cb7af579661d2910ee5423ae2091e36836a7b84 diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index 00c4bf56d3a74..2f79426f55bb4 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -p0aZoDAqDDEeIK9bKWRhrH1nXxArDPLqvfGHm4vMVFkC +zjqxHaj1c_wYG8bqwUhNinmx-_aZ-_dL7nyLd8SGKGcC From 06314a073dfdd844e42471259dfaaecad998e97e Mon Sep 17 00:00:00 2001 From: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com> Date: Thu, 21 Apr 2022 13:14:10 -0700 Subject: [PATCH 014/141] Put `waitFor` back in keyboard_textfield_test integration test (#102315) --- .../ui/lib/keyboard_textfield.dart | 7 +++---- .../test_driver/keyboard_textfield_test.dart | 21 ++++--------------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/dev/integration_tests/ui/lib/keyboard_textfield.dart b/dev/integration_tests/ui/lib/keyboard_textfield.dart index 4917657c6036a..0f9268a6fe289 100644 --- a/dev/integration_tests/ui/lib/keyboard_textfield.dart +++ b/dev/integration_tests/ui/lib/keyboard_textfield.dart @@ -62,11 +62,10 @@ class _MyHomePageState extends State { Text('$offset', key: const ValueKey(keys.kOffsetText), ), - Text( - isSoftKeyboardVisible ? 'keyboard visible' : 'keyboard hidden', - key: const ValueKey(keys.kKeyboardVisibleView), + if (isSoftKeyboardVisible) const Text( + 'keyboard visible', + key: ValueKey(keys.kKeyboardVisibleView), ), - const ElevatedButton(onPressed: debugDumpApp, child: Text('dump app')), Expanded( child: ListView( key: const ValueKey(keys.kListView), diff --git a/dev/integration_tests/ui/test_driver/keyboard_textfield_test.dart b/dev/integration_tests/ui/test_driver/keyboard_textfield_test.dart index d8353873cc18e..286fc396b1d50 100644 --- a/dev/integration_tests/ui/test_driver/keyboard_textfield_test.dart +++ b/dev/integration_tests/ui/test_driver/keyboard_textfield_test.dart @@ -40,23 +40,10 @@ void main() { // Bring up keyboard await driver.tap(textFieldFinder); - const int keyboardTimeout = 3; - bool keyboardVisible = false; - for (int i = 0; i < keyboardTimeout; i++) { - await Future.delayed(const Duration(seconds: 1)); - final String keyboardVisibilityText = await driver.getText(keyboardVisibilityIndicatorFinder); - keyboardVisible = keyboardVisibilityText == 'keyboard visible'; - if (keyboardVisible) { - break; - } - } - - if (!keyboardVisible) { - await driver.tap(find.text('dump app')); - } - - // TODO(jmagman): Remove timeout once flake has been diagnosed. https://github.com/flutter/flutter/issues/96787 - expect(keyboardVisible, isTrue); + // The blinking cursor may have animation. Do not wait for it to finish. + await driver.runUnsynchronized(() async { + await driver.waitFor(keyboardVisibilityIndicatorFinder); + }); // Ensure that TextField is visible again await driver.waitFor(textFieldFinder); From 242ad0f730dc35eded0bc106daabbbeebd53420d Mon Sep 17 00:00:00 2001 From: keyonghan <54558023+keyonghan@users.noreply.github.com> Date: Thu, 21 Apr 2022 13:24:07 -0700 Subject: [PATCH 015/141] Enable DeviceLab arm64 ios tests as `bringup: true` (#102089) --- .ci.yaml | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) diff --git a/.ci.yaml b/.ci.yaml index c8946b32847b9..4a22bf4e12304 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -131,6 +131,29 @@ platform_properties: cpu: x86 device_os: iOS-15.1 xcode: 13a233 + mac_arm64_ios: + properties: + caches: >- + [ + {"name":"builder_mac_devicelab","path":"builder"}, + {"name":"chrome_and_driver_96","path":"chrome"}, + {"name":"flutter_sdk","path":"flutter sdk"}, + {"name":"gradle","path":"gradle"}, + {"name":"openjdk","path":"java11"}, + {"name":"pub_cache","path":".pub-cache"}, + {"name":"xcode_binary","path":"xcode_binary"}, + {"name":"osx_sdk_13a233","path":"osx_sdk"} + ] + dependencies: >- + [ + {"dependency": "xcode"}, + {"dependency": "gems"}, + {"dependency": "apple_signing"} + ] + os: Mac-12 + cpu: arm64 + device_os: iOS-15.1 + xcode: 13a233 windows: properties: caches: >- @@ -2472,6 +2495,22 @@ targets: - bin/** - .ci.yaml + - name: Mac_arm64_ios build_ios_framework_module_test + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: build_ios_framework_module_test + runIf: + - dev/** + - packages/flutter_tools/** + - bin/** + - .ci.yaml + scheduler: luci + - name: Mac build_tests_1_4 recipe: flutter/flutter_drone timeout: 60 @@ -3318,6 +3357,17 @@ targets: task_name: flutter_gallery_ios__compile scheduler: luci + - name: Mac_arm64_ios flutter_gallery_ios__compile + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: flutter_gallery_ios__compile + scheduler: luci + - name: Mac_ios flutter_gallery_ios__start_up recipe: devicelab/devicelab_drone presubmit: false @@ -3347,6 +3397,17 @@ targets: task_name: hello_world_ios__compile scheduler: luci + - name: Mac_arm64_ios hello_world_ios__compile + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: hello_world_ios__compile + scheduler: luci + - name: Mac_ios hot_mode_dev_cycle_macos_target__benchmark recipe: devicelab/devicelab_drone timeout: 60 @@ -3359,6 +3420,19 @@ targets: - .ci.yaml scheduler: luci + - name: Mac_arm64_ios hot_mode_dev_cycle_macos_target__benchmark + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: hot_mode_dev_cycle_macos_target__benchmark + runIf: + - dev/** + scheduler: luci + - name: Mac_ios integration_test_test_ios recipe: devicelab/devicelab_drone presubmit: false @@ -3429,6 +3503,17 @@ targets: task_name: ios_app_with_extensions_test scheduler: luci + - name: Mac_arm64_ios ios_app_with_extensions_test + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: ios_app_with_extensions_test + scheduler: luci + - name: Mac_ios ios_content_validation_test recipe: devicelab/devicelab_drone presubmit: false @@ -3439,6 +3524,17 @@ targets: task_name: ios_content_validation_test scheduler: luci + - name: Mac_arm64_ios ios_content_validation_test + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: ios_content_validation_test + scheduler: luci + - name: Mac_ios ios_defines_test recipe: devicelab/devicelab_drone presubmit: false @@ -3479,6 +3575,17 @@ targets: task_name: macos_chrome_dev_mode scheduler: luci + - name: Mac_arm64_ios macos_chrome_dev_mode + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: macos_chrome_dev_mode + scheduler: luci + - name: Mac_ios microbenchmarks_ios recipe: devicelab/devicelab_drone presubmit: false @@ -3628,6 +3735,17 @@ targets: ["devicelab","ios","mac"] task_name: native_ui_tests_ios + - name: Mac_arm64_ios native_ui_tests_ios + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: native_ui_tests_ios + scheduler: luci + - name: Mac native_ui_tests_macos recipe: devicelab/devicelab_drone timeout: 60 @@ -3666,6 +3784,22 @@ targets: - .ci.yaml scheduler: luci + - name: Mac_arm64_ios run_release_test_macos + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: run_release_test_macos + runIf: + - dev/** + - packages/flutter_tools/** + - bin/** + - .ci.yaml + scheduler: luci + - name: Windows build_aar_module_test bringup: true # Flaky https://github.com/flutter/flutter/issues/102226 recipe: devicelab/devicelab_drone From 0cbd6231e4e5411ac7c021cf685a1025ec507a17 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 21 Apr 2022 17:14:06 -0400 Subject: [PATCH 016/141] Roll Engine from 1cb7af579661 to 4f05631a710a (1 revision) (#102326) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 05562aaa5ad50..63e2cfb1eed9a 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -1cb7af579661d2910ee5423ae2091e36836a7b84 +4f05631a710ab707ab252b34695446bd2a2ad244 From 4ca94ab2fcd04012ef9e64463270bcfb69b3ce3f Mon Sep 17 00:00:00 2001 From: Emmanuel Garcia Date: Thu, 21 Apr 2022 15:24:09 -0700 Subject: [PATCH 017/141] Remove build_aar_module_test from devicelab tests (#102329) --- .ci.yaml | 78 -------------------------------------------------------- 1 file changed, 78 deletions(-) diff --git a/.ci.yaml b/.ci.yaml index 4a22bf4e12304..41ec45cd947fa 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -205,32 +205,6 @@ targets: validation_name: Analyze scheduler: luci - - name: Linux build_aar_module_test - recipe: devicelab/devicelab_drone - timeout: 60 - properties: - add_recipes_cq: "true" - caches: >- - [ - {"name":"gradle","path":"gradle"}, - {"name": "openjdk_11", "path": "java"} - ] - dependencies: >- - [ - {"dependency": "android_sdk", "version": "version:31v8"}, - {"dependency": "chrome_and_driver", "version": "version:96.2"}, - {"dependency": "open_jdk", "version": "11"} - ] - tags: > - ["devicelab","hostonly"] - task_name: build_aar_module_test - scheduler: luci - runIf: - - dev/** - - packages/flutter_tools/** - - bin/** - - .ci.yaml - - name: Linux build_tests_1_2 recipe: flutter/flutter_drone timeout: 60 @@ -2445,31 +2419,6 @@ targets: ["devicelab","android","linux"] task_name: android_lifecycles_test - - name: Mac build_aar_module_test - recipe: devicelab/devicelab_drone - timeout: 60 - properties: - add_recipes_cq: "true" - caches: >- - [ - {"name":"gradle", "path":"gradle"}, - {"name": "openjdk_11", "path": "java"} - ] - dependencies: >- - [ - {"dependency": "android_sdk", "version": "version:31v8"}, - {"dependency": "open_jdk", "version": "11"} - ] - tags: > - ["devicelab","hostonly"] - task_name: build_aar_module_test - runIf: - - dev/** - - packages/flutter_tools/** - - bin/** - - .ci.yaml - scheduler: luci - - name: Mac build_ios_framework_module_test recipe: devicelab/devicelab_drone timeout: 60 @@ -3800,33 +3749,6 @@ targets: - .ci.yaml scheduler: luci - - name: Windows build_aar_module_test - bringup: true # Flaky https://github.com/flutter/flutter/issues/102226 - recipe: devicelab/devicelab_drone - timeout: 60 - properties: - add_recipes_cq: "true" - caches: >- - [ - {"name":"gradle","path":"gradle"}, - {"name": "openjdk_11", "path": "java"} - ] - dependencies: >- - [ - {"dependency": "android_sdk", "version": "version:31v8"}, - {"dependency": "chrome_and_driver", "version": "version:96.2"}, - {"dependency": "open_jdk", "version": "11"} - ] - tags: > - ["devicelab","hostonly"] - task_name: build_aar_module_test - scheduler: luci - runIf: - - dev/** - - packages/flutter_tools/** - - bin/** - - .ci.yaml - - name: Windows build_tests_1_3 recipe: flutter/flutter_drone timeout: 60 From c73100bfaec52f48eaa4662c5fa60adfb2fb9cbf Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Thu, 21 Apr 2022 15:39:07 -0700 Subject: [PATCH 018/141] Fix the code point for CupertinoIcons.location (#101923) --- packages/flutter/lib/src/cupertino/icons.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/cupertino/icons.dart b/packages/flutter/lib/src/cupertino/icons.dart index d214511b3a382..fd02f2350fcf9 100644 --- a/packages/flutter/lib/src/cupertino/icons.dart +++ b/packages/flutter/lib/src/cupertino/icons.dart @@ -912,7 +912,7 @@ class CupertinoIcons { static const IconData mail_solid = IconData(0xf423, fontFamily: iconFont, fontPackage: iconFontPackage); /// location — Cupertino icon for a location pin. - static const IconData location = IconData(0xf455, fontFamily: iconFont, fontPackage: iconFontPackage); + static const IconData location = IconData(0xf6ee, fontFamily: iconFont, fontPackage: iconFontPackage); /// placemark_fill — Cupertino icon for a location pin. This icon is filled in. /// This is the same icon as [placemark_fill] in cupertino_icons 1.0.0+. From c9825d24dd8a624c9720d24a4af4753e5d468b79 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Thu, 21 Apr 2022 15:49:08 -0700 Subject: [PATCH 019/141] Handle CocoaPods ffi stderr (#102327) --- packages/flutter_tools/lib/src/macos/cocoapods.dart | 7 ++++--- .../test/general.shard/macos/cocoapods_test.dart | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/flutter_tools/lib/src/macos/cocoapods.dart b/packages/flutter_tools/lib/src/macos/cocoapods.dart index a471e36b1fbf3..26365b6a46425 100644 --- a/packages/flutter_tools/lib/src/macos/cocoapods.dart +++ b/packages/flutter_tools/lib/src/macos/cocoapods.dart @@ -349,10 +349,11 @@ class CocoaPods { } void _diagnosePodInstallFailure(ProcessResult result) { - if (result.stdout is! String) { + final Object? stdout = result.stdout; + final Object? stderr = result.stderr; + if (stdout is! String || stderr is! String) { return; } - final String stdout = result.stdout as String; if (stdout.contains('out-of-date source repos')) { _logger.printError( "Error: CocoaPods's specs repository is too out-of-date to satisfy dependencies.\n" @@ -360,7 +361,7 @@ class CocoaPods { ' pod repo update\n', emphasis: true, ); - } else if ((stdout.contains('ffi_c.bundle') || stdout.contains('/ffi/')) && + } else if ((stderr.contains('ffi_c.bundle') || stderr.contains('/ffi/')) && _operatingSystemUtils.hostPlatform == HostPlatform.darwin_arm) { // https://github.com/flutter/flutter/issues/70796 UsageEvent( diff --git a/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart b/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart index e5554ba2466eb..81139a64730c0 100644 --- a/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart +++ b/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart @@ -514,7 +514,7 @@ Note: as of CocoaPods 1.0, `pod repo update` does not happen on `pod install` by 'LANG': 'en_US.UTF-8', }, exitCode: 1, - stdout: cocoaPodsError, + stderr: cocoaPodsError, ), const FakeCommand( command: ['which', 'sysctl'], From 512cbdb9da883cc59013ef3363a62beb7d2a6e3c Mon Sep 17 00:00:00 2001 From: Kaushik Iska Date: Thu, 21 Apr 2022 18:54:13 -0400 Subject: [PATCH 020/141] Enable jank metric collection in profile mode (#102334) --- packages/flutter_tools/lib/src/resident_runner.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index 419c1953a0c79..d303e639a60db 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart @@ -682,7 +682,7 @@ abstract class ResidentHandlers { /// use case is to look at the various layers in proportion to see what /// contributes the most towards raster performance. Future debugFrameJankMetrics() async { - if (!supportsServiceProtocol || !isRunningDebug) { + if (!supportsServiceProtocol) { return false; } for (final FlutterDevice device in flutterDevices) { From 570e23e94944fcc90d60e95ffbc10b2fe45b4a3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Apr 2022 15:59:07 -0700 Subject: [PATCH 021/141] Bump actions/checkout from 3.0.1 to 3.0.2 (#102337) --- .github/workflows/scorecards-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index a00102e3287e6..e4a0f5407ebb7 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -21,7 +21,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@dcd71f646680f2efd8db4afa5ad64fdcba30e748 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b with: persist-credentials: false From b7abece9cd44b45aafb32dc9442ae022ff06f9f7 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 21 Apr 2022 19:24:09 -0400 Subject: [PATCH 022/141] Roll Engine from 4f05631a710a to 238eb9d7f55f (5 revisions) (#102340) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 63e2cfb1eed9a..a5a46c41584e6 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -4f05631a710ab707ab252b34695446bd2a2ad244 +238eb9d7f55f0ca24d2a1e706b02109ef76844cf From b8dfe0d80c4c16f605f08015ee39c769f1c57e6c Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 21 Apr 2022 20:29:06 -0400 Subject: [PATCH 023/141] Roll Engine from 238eb9d7f55f to 1b10b146cf7c (2 revisions) (#102344) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index a5a46c41584e6..8c2f99063d593 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -238eb9d7f55f0ca24d2a1e706b02109ef76844cf +1b10b146cf7c73cf4e543e6762e479eb1b023f1e diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index 75b80067c63bd..979c9a5d493ed 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -9g8p_giFbkP4781dwqfOd3BTojVaMQTirYYfd07wLLEC +CQEP7X2HznO3K8CVIYx6C3TYvcIcymV0QfthRNJ01zMC From 9a3806bd0877b2a9fdcfa2c8b869f8631244a98f Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 21 Apr 2022 21:44:03 -0400 Subject: [PATCH 024/141] Roll Engine from 1b10b146cf7c to bcd35000ed99 (1 revision) (#102345) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 8c2f99063d593..ac6ccf83deb75 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -1b10b146cf7c73cf4e543e6762e479eb1b023f1e +bcd35000ed997ad7fa52f5f45b525567f880b755 From 0d9c51c7329fb7aefdae55b6d054053329b8aa3a Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 21 Apr 2022 22:49:07 -0400 Subject: [PATCH 025/141] Roll Engine from bcd35000ed99 to c6ea046c2cda (3 revisions) (#102347) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index ac6ccf83deb75..0529b874e6588 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -bcd35000ed997ad7fa52f5f45b525567f880b755 +c6ea046c2cdaf3fb2428b31108eae3c3b1174e6e From a91ad0052f5ee88e788bac094856b772c754484f Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 00:34:06 -0400 Subject: [PATCH 026/141] Roll Engine from c6ea046c2cda to d4158760408d (1 revision) (#102349) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 0529b874e6588..f8a7b3b3715bb 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -c6ea046c2cdaf3fb2428b31108eae3c3b1174e6e +d4158760408d01db8d0b5f924bd8b8c3411f822a From 0a36b53551c49b2fb302f20e3424b9d68c50ed17 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 05:09:07 -0400 Subject: [PATCH 027/141] Roll Engine from d4158760408d to e96c75676ee5 (2 revisions) (#102354) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index f8a7b3b3715bb..e15fe8a7abab2 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -d4158760408d01db8d0b5f924bd8b8c3411f822a +e96c75676ee56c039ea136c9f70328e14fd08b9d diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index 2f79426f55bb4..b730a98fb7298 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -zjqxHaj1c_wYG8bqwUhNinmx-_aZ-_dL7nyLd8SGKGcC +sTvRmqTst61TllIcWosYZZBa5b7Qa9aFlu65kBU-FSkC From fde7622f7e0ab915ce19bd49a8ead5707141df6a Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 06:14:07 -0400 Subject: [PATCH 028/141] Roll Engine from e96c75676ee5 to 2d7fcf4e36eb (1 revision) (#102359) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index e15fe8a7abab2..39a05e18da3c3 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -e96c75676ee56c039ea136c9f70328e14fd08b9d +2d7fcf4e36ebaea10bd9c471644389e69c423b12 From ad652a665900e7b45037b1e525845e862853700c Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 09:14:07 -0400 Subject: [PATCH 029/141] Roll Engine from 2d7fcf4e36eb to 0a88671c35f6 (2 revisions) (#102371) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 39a05e18da3c3..3586d7224104f 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -2d7fcf4e36ebaea10bd9c471644389e69c423b12 +0a88671c35f6974db605d3a9cae9422d21fb0290 diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index 979c9a5d493ed..e061e1f5d8a25 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -CQEP7X2HznO3K8CVIYx6C3TYvcIcymV0QfthRNJ01zMC +2URwvdZiLGMKsnYKqGCtPo6Vw4fiUnRuEp4OayAc0PQC From e2f4e80ce5cc5143d6455e727163d0b8e6117993 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 11:04:07 -0400 Subject: [PATCH 030/141] Roll Engine from 0a88671c35f6 to d9b3a550a75a (1 revision) (#102375) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 3586d7224104f..61092f8a2d77c 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -0a88671c35f6974db605d3a9cae9422d21fb0290 +d9b3a550a75a4db522c06324a8c5a61a18d49f30 From 03c93640b4ed82a984cbbfcf959918d35b68ed11 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 12:04:08 -0400 Subject: [PATCH 031/141] Roll Plugins from 5c3c1b8aac06 to ca63d964d9fd (10 revisions) (#102379) --- bin/internal/flutter_plugins.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/flutter_plugins.version b/bin/internal/flutter_plugins.version index a083a54bc9ded..8915d67171ac0 100644 --- a/bin/internal/flutter_plugins.version +++ b/bin/internal/flutter_plugins.version @@ -1 +1 @@ -5c3c1b8aac065aa1988f114d0c66ecec758e9cbb +ca63d964d9fdfff9be36533ea4248d0d0ca28fd0 From e2dc2c821ff82a75e7da339ab981062fe48d46b4 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 12:49:07 -0400 Subject: [PATCH 032/141] Roll Engine from d9b3a550a75a to 587bca0454bc (1 revision) (#102380) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 61092f8a2d77c..6a6d1270bb87c 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -d9b3a550a75a4db522c06324a8c5a61a18d49f30 +587bca0454bcc9858cff709e31a2392d4b6aa3b7 From f4de048ff88bf227f8857bb9b5c899712344e220 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 14:19:07 -0400 Subject: [PATCH 033/141] Roll Engine from 587bca0454bc to 4350d117406d (1 revision) (#102386) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 6a6d1270bb87c..4392f29bf9dcc 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -587bca0454bcc9858cff709e31a2392d4b6aa3b7 +4350d117406dbb1dc1dcfcd117292176de3169de From ca3b406c44138b547b0e7ee7ac516722a66a5135 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 15:39:06 -0400 Subject: [PATCH 034/141] Roll Engine from 4350d117406d to ad6976c4d1db (1 revision) (#102394) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 4392f29bf9dcc..4a3a032579e91 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -4350d117406dbb1dc1dcfcd117292176de3169de +ad6976c4d1db068d6462733516c89837a4958042 From 5414ef4c86ba014568bafd721a30cb3e5cfb9b96 Mon Sep 17 00:00:00 2001 From: "Elliott Brooks (she/her)" <21270878+elliette@users.noreply.github.com> Date: Fri, 22 Apr 2022 12:43:39 -0700 Subject: [PATCH 035/141] Hide unresolved DartUri log messages (#102338) --- .../flutter_tools/lib/src/isolated/devfs_web.dart | 10 ++++++++++ .../test/web.shard/output_web_test.dart | 14 ++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/packages/flutter_tools/lib/src/isolated/devfs_web.dart b/packages/flutter_tools/lib/src/isolated/devfs_web.dart index 8b6f22b78703d..8a833129bba9e 100644 --- a/packages/flutter_tools/lib/src/isolated/devfs_web.dart +++ b/packages/flutter_tools/lib/src/isolated/devfs_web.dart @@ -1009,6 +1009,16 @@ void _log(logging.LogRecord event) { if (event.level >= logging.Level.SEVERE) { globals.printError('${event.loggerName}: ${event.message}$error', stackTrace: event.stackTrace); } else if (event.level == logging.Level.WARNING) { + // TODO(elliette): Remove the following message suppressions after DWDS is + // >13.1.0, https://github.com/flutter/flutter/issues/101639 + const String dartUri = 'DartUri'; + if (event.loggerName == dartUri) { + const String webSqlWarning = 'Unresolved uri: dart:web_sql'; + const String uiWarning = 'Unresolved uri: dart:ui'; + if (event.message == webSqlWarning || event.message == uiWarning) { + return; + } + } globals.printWarning('${event.loggerName}: ${event.message}$error'); } else { globals.printTrace('${event.loggerName}: ${event.message}$error'); diff --git a/packages/flutter_tools/test/web.shard/output_web_test.dart b/packages/flutter_tools/test/web.shard/output_web_test.dart index a689088ab0dcf..bcb4b7473a703 100644 --- a/packages/flutter_tools/test/web.shard/output_web_test.dart +++ b/packages/flutter_tools/test/web.shard/output_web_test.dart @@ -78,4 +78,18 @@ void main() { await sendEvent({'type': 'DevtoolsEvent'}); await warning; }, skip: true); // Skipping for 'https://github.com/dart-lang/webdev/issues/1562' + + testWithoutContext( + 'flutter run output skips DartUri warning messages from dwds', () async { + bool containsDartUriWarning = false; + flutter.stderr.listen((String msg) { + if (msg.contains('DartUri')) { + containsDartUriWarning = true; + } + }); + await start(); + await flutter.stop(); + expect(containsDartUriWarning, isFalse); + // TODO(elliette): Enable for DWDS >13.1.0, https://github.com/flutter/flutter/issues/101639 + }, skip: true); // [intended] enable for DWDS >13.1.0 } From dc51dfe61ebb6e0f7f96e7fca0e7c2cf0719706f Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 16:44:07 -0400 Subject: [PATCH 036/141] Roll Engine from ad6976c4d1db to 061fb1d74a9f (1 revision) (#102397) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 4a3a032579e91..38295d2cb2ed7 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -ad6976c4d1db068d6462733516c89837a4958042 +061fb1d74a9fd0d738de02442f4a9c4d94e00a6b From 1ba573b758dc384a2738384c7f83853bc11308ad Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 17:49:06 -0400 Subject: [PATCH 037/141] Roll Engine from 061fb1d74a9f to 0da451d25cf8 (1 revision) (#102400) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 38295d2cb2ed7..0d7243973c386 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -061fb1d74a9fd0d738de02442f4a9c4d94e00a6b +0da451d25cf84a1336ad32028427873bc3e87c70 From 6ea4aef827cefff2f088dae8abd4f762271d2ff0 Mon Sep 17 00:00:00 2001 From: rgevrek Date: Sat, 23 Apr 2022 00:19:06 +0200 Subject: [PATCH 038/141] Fix jumping when doing long press for selecting text (#102270) --- .../lib/src/widgets/editable_text.dart | 5 ++ .../test/widgets/editable_text_test.dart | 47 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/packages/flutter/lib/src/widgets/editable_text.dart b/packages/flutter/lib/src/widgets/editable_text.dart index 8e477b4032cb7..be622d5ba3bda 100644 --- a/packages/flutter/lib/src/widgets/editable_text.dart +++ b/packages/flutter/lib/src/widgets/editable_text.dart @@ -2514,6 +2514,11 @@ class EditableTextState extends State with AutomaticKeepAliveClien _showCaretOnScreenScheduled = true; SchedulerBinding.instance.addPostFrameCallback((Duration _) { _showCaretOnScreenScheduled = false; + + // if cursor is inactive, e.g. while selecting text, do not jump away + if (!_cursorActive) { + return; + } if (_currentCaretRect == null || !_scrollController.hasClients) { return; } diff --git a/packages/flutter/test/widgets/editable_text_test.dart b/packages/flutter/test/widgets/editable_text_test.dart index c13aecb79da75..4b0226ebb82fe 100644 --- a/packages/flutter/test/widgets/editable_text_test.dart +++ b/packages/flutter/test/widgets/editable_text_test.dart @@ -5183,6 +5183,53 @@ void main() { // toolbar. Until we change that, this test should remain skipped. }, skip: kIsWeb); // [intended] + + testWidgets('text selection handle visibility for long text', (WidgetTester tester) async { + // long text which is scrollable based on given box size + const String testText = + 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.'; + final TextEditingController controller = + TextEditingController(text: testText); + final ScrollController scrollController = ScrollController(); + + await tester.pumpWidget(MaterialApp( + home: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 100, + height: 100, + child: SingleChildScrollView( + controller: scrollController, + child: EditableText( + controller: controller, + showSelectionHandles: true, + focusNode: FocusNode(), + style: Typography.material2018().black.subtitle1!, + cursorColor: Colors.blue, + backgroundCursorColor: Colors.grey, + selectionControls: materialTextSelectionControls, + keyboardType: TextInputType.multiline, + maxLines: null, + ), + ), + ), + ), + )); + + // scroll to a text that is outside of the inital visible rect + scrollController.jumpTo(151); + await tester.pump(); + + // long press on a word to trigger a select + await tester.longPressAt(const Offset(20, 15)); + // wait for adjustments of scroll area + await tester.pump(); + await tester.pumpAndSettle(); + + // assert not jumped to top + expect(scrollController.offset, equals(151)); + }); + const String testText = 'Now is the time for\n' // 20 'all good people\n' // 20 + 16 => 36 'to come to the aid\n' // 36 + 19 => 55 From a3a9a23e46f32f8ec0b2191cd969188a70a5af5f Mon Sep 17 00:00:00 2001 From: Daniel Cardona Rojas Date: Fri, 22 Apr 2022 17:24:10 -0500 Subject: [PATCH 039/141] Add matcher to find at least a given number of widgets (#102081) (#102342) --- packages/flutter_test/lib/src/matchers.dart | 20 +++++++++++ packages/flutter_test/test/matchers_test.dart | 36 +++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/packages/flutter_test/lib/src/matchers.dart b/packages/flutter_test/lib/src/matchers.dart index 338e5bcaf1860..5434b0be538fe 100644 --- a/packages/flutter_test/lib/src/matchers.dart +++ b/packages/flutter_test/lib/src/matchers.dart @@ -37,6 +37,7 @@ import 'widget_tester.dart' show WidgetTester; /// * [findsWidgets], when you want the finder to find one or more widgets. /// * [findsOneWidget], when you want the finder to find exactly one widget. /// * [findsNWidgets], when you want the finder to find a specific number of widgets. +/// * [findsAtLeastNWidgets], when you want the finder to find at least a specific number of widgets. const Matcher findsNothing = _FindsWidgetMatcher(null, 0); /// Asserts that the [Finder] locates at least one widget in the widget tree. @@ -52,6 +53,7 @@ const Matcher findsNothing = _FindsWidgetMatcher(null, 0); /// * [findsNothing], when you want the finder to not find anything. /// * [findsOneWidget], when you want the finder to find exactly one widget. /// * [findsNWidgets], when you want the finder to find a specific number of widgets. +/// * [findsAtLeastNWidgets], when you want the finder to find at least a specific number of widgets. const Matcher findsWidgets = _FindsWidgetMatcher(1, null); /// Asserts that the [Finder] locates at exactly one widget in the widget tree. @@ -67,6 +69,7 @@ const Matcher findsWidgets = _FindsWidgetMatcher(1, null); /// * [findsNothing], when you want the finder to not find anything. /// * [findsWidgets], when you want the finder to find one or more widgets. /// * [findsNWidgets], when you want the finder to find a specific number of widgets. +/// * [findsAtLeastNWidgets], when you want the finder to find at least a specific number of widgets. const Matcher findsOneWidget = _FindsWidgetMatcher(1, 1); /// Asserts that the [Finder] locates the specified number of widgets in the widget tree. @@ -82,8 +85,25 @@ const Matcher findsOneWidget = _FindsWidgetMatcher(1, 1); /// * [findsNothing], when you want the finder to not find anything. /// * [findsWidgets], when you want the finder to find one or more widgets. /// * [findsOneWidget], when you want the finder to find exactly one widget. +/// * [findsAtLeastNWidgets], when you want the finder to find at least a specific number of widgets. Matcher findsNWidgets(int n) => _FindsWidgetMatcher(n, n); +/// Asserts that the [Finder] locates at least a number of widgets in the widget tree. +/// +/// ## Sample code +/// +/// ```dart +/// expect(find.text('Save'), findsAtLeastNWidgets(2)); +/// ``` +/// +/// See also: +/// +/// * [findsNothing], when you want the finder to not find anything. +/// * [findsWidgets], when you want the finder to find one or more widgets. +/// * [findsOneWidget], when you want the finder to find exactly one widget. +/// * [findsNWidgets], when you want the finder to find a specific number of widgets. +Matcher findsAtLeastNWidgets(int n) => _FindsWidgetMatcher(n, null); + /// Asserts that the [Finder] locates a single widget that has at /// least one [Offstage] widget ancestor. /// diff --git a/packages/flutter_test/test/matchers_test.dart b/packages/flutter_test/test/matchers_test.dart index 4632aba6fc4ea..2477313a06484 100644 --- a/packages/flutter_test/test/matchers_test.dart +++ b/packages/flutter_test/test/matchers_test.dart @@ -674,6 +674,42 @@ void main() { handle.dispose(); }); }); + + group('findsAtLeastNWidgets', () { + Widget boilerplate(Widget child) { + return Directionality( + textDirection: TextDirection.ltr, + child: child, + ); + } + + testWidgets('succeeds when finds more then the specified count', + (WidgetTester tester) async { + await tester.pumpWidget(boilerplate(Column( + children: const [Text('1'), Text('2'), Text('3')], + ))); + + expect(find.byType(Text), findsAtLeastNWidgets(2)); + }); + + testWidgets('succeeds when finds the exact specified count', + (WidgetTester tester) async { + await tester.pumpWidget(boilerplate(Column( + children: const [Text('1'), Text('2')], + ))); + + expect(find.byType(Text), findsAtLeastNWidgets(2)); + }); + + testWidgets('fails when finds less then specified count', + (WidgetTester tester) async { + await tester.pumpWidget(boilerplate(Column( + children: const [Text('1'), Text('2')], + ))); + + expect(find.byType(Text), isNot(findsAtLeastNWidgets(3))); + }); + }); } enum _ComparatorBehavior { From 5a3e10047f841d910cd078d75040b16a44cf4fa1 Mon Sep 17 00:00:00 2001 From: Christopher Fujino Date: Fri, 22 Apr 2022 15:29:07 -0700 Subject: [PATCH 040/141] [flutter_tools] Add test that "Unresolve URI" warnings from DWDS are filtered from logs (#102399) --- .../lib/src/isolated/devfs_web.dart | 5 ++-- .../general.shard/web/devfs_web_test.dart | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/flutter_tools/lib/src/isolated/devfs_web.dart b/packages/flutter_tools/lib/src/isolated/devfs_web.dart index 8a833129bba9e..7539977abd3ed 100644 --- a/packages/flutter_tools/lib/src/isolated/devfs_web.dart +++ b/packages/flutter_tools/lib/src/isolated/devfs_web.dart @@ -275,7 +275,7 @@ class WebAssetServer implements AssetReader { } logging.Logger.root.level = logging.Level.ALL; - logging.Logger.root.onRecord.listen(_log); + logging.Logger.root.onRecord.listen(log); // In debug builds, spin up DWDS and the full asset server. final Dwds dwds = await dwdsLauncher( @@ -1004,7 +1004,8 @@ class ReleaseAssetServer { } } -void _log(logging.LogRecord event) { +@visibleForTesting +void log(logging.LogRecord event) { final String error = event.error == null? '': 'Error: ${event.error}'; if (event.level >= logging.Level.SEVERE) { globals.printError('${event.loggerName}: ${event.message}$error', stackTrace: event.stackTrace); diff --git a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart index 909258801c6ae..cc0f158caecc7 100644 --- a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart +++ b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart @@ -8,6 +8,7 @@ import 'dart:io' hide Directory, File; import 'package:flutter_tools/src/artifacts.dart'; import 'package:flutter_tools/src/base/file_system.dart'; +import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/build_info.dart'; import 'package:flutter_tools/src/build_system/targets/web.dart'; @@ -16,6 +17,7 @@ import 'package:flutter_tools/src/convert.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/devfs_web.dart'; import 'package:flutter_tools/src/web/compile.dart'; +import 'package:logging/logging.dart' as logging; import 'package:package_config/package_config.dart'; import 'package:shelf/shelf.dart'; import 'package:test/fake.dart'; @@ -39,6 +41,7 @@ void main() { PackageConfig packages; Platform windows; FakeHttpServer httpServer; + BufferLogger logger; setUpAll(() async { packages = PackageConfig([ @@ -50,6 +53,7 @@ void main() { httpServer = FakeHttpServer(); linux = FakePlatform(environment: {}); windows = FakePlatform(operatingSystem: 'windows', environment: {}); + logger = BufferLogger.test(); testbed = Testbed(setup: () { webAssetServer = WebAssetServer( httpServer, @@ -67,9 +71,35 @@ void main() { webBuildDirectory: null, basePath: null, ); + }, overrides: { + Logger: () => logger, }); }); + test('.log() filters events', () => testbed.run(() { + // harmless warning that should be filtered out + const String harmlessMessage = 'Unresolved uri: dart:ui'; + // serious warning + const String seriousMessage = 'Something bad happened'; + + final List events = [ + logging.LogRecord( + logging.Level.WARNING, + harmlessMessage, + 'DartUri', + ), + logging.LogRecord( + logging.Level.WARNING, + seriousMessage, + 'DartUri', + ), + ]; + + events.forEach(log); + expect(logger.warningText, contains(seriousMessage)); + expect(logger.warningText, isNot(contains(harmlessMessage))); + })); + test('Handles against malformed manifest', () => testbed.run(() async { final File source = globals.fs.file('source') ..writeAsStringSync('main() {}'); From 2c60d2c9152d6a64ff0383bf97e31d6e8b8e6a37 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 18:54:08 -0400 Subject: [PATCH 041/141] Roll Engine from 0da451d25cf8 to 7cb80a7964ef (2 revisions) (#102409) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 0d7243973c386..87e01678018ee 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -0da451d25cf84a1336ad32028427873bc3e87c70 +7cb80a7964ef5653330117ac1d78a2966833f5b3 diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index b730a98fb7298..cf04203131f41 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -sTvRmqTst61TllIcWosYZZBa5b7Qa9aFlu65kBU-FSkC +yRFArCwDi-2UHUxwQl6rk0ISTua4FobB84XwaUZFC7cC From e32dbbab43001166a05ab4fe65a939b9cbf205d0 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 19:59:04 -0400 Subject: [PATCH 042/141] Roll Engine from 7cb80a7964ef to 819ca4ec8cd5 (3 revisions) (#102411) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 87e01678018ee..91df8e962c837 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -7cb80a7964ef5653330117ac1d78a2966833f5b3 +819ca4ec8cd5cd4ad491f99b11418139a554ed5d From d25116921eb7fbccea74937abae0096fb92bfd04 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 22 Apr 2022 23:14:07 -0400 Subject: [PATCH 043/141] Roll Engine from 819ca4ec8cd5 to e9ebbb5575fb (4 revisions) (#102425) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 91df8e962c837..c8f88b72424b8 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -819ca4ec8cd5cd4ad491f99b11418139a554ed5d +e9ebbb5575fbd051835d3b5aaa1cb3017061bbc5 diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index e061e1f5d8a25..da77eae70092d 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -2URwvdZiLGMKsnYKqGCtPo6Vw4fiUnRuEp4OayAc0PQC +OOBEL73yb3wgbPPtZ_n599QLfJdr2snywov8_9Z39xUC From 751d9041fdb9973ab70db5e4c3668bb05d2475b6 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 23 Apr 2022 01:04:05 -0400 Subject: [PATCH 044/141] Roll Engine from e9ebbb5575fb to 49fe29e373d6 (2 revisions) (#102428) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index c8f88b72424b8..628c24cdd4ce1 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -e9ebbb5575fbd051835d3b5aaa1cb3017061bbc5 +49fe29e373d60e88e0931a96a3c0d307b007dcab From e3ec5a4843f2a6920b32aaa0c8d22da9cc801932 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 23 Apr 2022 07:09:06 -0400 Subject: [PATCH 045/141] Roll Engine from 49fe29e373d6 to f6725544f45e (1 revision) (#102437) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 628c24cdd4ce1..989df848d9c38 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -49fe29e373d60e88e0931a96a3c0d307b007dcab +f6725544f45eaacd9afc6893e1a6131f933ef17e diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index cf04203131f41..af4e48006f4c2 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -yRFArCwDi-2UHUxwQl6rk0ISTua4FobB84XwaUZFC7cC +uetob3LZ0XpTHKVP2YC9_9qv7AGxeV4vzHZS97O3HuwC From b3584f58fdeec971be9762d3dfe892ddb373a577 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 23 Apr 2022 08:14:04 -0400 Subject: [PATCH 046/141] Roll Engine from f6725544f45e to b4cc382cb26b (1 revision) (#102438) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 989df848d9c38..9a6a0868af8a7 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -f6725544f45eaacd9afc6893e1a6131f933ef17e +b4cc382cb26b3cf045a9b65e1c1e4178c47c77c1 From 02f081a708b74d94cd55ba2d9dc480256a8b0cc2 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 23 Apr 2022 14:14:03 -0400 Subject: [PATCH 047/141] Roll Engine from b4cc382cb26b to dbe5a764d952 (1 revision) (#102444) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 9a6a0868af8a7..56da0a4f2035a 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -b4cc382cb26b3cf045a9b65e1c1e4178c47c77c1 +dbe5a764d952269f3cb6fa417df8ddcde5371b4b From 6e3016952e0bb6a404848967fb0e27340360c920 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 23 Apr 2022 20:19:05 -0400 Subject: [PATCH 048/141] Roll Engine from dbe5a764d952 to cf3445791f6d (1 revision) (#102448) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 56da0a4f2035a..ab09f4d7dd92b 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -dbe5a764d952269f3cb6fa417df8ddcde5371b4b +cf3445791f6dfe933de80dcd9b1a0f84507fa479 diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index af4e48006f4c2..d96abea865cb7 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -uetob3LZ0XpTHKVP2YC9_9qv7AGxeV4vzHZS97O3HuwC +evOcilNU5vxsBmRd76GJmsc242eCvpreR2laiQqcyWEC From 32ddd039a19d4170b9e12448d865c350f0d8bbe7 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sun, 24 Apr 2022 03:09:06 -0400 Subject: [PATCH 049/141] Roll Engine from cf3445791f6d to f23d31c4755e (1 revision) (#102456) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index ab09f4d7dd92b..9a022aeafe5b7 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -cf3445791f6dfe933de80dcd9b1a0f84507fa479 +f23d31c4755e011f09fbf10f9dfe36659177b405 diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index da77eae70092d..e28798ca88b3e 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -OOBEL73yb3wgbPPtZ_n599QLfJdr2snywov8_9Z39xUC +O69VeGryOb6EViFsMEkeU7N55-TySLesPbOiWxqYvt8C From 641d6cd0b7665fd06b4fe8da02716c9f077fb56c Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sun, 24 Apr 2022 07:44:06 -0400 Subject: [PATCH 050/141] Roll Engine from f23d31c4755e to 0a924011e2f0 (1 revision) (#102461) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 9a022aeafe5b7..080210ca44f48 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -f23d31c4755e011f09fbf10f9dfe36659177b405 +0a924011e2f0e164ee09c3cc788869f3ece56493 From c654d04f119f9ff742170967c773c180b63a8d5f Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sun, 24 Apr 2022 09:19:05 -0400 Subject: [PATCH 051/141] Roll Engine from 0a924011e2f0 to 984b5b332bb2 (1 revision) (#102463) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 080210ca44f48..4c37debd0ca07 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -0a924011e2f0e164ee09c3cc788869f3ece56493 +984b5b332bb2afe50bd9654fc5b2a444e1c40771 diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index d96abea865cb7..c746e0630cd3b 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -evOcilNU5vxsBmRd76GJmsc242eCvpreR2laiQqcyWEC +UrnPgfhOYsXIu2DdQqzbUvLhk4ndYXYWo5rC63CLH3sC From dca58a289b0e8d1e8d118a55123329fd2e9d04ff Mon Sep 17 00:00:00 2001 From: Alex Li Date: Mon, 25 Apr 2022 02:04:06 +0800 Subject: [PATCH 052/141] [gen_l10n] Throw a specified exception when the language code is invalid (#102431) --- .../localizations/localizations_utils.dart | 12 +++++-- .../generate_localizations_test.dart | 33 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/packages/flutter_tools/lib/src/localizations/localizations_utils.dart b/packages/flutter_tools/lib/src/localizations/localizations_utils.dart index 3f482cf69c955..a8e413526670e 100644 --- a/packages/flutter_tools/lib/src/localizations/localizations_utils.dart +++ b/packages/flutter_tools/lib/src/localizations/localizations_utils.dart @@ -7,6 +7,7 @@ import 'package:yaml/yaml.dart'; import '../base/file_system.dart'; import '../base/logger.dart'; +import 'gen_l10n_types.dart'; import 'language_subtag_registry.dart'; typedef HeaderGenerator = String Function(String regenerateInstructions); @@ -215,8 +216,15 @@ void precacheLanguageAndRegionTags() { String describeLocale(String tag) { final List subtags = tag.split('_'); assert(subtags.isNotEmpty); - assert(_languages.containsKey(subtags[0])); - final String language = _languages[subtags[0]]!; + final String languageCode = subtags[0]; + if (!_languages.containsKey(languageCode)) { + throw L10nException( + '"$languageCode" is not a supported language code.\n' + 'See https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry ' + 'for the supported list.', + ); + } + final String language = _languages[languageCode]!; String output = language; String? region; String? script; diff --git a/packages/flutter_tools/test/general.shard/generate_localizations_test.dart b/packages/flutter_tools/test/general.shard/generate_localizations_test.dart index e850ca3fb4630..286c051d0f206 100644 --- a/packages/flutter_tools/test/general.shard/generate_localizations_test.dart +++ b/packages/flutter_tools/test/general.shard/generate_localizations_test.dart @@ -2595,6 +2595,39 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ); }); }); + + testWithoutContext('throws when the language code is not supported', () { + const String arbFileWithInvalidCode = ''' +{ + "@@locale": "invalid", + "title": "invalid" +}'''; + + final Directory l10nDirectory = fs.currentDirectory.childDirectory('lib').childDirectory('l10n') + ..createSync(recursive: true); + l10nDirectory.childFile('app_invalid.arb') + .writeAsStringSync(arbFileWithInvalidCode); + + expect( + () { + LocalizationsGenerator( + fileSystem: fs, + inputPathString: defaultL10nPathString, + outputPathString: defaultL10nPathString, + templateArbFileName: 'app_invalid.arb', + outputFileString: defaultOutputFileString, + classNameString: defaultClassNameString, + ) + ..loadResources() + ..writeOutputFiles(BufferLogger.test()); + }, + throwsA(isA().having( + (L10nException e) => e.message, + 'message', + contains('"invalid" is not a supported language code.'), + )), + ); + }); }); testWithoutContext('should generate a valid pubspec.yaml file when using synthetic package if it does not already exist', () { From 2a9aa79843b45af01e3bc852ed7641177e3d7f8e Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sun, 24 Apr 2022 16:29:06 -0400 Subject: [PATCH 053/141] Roll Engine from 984b5b332bb2 to e31251e55fd9 (1 revision) (#102470) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 4c37debd0ca07..be409a3a17c64 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -984b5b332bb2afe50bd9654fc5b2a444e1c40771 +e31251e55fd95607bd636dfced066ad74f22175d diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index e28798ca88b3e..b39c5f1d6d3e3 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -O69VeGryOb6EViFsMEkeU7N55-TySLesPbOiWxqYvt8C +u23mb8xy8Dxs6J3Quw5UvYpn2l2ixuKRmifIGYDg9acC From 399b866431c833374d0d6b2223a17cb02b784d76 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sun, 24 Apr 2022 22:24:06 -0400 Subject: [PATCH 054/141] Roll Engine from e31251e55fd9 to 3200b99d99f3 (1 revision) (#102475) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index be409a3a17c64..3a260f9ff8c79 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -e31251e55fd95607bd636dfced066ad74f22175d +3200b99d99f366f9b0b7805de61702622916dd30 diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index c746e0630cd3b..29d43f1b8b2df 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -UrnPgfhOYsXIu2DdQqzbUvLhk4ndYXYWo5rC63CLH3sC +ZRKEPPWM6cOHhhmKT45cICE7QDKDiSy7g6ieguBmk6sC From 4fec2ee0ed9849ad94bf89d7c560d188f3d01763 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sun, 24 Apr 2022 23:29:06 -0400 Subject: [PATCH 055/141] Roll Engine from 3200b99d99f3 to 20b5b8604c3e (1 revision) (#102477) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 3a260f9ff8c79..1c2d56e0a3c29 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -3200b99d99f366f9b0b7805de61702622916dd30 +20b5b8604c3e3b860f89c320991f5bb7eabacd0a From ce3d1af64723a910c5d4f670235b4b20fa3e3e51 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 02:29:07 -0400 Subject: [PATCH 056/141] Roll Engine from 20b5b8604c3e to 93de17f347fe (1 revision) (#102480) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 1c2d56e0a3c29..e27338485f760 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -20b5b8604c3e3b860f89c320991f5bb7eabacd0a +93de17f347fec7ea92c6d410e5d6ce65e0de7903 From 8c22f5648a07b9e22230fce1183c9579e6674f17 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 05:34:07 -0400 Subject: [PATCH 057/141] Roll Engine from 93de17f347fe to 10efa195bf1c (2 revisions) (#102488) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index e27338485f760..6f888ca74c616 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -93de17f347fec7ea92c6d410e5d6ce65e0de7903 +10efa195bf1ceea25d2a5a377bbe54234787fdda From d69cff97cdbcceb7339be91e55e9123c9dea13ff Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 06:39:06 -0400 Subject: [PATCH 058/141] Roll Engine from 10efa195bf1c to c901936d4f6c (1 revision) (#102493) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 6f888ca74c616..5b24f0a4ff103 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -10efa195bf1ceea25d2a5a377bbe54234787fdda +c901936d4f6c882891cbb3b965aa4027269e7760 diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index b39c5f1d6d3e3..0d44851a49b42 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -u23mb8xy8Dxs6J3Quw5UvYpn2l2ixuKRmifIGYDg9acC +MbA1RtjV4CJorJFQIR2Ueo6zQWyA00GExqKIWj3bYcEC From e1ec377321e8043aa7c41505fcdc4fc05c2f239f Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 11:29:04 -0400 Subject: [PATCH 059/141] Roll Engine from c901936d4f6c to 5451e88a09c0 (1 revision) (#102509) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 5b24f0a4ff103..0973af4a0d473 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -c901936d4f6c882891cbb3b965aa4027269e7760 +5451e88a09c006b3f4d33facc9e7daa99402a6ea diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index 29d43f1b8b2df..d4df5be730842 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -ZRKEPPWM6cOHhhmKT45cICE7QDKDiSy7g6ieguBmk6sC +JVNKiIJWP2nsg080g4dtv3nbXCEU_BKeBv23bgWC9IUC From e3e75ff909fb237282b0a4ee0d97e5c118fdad99 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 12:04:07 -0400 Subject: [PATCH 060/141] Roll Plugins from ca63d964d9fd to 4ff0157340ea (3 revisions) (#102511) --- bin/internal/flutter_plugins.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/flutter_plugins.version b/bin/internal/flutter_plugins.version index 8915d67171ac0..8fcea5085fea7 100644 --- a/bin/internal/flutter_plugins.version +++ b/bin/internal/flutter_plugins.version @@ -1 +1 @@ -ca63d964d9fdfff9be36533ea4248d0d0ca28fd0 +4ff0157340ea1874ca753bf921807e62c1943099 From f6feb8f8b6dc3e2771acda5fc38a4ef434d3af87 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 12:34:06 -0400 Subject: [PATCH 061/141] Roll Engine from 5451e88a09c0 to 966812846313 (2 revisions) (#102513) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 0973af4a0d473..e7fa1fb3e3b3f 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -5451e88a09c006b3f4d33facc9e7daa99402a6ea +966812846313c06b5371f777c7a53a38ed47f793 From 899548c48ae68eacadab3749ab9a0c46a1ffef93 Mon Sep 17 00:00:00 2001 From: wangying Date: Tue, 26 Apr 2022 01:04:07 +0800 Subject: [PATCH 062/141] Assign debugCreator for more layers (#101899) --- .../flutter/lib/src/rendering/proxy_box.dart | 29 +++++++- .../lib/src/rendering/proxy_sliver.dart | 4 + .../flutter/lib/src/widgets/color_filter.dart | 4 + .../flutter/lib/src/widgets/image_filter.dart | 5 +- packages/flutter/test/widgets/debug_test.dart | 74 ++++++++++++++++++- 5 files changed, 113 insertions(+), 3 deletions(-) diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart index 32fb58e9433ba..2b62dafa78d2c 100644 --- a/packages/flutter/lib/src/rendering/proxy_box.dart +++ b/packages/flutter/lib/src/rendering/proxy_box.dart @@ -899,6 +899,10 @@ class RenderOpacity extends RenderProxyBox { } assert(needsCompositing); layer = context.pushOpacity(offset, _alpha, super.paint, oldLayer: layer as OpacityLayer?); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } } @@ -1006,6 +1010,10 @@ mixin RenderAnimatedOpacityMixin on RenderObjectWithChil } assert(needsCompositing); layer = context.pushOpacity(offset, _alpha!, super.paint, oldLayer: layer as OpacityLayer?); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } } @@ -1115,6 +1123,10 @@ class RenderShaderMask extends RenderProxyBox { ..maskRect = offset & size ..blendMode = _blendMode; context.pushLayer(layer!, super.paint, offset); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } else { layer = null; } @@ -1181,6 +1193,10 @@ class RenderBackdropFilter extends RenderProxyBox { layer!.filter = _filter; layer!.blendMode = _blendMode; context.pushLayer(layer!, super.paint, offset); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } else { layer = null; } @@ -2426,6 +2442,10 @@ class RenderTransform extends RenderProxyBox { layer = ImageFilterLayer(imageFilter: filter); } context.pushLayer(layer!, super.paint, offset); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } } } @@ -5212,7 +5232,10 @@ class RenderLeaderLayer extends RenderProxyBox { ..offset = offset; } context.pushLayer(layer!, super.paint, Offset.zero); - assert(layer != null); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } @override @@ -5424,6 +5447,10 @@ class RenderFollowerLayer extends RenderProxyBox { double.infinity, ), ); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } @override diff --git a/packages/flutter/lib/src/rendering/proxy_sliver.dart b/packages/flutter/lib/src/rendering/proxy_sliver.dart index 520e0d1bba2bc..3328aac677862 100644 --- a/packages/flutter/lib/src/rendering/proxy_sliver.dart +++ b/packages/flutter/lib/src/rendering/proxy_sliver.dart @@ -173,6 +173,10 @@ class RenderSliverOpacity extends RenderProxySliver { super.paint, oldLayer: layer as OpacityLayer?, ); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } } diff --git a/packages/flutter/lib/src/widgets/color_filter.dart b/packages/flutter/lib/src/widgets/color_filter.dart index b8d5c27367e1b..b604a908bf3ea 100644 --- a/packages/flutter/lib/src/widgets/color_filter.dart +++ b/packages/flutter/lib/src/widgets/color_filter.dart @@ -74,5 +74,9 @@ class _ColorFilterRenderObject extends RenderProxyBox { @override void paint(PaintingContext context, Offset offset) { layer = context.pushColorFilter(offset, colorFilter, super.paint, oldLayer: layer as ColorFilterLayer?); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } } diff --git a/packages/flutter/lib/src/widgets/image_filter.dart b/packages/flutter/lib/src/widgets/image_filter.dart index 8546ea969f015..935d401789ac1 100644 --- a/packages/flutter/lib/src/widgets/image_filter.dart +++ b/packages/flutter/lib/src/widgets/image_filter.dart @@ -73,6 +73,9 @@ class _ImageFilterRenderObject extends RenderProxyBox { filterLayer.imageFilter = imageFilter; } context.pushLayer(layer!, super.paint, offset); - assert(layer != null); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } } diff --git a/packages/flutter/test/widgets/debug_test.dart b/packages/flutter/test/widgets/debug_test.dart index 47e3cffabc95e..ce1eabb770fb9 100644 --- a/packages/flutter/test/widgets/debug_test.dart +++ b/packages/flutter/test/widgets/debug_test.dart @@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:ui'; + import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { @@ -269,4 +271,74 @@ void main() { } debugHighlightDeprecatedWidgets = false; }); + + testWidgets('debugCreator of layers should not be null', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Directionality( + textDirection: TextDirection.ltr, + child: Material( + child: Stack( + children: [ + const ColorFiltered( + colorFilter: ColorFilter.mode(Color(0xFFFF0000), BlendMode.color), + child: Placeholder(), + ), + const Opacity( + opacity: 1.0, + child: Placeholder(), + ), + ImageFiltered( + imageFilter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), + child: const Placeholder(), + ), + BackdropFilter( + filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), + child: const Placeholder(), + ), + ShaderMask( + shaderCallback: (Rect bounds) => const RadialGradient( + radius: 0.05, + colors: [Color(0xFFFF0000), Color(0xFF00FF00)], + tileMode: TileMode.mirror, + ).createShader(bounds), + child: const Placeholder(), + ), + RangeSlider( + values: const RangeValues(0.3, 0.7), + onChanged: (RangeValues newValues) {}, + ), + CompositedTransformFollower( + link: LayerLink(), + ), + ], + ), + ), + ), + ), + ); + + RenderObject renderObject; + + renderObject = tester.firstRenderObject(find.byType(Opacity)); + expect(renderObject.debugLayer?.debugCreator, isNotNull); + + renderObject = tester.firstRenderObject(find.byType(ColorFiltered)); + expect(renderObject.debugLayer?.debugCreator, isNotNull); + + renderObject = tester.firstRenderObject(find.byType(ImageFiltered)); + expect(renderObject.debugLayer?.debugCreator, isNotNull); + + renderObject = tester.firstRenderObject(find.byType(BackdropFilter)); + expect(renderObject.debugLayer?.debugCreator, isNotNull); + + renderObject = tester.firstRenderObject(find.byType(ShaderMask)); + expect(renderObject.debugLayer?.debugCreator, isNotNull); + + renderObject = tester.firstRenderObject(find.byType(RangeSlider)); + expect(renderObject.debugLayer?.debugCreator, isNotNull); + + renderObject = tester.firstRenderObject(find.byType(CompositedTransformFollower)); + expect(renderObject.debugLayer?.debugCreator, isNotNull); + }); } From 46cb9ede2f02f03e2151fda38f2e47805f503590 Mon Sep 17 00:00:00 2001 From: Emmanuel Garcia Date: Mon, 25 Apr 2022 10:30:40 -0700 Subject: [PATCH 063/141] Reduce Gradle log level in verbose output (#102422) --- packages/flutter_tools/lib/src/android/gradle.dart | 4 ++-- .../general.shard/android/android_gradle_builder_test.dart | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/flutter_tools/lib/src/android/gradle.dart b/packages/flutter_tools/lib/src/android/gradle.dart index 19948c57b6384..d5caca41af480 100644 --- a/packages/flutter_tools/lib/src/android/gradle.dart +++ b/packages/flutter_tools/lib/src/android/gradle.dart @@ -269,7 +269,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ]; if (_logger.isVerbose) { command.add('--full-stacktrace'); - command.add('--debug'); + command.add('--info'); command.add('-Pverbose=true'); } else { command.add('-q'); @@ -593,7 +593,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ]; if (_logger.isVerbose) { command.add('--full-stacktrace'); - command.add('--debug'); + command.add('--info'); command.add('-Pverbose=true'); } else { command.add('-q'); diff --git a/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart b/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart index b0d0636bed699..bd90fa1730346 100644 --- a/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart @@ -142,7 +142,7 @@ void main() { command: [ 'gradlew', '--full-stacktrace', - '--debug', + '--info', '-Pverbose=true', '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=lib/main.dart', @@ -782,7 +782,7 @@ void main() { '-Pis-plugin=false', '-PbuildNumber=1.0', '--full-stacktrace', - '--debug', + '--info', '-Pverbose=true', '-Pdart-obfuscation=false', '-Ptrack-widget-creation=false', From 7b580fd5df9442bd37e7327e35060a1efa6b2c68 Mon Sep 17 00:00:00 2001 From: Sai Sandeep Mutyala Date: Mon, 25 Apr 2022 23:14:07 +0530 Subject: [PATCH 064/141] Enable TestDefaultBinaryMessenger to intercept all platform channels. (#100049) --- .../src/test_default_binary_messenger.dart | 13 ++++++- .../test_default_binary_messenger_test.dart | 39 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/packages/flutter_test/lib/src/test_default_binary_messenger.dart b/packages/flutter_test/lib/src/test_default_binary_messenger.dart index ba227d6e40f71..0907209e7e616 100644 --- a/packages/flutter_test/lib/src/test_default_binary_messenger.dart +++ b/packages/flutter_test/lib/src/test_default_binary_messenger.dart @@ -8,6 +8,11 @@ import 'dart:ui' as ui; import 'package:fake_async/fake_async.dart'; import 'package:flutter/services.dart'; +/// A function which takes the name of the method channel, it's handler, +/// platform message and asynchronously returns an encoded response. +typedef AllMessagesHandler = Future? Function( + String channel, MessageHandler? handler, ByteData? message); + /// A [BinaryMessenger] subclass that is used as the default binary messenger /// under testing environment. /// @@ -116,11 +121,17 @@ class TestDefaultBinaryMessenger extends BinaryMessenger { // can implement the [checkMockMessageHandler] method. final Map _outboundHandlerIdentities = {}; + /// Handler that intercepts and responds to outgoing messages, pretending + /// to be the platform, for all channels. + AllMessagesHandler? allMessagesHandler; + @override Future? send(String channel, ByteData? message) { final Future? resultFuture; final MessageHandler? handler = _outboundHandlers[channel]; - if (handler != null) { + if (allMessagesHandler != null) { + resultFuture = allMessagesHandler!(channel, handler, message); + } else if (handler != null) { resultFuture = handler(message); } else { resultFuture = delegate.send(channel, message); diff --git a/packages/flutter_test/test/test_default_binary_messenger_test.dart b/packages/flutter_test/test/test_default_binary_messenger_test.dart index 5052882682f52..30ed9e686bd46 100644 --- a/packages/flutter_test/test/test_default_binary_messenger_test.dart +++ b/packages/flutter_test/test/test_default_binary_messenger_test.dart @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:typed_data'; import 'dart:ui' as ui; import 'package:flutter/services.dart'; @@ -26,6 +27,19 @@ class TestDelegate extends BinaryMessenger { void setMessageHandler(String channel, MessageHandler? handler) => throw UnimplementedError(); } +class WorkingTestDelegate extends BinaryMessenger { + @override + Future? send(String channel, ByteData? message) async { + return ByteData.sublistView(Uint8List.fromList([1, 2, 3])); + } + + // Rest of the API isn't needed for this test. + @override + Future handlePlatformMessage(String channel, ByteData? data, ui.PlatformMessageResponseCallback? callback) => throw UnimplementedError(); + @override + void setMessageHandler(String channel, MessageHandler? handler) => throw UnimplementedError(); +} + void main() { testWidgets('Caught exceptions are caught by the test framework', (WidgetTester tester) async { final BinaryMessenger delegate = TestDelegate(); @@ -39,4 +53,29 @@ void main() { expect(error, const RecognizableTestException()); } }); + + testWidgets('Mock MessageHandler is set correctly', + (WidgetTester tester) async { + final TestDefaultBinaryMessenger binaryMessenger = + TestDefaultBinaryMessenger(WorkingTestDelegate()); + binaryMessenger.setMockMessageHandler( + '', + (ByteData? message) async => + ByteData.sublistView(Uint8List.fromList([2, 3, 4]))); + + final ByteData? result = await binaryMessenger.send('', null); + expect(result?.buffer.asUint8List(), Uint8List.fromList([2, 3, 4])); + }); + + testWidgets('Mock AllMessagesHandler is set correctly', + (WidgetTester tester) async { + final TestDefaultBinaryMessenger binaryMessenger = + TestDefaultBinaryMessenger(WorkingTestDelegate()); + binaryMessenger.allMessagesHandler = + (String channel, MessageHandler? handler, ByteData? message) async => + ByteData.sublistView(Uint8List.fromList([2, 3, 4])); + + final ByteData? result = await binaryMessenger.send('', null); + expect(result?.buffer.asUint8List(), Uint8List.fromList([2, 3, 4])); + }); } From 0095feeadee672f8bf68cd75ad557921ae090ffe Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 13:49:07 -0400 Subject: [PATCH 065/141] Roll Engine from 966812846313 to c4184728a9ad (1 revision) (#102515) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index e7fa1fb3e3b3f..d76c58decd2a7 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -966812846313c06b5371f777c7a53a38ed47f793 +c4184728a9ad486ed900a705800db3f7d1e61215 From d46979648693f41a84b5e3011b9b81d519e8581b Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 14:54:06 -0400 Subject: [PATCH 066/141] Roll Engine from c4184728a9ad to f1bb8f421135 (1 revision) (#102519) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index d76c58decd2a7..ef891fb884d84 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -c4184728a9ad486ed900a705800db3f7d1e61215 +f1bb8f4211351cfdeb267cf4aba2bb57abdd3d77 From 3bd19f22970d7800ffc0ae0da2a8d7cc3877bc68 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 16:34:07 -0400 Subject: [PATCH 067/141] Roll Engine from f1bb8f421135 to 0f47c7a68811 (1 revision) (#102523) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index ef891fb884d84..8ff7d5ba428f2 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -f1bb8f4211351cfdeb267cf4aba2bb57abdd3d77 +0f47c7a68811f0436adf942fefb64a6e379a8371 From 558016455afea6613fd467fe4e50df45c063e852 Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Mon, 25 Apr 2022 15:54:05 -0500 Subject: [PATCH 068/141] Re-land reverse case for AppBar scrolled under (#102343) --- .../flutter/lib/src/material/app_bar.dart | 34 +- .../widgets/scroll_notification_observer.dart | 32 +- .../flutter/test/material/app_bar_test.dart | 706 +++++++++++------- .../flutter/test/material/debug_test.dart | 1 + .../flutter/test/material/scaffold_test.dart | 1 + 5 files changed, 479 insertions(+), 295 deletions(-) diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart index 39c7bd39c339c..045d9d8325ac4 100644 --- a/packages/flutter/lib/src/material/app_bar.dart +++ b/packages/flutter/lib/src/material/app_bar.dart @@ -767,17 +767,33 @@ class _AppBarState extends State { } void _handleScrollNotification(ScrollNotification notification) { - if (notification is ScrollUpdateNotification) { - final bool oldScrolledUnder = _scrolledUnder; - _scrolledUnder = notification.depth == 0 - && notification.metrics.extentBefore > 0 - && notification.metrics.axis == Axis.vertical; - if (_scrolledUnder != oldScrolledUnder) { - setState(() { - // React to a change in MaterialState.scrolledUnder - }); + final bool oldScrolledUnder = _scrolledUnder; + final ScrollMetrics metrics = notification.metrics; + + if (notification.depth != 0) { + _scrolledUnder = false; + } else { + switch (metrics.axisDirection) { + case AxisDirection.up: + // Scroll view is reversed + _scrolledUnder = metrics.extentAfter > 0; + break; + case AxisDirection.down: + _scrolledUnder = metrics.extentBefore > 0; + break; + case AxisDirection.right: + case AxisDirection.left: + // Scrolled under is only supported in the vertical axis. + _scrolledUnder = false; + break; } } + + if (_scrolledUnder != oldScrolledUnder) { + setState(() { + // React to a change in MaterialState.scrolledUnder + }); + } } Color _resolveColor(Set states, Color? widgetColor, Color? themeColor, Color defaultColor) { diff --git a/packages/flutter/lib/src/widgets/scroll_notification_observer.dart b/packages/flutter/lib/src/widgets/scroll_notification_observer.dart index bc151190f1d5d..6fa7ffaa15b7c 100644 --- a/packages/flutter/lib/src/widgets/scroll_notification_observer.dart +++ b/packages/flutter/lib/src/widgets/scroll_notification_observer.dart @@ -9,6 +9,7 @@ import 'package:flutter/foundation.dart'; import 'framework.dart'; import 'notification_listener.dart'; import 'scroll_notification.dart'; +import 'scroll_position.dart'; /// A [ScrollNotification] listener for [ScrollNotificationObserver]. /// @@ -151,14 +152,26 @@ class ScrollNotificationObserverState extends State @override Widget build(BuildContext context) { - return NotificationListener( - onNotification: (ScrollNotification notification) { - _notifyListeners(notification); + // A ScrollMetricsNotification allows listeners to be notified for an + // initial state, as well as if the content dimensions change without + // scrolling. + return NotificationListener( + onNotification: (ScrollMetricsNotification notification) { + _notifyListeners(_ConvertedScrollMetricsNotification( + metrics: notification.metrics, + context: notification.context, + )); return false; }, - child: _ScrollNotificationObserverScope( - scrollNotificationObserverState: this, - child: widget.child, + child: NotificationListener( + onNotification: (ScrollNotification notification) { + _notifyListeners(notification); + return false; + }, + child: _ScrollNotificationObserverScope( + scrollNotificationObserverState: this, + child: widget.child, + ), ), ); } @@ -170,3 +183,10 @@ class ScrollNotificationObserverState extends State super.dispose(); } } + +class _ConvertedScrollMetricsNotification extends ScrollNotification { + _ConvertedScrollMetricsNotification({ + required super.metrics, + required super.context, + }); +} diff --git a/packages/flutter/test/material/app_bar_test.dart b/packages/flutter/test/material/app_bar_test.dart index 88b6963f68aab..1b08520ea620f 100644 --- a/packages/flutter/test/material/app_bar_test.dart +++ b/packages/flutter/test/material/app_bar_test.dart @@ -2567,311 +2567,457 @@ void main() { expect(actionIconTheme.color, foregroundColor); }); - testWidgets('SliverAppBar.backgroundColor MaterialStateColor scrolledUnder', (WidgetTester tester) async { + group('MaterialStateColor scrolledUnder', () { const double collapsedHeight = kToolbarHeight; const double expandedHeight = 200.0; const Color scrolledColor = Color(0xff00ff00); const Color defaultColor = Color(0xff0000ff); - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; - }), - expandedHeight: expandedHeight, - pinned: true, - ), - SliverList( - delegate: SliverChildListDelegate( - [ - Container(height: 1200.0, color: Colors.teal), - ], - ), - ), - ], - ), - ), - ), - ); - Finder findAppBarMaterial() { - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)); + return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)).first; } - Color? getAppBarBackgroundColor() { + Color? getAppBarBackgroundColor(WidgetTester tester) { return tester.widget(findAppBarMaterial()).color; } - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - }); - - testWidgets('SliverAppBar.backgroundColor with FlexibleSpace MaterialStateColor scrolledUnder', (WidgetTester tester) async { - const double collapsedHeight = kToolbarHeight; - const double expandedHeight = 200.0; - const Color scrolledColor = Color(0xff00ff00); - const Color defaultColor = Color(0xff0000ff); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; - }), - expandedHeight: expandedHeight, - pinned: true, - flexibleSpace: const FlexibleSpaceBar( - title: Text('SliverAppBar'), + group('SliverAppBar', () { + Widget _buildSliverApp({ + required double contentHeight, + bool reverse = false, + bool includeFlexibleSpace = false, + }) { + return MaterialApp( + home: Scaffold( + body: CustomScrollView( + reverse: reverse, + slivers: [ + SliverAppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) + ? scrolledColor + : defaultColor; + }), + expandedHeight: expandedHeight, + pinned: true, + flexibleSpace: includeFlexibleSpace + ? const FlexibleSpaceBar(title: Text('SliverAppBar')) + : null, ), - ), - SliverList( - delegate: SliverChildListDelegate( + SliverList( + delegate: SliverChildListDelegate( [ - Container(height: 1200.0, color: Colors.teal), + Container(height: contentHeight, color: Colors.teal), ], + ), ), - ), - ], - ), - ), - ), - ); - - Finder findAppBarMaterial() { - // There are 2 Material widgets below AppBar. The second is only added if - // flexibleSpace is non-null. - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)).first; - } - - Color? getAppBarBackgroundColor() { - return tester.widget(findAppBarMaterial()).color; - } - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - }); - - testWidgets('AppBar.backgroundColor MaterialStateColor scrolledUnder', (WidgetTester tester) async { - const Color scrolledColor = Color(0xff00ff00); - const Color defaultColor = Color(0xff0000ff); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - appBar: AppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; - }), - title: const Text('AppBar'), - ), - body: ListView( - children: [ - Container(height: 1200.0, color: Colors.teal), - ], - ), - ), - ), - ); - - Finder findAppBarMaterial() { - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)); - } - - Color? getAppBarBackgroundColor() { - return tester.widget(findAppBarMaterial()).color; - } - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - }); - - testWidgets('AppBar.backgroundColor with FlexibleSpace MaterialStateColor scrolledUnder', (WidgetTester tester) async { - const Color scrolledColor = Color(0xff00ff00); - const Color defaultColor = Color(0xff0000ff); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - appBar: AppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; - }), - title: const Text('AppBar'), - flexibleSpace: const FlexibleSpaceBar( - title: Text('FlexibleSpace'), + ], ), ), - body: ListView( - children: [ - Container(height: 1200.0, color: Colors.teal), - ], - ), - ), - ), - ); - - Finder findAppBarMaterial() { - // There are 2 Material widgets below AppBar. The second is only added if - // flexibleSpace is non-null. - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)).first; - } - - Color? getAppBarBackgroundColor() { - return tester.widget(findAppBarMaterial()).color; - } - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - }); + ); + } + + testWidgets('backgroundColor', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp(contentHeight: 1200.0) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp(contentHeight: 1200.0, includeFlexibleSpace: true) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('backgroundColor - reverse', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp(contentHeight: 1200.0, reverse: true) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, -expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace - reverse', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp( + contentHeight: 1200.0, + reverse: true, + includeFlexibleSpace: true, + ) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, -expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('backgroundColor - not triggered in reverse for short content', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp(contentHeight: 200, reverse: true) + ); + + // In reverse, the content here is not long enough to scroll under the app + // bar. + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace - not triggered in reverse for short content', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp( + contentHeight: 200, + reverse: true, + includeFlexibleSpace: true, + ) + ); + + // In reverse, the content here is not long enough to scroll under the app + // bar. + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + }); - testWidgets('AppBar._handleScrollNotification safely calls setState()', (WidgetTester tester) async { - // Regression test for failures found in Google internal issue b/185192049. - final ScrollController controller = ScrollController(initialScrollOffset: 400); - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - appBar: AppBar( - title: const Text('AppBar'), - ), - body: Scrollbar( - isAlwaysShown: true, - controller: controller, - child: ListView( - controller: controller, + group('AppBar', () { + Widget _buildAppBar({ + required double contentHeight, + bool reverse = false, + bool includeFlexibleSpace = false + }) { + return MaterialApp( + home: Scaffold( + appBar: AppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) + ? scrolledColor + : defaultColor; + }), + title: const Text('AppBar'), + flexibleSpace: includeFlexibleSpace + ? const FlexibleSpaceBar(title: Text('FlexibleSpace')) + : null, + ), + body: ListView( + reverse: reverse, children: [ - Container(height: 1200.0, color: Colors.teal), + Container(height: contentHeight, color: Colors.teal), ], ), ), - ), - ), - ); - - expect(tester.takeException(), isNull); - }); - - testWidgets('AppBar scrolledUnder does not trigger on horizontal scroll', (WidgetTester tester) async { - const Color scrolledColor = Color(0xff00ff00); - const Color defaultColor = Color(0xff0000ff); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - appBar: AppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; - }), - title: const Text('AppBar'), - ), - body: ListView( - scrollDirection: Axis.horizontal, - children: [ - Container(height: 600.0, width: 1200.0, color: Colors.teal), - ], + ); + } + + testWidgets('backgroundColor', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar(contentHeight: 1200.0) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar(contentHeight: 1200.0, includeFlexibleSpace: true) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('backgroundColor - reverse', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar(contentHeight: 1200.0, reverse: true) + ); + await tester.pump(); + + // In this test case, the content always extends under the AppBar, so it + // should always be the scrolledColor. + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace - reverse', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar( + contentHeight: 1200.0, + reverse: true, + includeFlexibleSpace: true, + ) + ); + await tester.pump(); + + // In this test case, the content always extends under the AppBar, so it + // should always be the scrolledColor. + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('_handleScrollNotification safely calls setState()', (WidgetTester tester) async { + // Regression test for failures found in Google internal issue b/185192049. + final ScrollController controller = ScrollController(initialScrollOffset: 400); + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('AppBar'), + ), + body: Scrollbar( + isAlwaysShown: true, + controller: controller, + child: ListView( + controller: controller, + children: [ + Container(height: 1200.0, color: Colors.teal), + ], + ), + ), + ), ), - ), - ), - ); - - Finder findAppBarMaterial() { - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)); - } - - Color? getAppBarBackgroundColor() { - return tester.widget(findAppBarMaterial()).color; - } - - expect(getAppBarBackgroundColor(), defaultColor); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(-100.0, 0.0)); - await gesture.up(); - await tester.pumpAndSettle(); + ); - expect(getAppBarBackgroundColor(), defaultColor); - - gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(100.0, 0.0)); - await gesture.up(); - await tester.pumpAndSettle(); + expect(tester.takeException(), isNull); + }); - expect(getAppBarBackgroundColor(), defaultColor); + testWidgets('does not trigger on horizontal scroll', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) + ? scrolledColor + : defaultColor; + }), + title: const Text('AppBar'), + ), + body: ListView( + scrollDirection: Axis.horizontal, + children: [ + Container(height: 600.0, width: 1200.0, color: Colors.teal), + ], + ), + ), + ), + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(-100.0, 0.0)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + + gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(100.0, 0.0)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + }); + + testWidgets('backgroundColor - not triggered in reverse for short content', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar( + contentHeight: 200.0, + reverse: true, + ) + ); + await tester.pump(); + + // In reverse, the content here is not long enough to scroll under the app + // bar. + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace - not triggered in reverse for short content', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar( + contentHeight: 200.0, + reverse: true, + includeFlexibleSpace: true, + ) + ); + await tester.pump(); + + // In reverse, the content here is not long enough to scroll under the app + // bar. + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + }); }); testWidgets('AppBar.preferredHeightFor', (WidgetTester tester) async { diff --git a/packages/flutter/test/material/debug_test.dart b/packages/flutter/test/material/debug_test.dart index 46f9e61b37fd9..21492e972bc01 100644 --- a/packages/flutter/test/material/debug_test.dart +++ b/packages/flutter/test/material/debug_test.dart @@ -349,6 +349,7 @@ void main() { ' Material\n' ' _ScrollNotificationObserverScope\n' ' NotificationListener\n' + ' NotificationListener\n' ' ScrollNotificationObserver\n' ' _ScaffoldScope\n' ' Scaffold-[LabeledGlobalKey#00000]\n' diff --git a/packages/flutter/test/material/scaffold_test.dart b/packages/flutter/test/material/scaffold_test.dart index 3a10ba8c08fb3..7aeee33dc42ec 100644 --- a/packages/flutter/test/material/scaffold_test.dart +++ b/packages/flutter/test/material/scaffold_test.dart @@ -2339,6 +2339,7 @@ void main() { ' Material\n' ' _ScrollNotificationObserverScope\n' ' NotificationListener\n' + ' NotificationListener\n' ' ScrollNotificationObserver\n' ' _ScaffoldScope\n' ' Scaffold\n' From 4537391ac2b1c5d219d2a65580c716fbe8ccf7bb Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 17:44:07 -0400 Subject: [PATCH 069/141] Roll Engine from 0f47c7a68811 to 5fdfbe3010bb (1 revision) (#102526) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 8ff7d5ba428f2..ab406e980e26b 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -0f47c7a68811f0436adf942fefb64a6e379a8371 +5fdfbe3010bb55f163fc2f2d27f0ca914663e367 From 1c80e29b8e0a793ae582e8f4ccf7099c7f316d85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 15:29:08 -0700 Subject: [PATCH 070/141] Bump debian from bullseye-20220328-slim to bullseye-20220418-slim in /dev/ci/docker_linux (#102528) --- dev/ci/docker_linux/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/ci/docker_linux/Dockerfile b/dev/ci/docker_linux/Dockerfile index 9263abdbacc7c..d6a930ab5e00b 100644 --- a/dev/ci/docker_linux/Dockerfile +++ b/dev/ci/docker_linux/Dockerfile @@ -12,7 +12,7 @@ # Last manual update 2021-09-24 (changing this comment will re-build image) -FROM debian@sha256:78fd65998de7a59a001d792fe2d3a6d2ea25b6f3f068e5c84881250373577414 +FROM debian@sha256:f75d8a3ac10acdaa9be6052ea5f28bcfa56015ff02298831994bd3e6d66f7e57 MAINTAINER Flutter Developers RUN apt-get update -y && \ From 18713e0c5d44ed2e991e94595e1ff2900f97a7ef Mon Sep 17 00:00:00 2001 From: gaaclarke <30870216+gaaclarke@users.noreply.github.com> Date: Mon, 25 Apr 2022 15:39:05 -0700 Subject: [PATCH 071/141] Made Directionality forego dependency tracking for better performance. (#102336) --- packages/flutter/lib/src/widgets/basic.dart | 59 ++++++++++++++++++- .../flutter/lib/src/widgets/framework.dart | 5 ++ .../flutter/test/widgets/framework_test.dart | 24 ++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/widgets/basic.dart b/packages/flutter/lib/src/widgets/basic.dart index f565db3598e2e..0d6b956a6f962 100644 --- a/packages/flutter/lib/src/widgets/basic.dart +++ b/packages/flutter/lib/src/widgets/basic.dart @@ -80,12 +80,69 @@ export 'package:flutter/services.dart' show // BIDIRECTIONAL TEXT SUPPORT +/// An [InheritedElement] that has hundreds of dependencies but will +/// infrequently change. This provides a performance tradeoff where building +/// the [Widget]s is faster but performing updates is slower. +/// +/// | | _UbiquitiousInheritedElement | InheritedElement | +/// |---------------------|------------------------------|------------------| +/// | insert (best case) | O(1) | O(1) | +/// | insert (worst case) | O(1) | O(n) | +/// | search (best case) | O(n) | O(1) | +/// | search (worst case) | O(n) | O(n) | +/// +/// Insert happens when building the [Widget] tree, search happens when updating +/// [Widget]s. +class _UbiquitousInheritedElement extends InheritedElement { + /// Creates an element that uses the given widget as its configuration. + _UbiquitousInheritedElement(super.widget); + + @override + void setDependencies(Element dependent, Object? value) { + // This is where the cost of [InheritedElement] is incurred during build + // time of the widget tree. Omitting this bookkeeping is where the + // performance savings come from. + assert(value == null); + } + + @override + Object? getDependencies(Element dependent) { + return null; + } + + @override + void notifyClients(InheritedWidget oldWidget) { + _recurseChildren(this, (Element element) { + if (element.doesDependOnInheritedElement(this)) { + notifyDependent(oldWidget, element); + } + }); + } + + static void _recurseChildren(Element element, ElementVisitor visitor) { + element.visitChildren((Element child) { + _recurseChildren(child, visitor); + }); + visitor(element); + } +} + +/// See also: +/// +/// * [_UbiquitousInheritedElement], the [Element] for [_UbiquitousInheritedWidget]. +abstract class _UbiquitousInheritedWidget extends InheritedWidget { + const _UbiquitousInheritedWidget({super.key, required super.child}); + + @override + InheritedElement createElement() => _UbiquitousInheritedElement(this); +} + /// A widget that determines the ambient directionality of text and /// text-direction-sensitive render objects. /// /// For example, [Padding] depends on the [Directionality] to resolve /// [EdgeInsetsDirectional] objects into absolute [EdgeInsets] objects. -class Directionality extends InheritedWidget { +class Directionality extends _UbiquitousInheritedWidget { /// Creates a widget that determines the directionality of text and /// text-direction-sensitive render objects. /// diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart index 654c83f6a1181..cc42fc59f63df 100644 --- a/packages/flutter/lib/src/widgets/framework.dart +++ b/packages/flutter/lib/src/widgets/framework.dart @@ -4197,6 +4197,11 @@ abstract class Element extends DiagnosticableTree implements BuildContext { return true; } + /// Returns `true` if [dependOnInheritedElement] was previously called with [ancestor]. + @protected + bool doesDependOnInheritedElement(InheritedElement ancestor) => + _dependencies != null && _dependencies!.contains(ancestor); + @override InheritedWidget dependOnInheritedElement(InheritedElement ancestor, { Object? aspect }) { assert(ancestor != null); diff --git a/packages/flutter/test/widgets/framework_test.dart b/packages/flutter/test/widgets/framework_test.dart index ca2a57fba2c25..b754a442863f6 100644 --- a/packages/flutter/test/widgets/framework_test.dart +++ b/packages/flutter/test/widgets/framework_test.dart @@ -1694,6 +1694,30 @@ The findRenderObject() method was called for the following element: expect(inheritedElement.hashCode, identityHashCode(inheritedElement)); }); + + testWidgets('doesDependOnInheritedElement', (WidgetTester tester) async { + final _TestInheritedElement ancestor = + _TestInheritedElement(const Directionality( + textDirection: TextDirection.ltr, + child: Placeholder(), + )); + final _TestInheritedElement child = + _TestInheritedElement(const Directionality( + textDirection: TextDirection.ltr, + child: Placeholder(), + )); + expect(child.doesDependOnInheritedElement(ancestor), isFalse); + child.dependOnInheritedElement(ancestor); + expect(child.doesDependOnInheritedElement(ancestor), isTrue); + }); +} + +class _TestInheritedElement extends InheritedElement { + _TestInheritedElement(super.widget); + @override + bool doesDependOnInheritedElement(InheritedElement element) { + return super.doesDependOnInheritedElement(element); + } } class _WidgetWithNoVisitChildren extends StatelessWidget { From 92bc78371beee9a788491ed5dfaf252e4635f186 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 25 Apr 2022 18:49:06 -0400 Subject: [PATCH 072/141] Roll Engine from 5fdfbe3010bb to 4df9cf27052b (1 revision) (#102529) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index ab406e980e26b..3648a52ab4f87 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -5fdfbe3010bb55f163fc2f2d27f0ca914663e367 +4df9cf27052bbb6c6acdeab17db1bac0bf79a372 From 0411a6f8a3bb6c44aaa69555984cc6e7112374a5 Mon Sep 17 00:00:00 2001 From: keyonghan <54558023+keyonghan@users.noreply.github.com> Date: Mon, 25 Apr 2022 16:14:03 -0700 Subject: [PATCH 073/141] Enable M1 mac/ios tests in prod as bringup: false (#102530) --- .ci.yaml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.ci.yaml b/.ci.yaml index 41ec45cd947fa..47ecaac5d6fea 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -2447,7 +2447,6 @@ targets: - name: Mac_arm64_ios build_ios_framework_module_test recipe: devicelab/devicelab_drone presubmit: false - bringup: true # https://github.com/flutter/flutter/issues/87508 timeout: 60 properties: tags: > @@ -3309,7 +3308,6 @@ targets: - name: Mac_arm64_ios flutter_gallery_ios__compile recipe: devicelab/devicelab_drone presubmit: false - bringup: true # https://github.com/flutter/flutter/issues/87508 timeout: 60 properties: tags: > @@ -3349,7 +3347,6 @@ targets: - name: Mac_arm64_ios hello_world_ios__compile recipe: devicelab/devicelab_drone presubmit: false - bringup: true # https://github.com/flutter/flutter/issues/87508 timeout: 60 properties: tags: > @@ -3372,7 +3369,6 @@ targets: - name: Mac_arm64_ios hot_mode_dev_cycle_macos_target__benchmark recipe: devicelab/devicelab_drone presubmit: false - bringup: true # https://github.com/flutter/flutter/issues/87508 timeout: 60 properties: tags: > @@ -3455,7 +3451,6 @@ targets: - name: Mac_arm64_ios ios_app_with_extensions_test recipe: devicelab/devicelab_drone presubmit: false - bringup: true # https://github.com/flutter/flutter/issues/87508 timeout: 60 properties: tags: > @@ -3476,7 +3471,6 @@ targets: - name: Mac_arm64_ios ios_content_validation_test recipe: devicelab/devicelab_drone presubmit: false - bringup: true # https://github.com/flutter/flutter/issues/87508 timeout: 60 properties: tags: > @@ -3527,7 +3521,6 @@ targets: - name: Mac_arm64_ios macos_chrome_dev_mode recipe: devicelab/devicelab_drone presubmit: false - bringup: true # https://github.com/flutter/flutter/issues/87508 timeout: 60 properties: tags: > @@ -3687,7 +3680,6 @@ targets: - name: Mac_arm64_ios native_ui_tests_ios recipe: devicelab/devicelab_drone presubmit: false - bringup: true # https://github.com/flutter/flutter/issues/87508 timeout: 60 properties: tags: > @@ -3736,7 +3728,6 @@ targets: - name: Mac_arm64_ios run_release_test_macos recipe: devicelab/devicelab_drone presubmit: false - bringup: true # https://github.com/flutter/flutter/issues/87508 timeout: 60 properties: tags: > From f15295cc91dfa1b9705d318edca27cf9605e1f73 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Mon, 25 Apr 2022 17:44:07 -0700 Subject: [PATCH 074/141] [framework] allow disabling image filter layer (#102085) --- .../flutter/lib/src/widgets/image_filter.dart | 46 +++++++++++++++++-- .../test/widgets/image_filter_test.dart | 21 +++++++++ 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/packages/flutter/lib/src/widgets/image_filter.dart b/packages/flutter/lib/src/widgets/image_filter.dart index 935d401789ac1..67f9ae459fecc 100644 --- a/packages/flutter/lib/src/widgets/image_filter.dart +++ b/packages/flutter/lib/src/widgets/image_filter.dart @@ -11,6 +11,19 @@ import 'framework.dart'; /// Applies an [ImageFilter] to its child. /// +/// An image filter will always apply its filter operation to the child widget, +/// even if said filter is conceptually a "no-op", such as an ImageFilter.blur +/// with a radius of 0 or an ImageFilter.matrix with an identity matrix. Setting +/// [ImageFiltered.enabled] to `false` is a more efficient manner of disabling +/// an image filter. +/// +/// The framework does not attempt to optimize out "no-op" filters because it +/// cannot tell the difference between an intentional no-op and a filter that is +/// only incidentally a no-op. Consider an ImageFilter.matrix that is animated +/// and happens to pass through the identity matrix. If the framework identified it +/// as a no-op it would drop and then recreate the layer during the animation which +/// would be more expensive than keeping it around. +/// /// {@youtube 560 315 https://www.youtube.com/watch?v=7Lftorq4i2o} /// /// See also: @@ -27,17 +40,27 @@ class ImageFiltered extends SingleChildRenderObjectWidget { super.key, required this.imageFilter, super.child, + this.enabled = true, }) : assert(imageFilter != null); /// The image filter to apply to the child of this widget. final ImageFilter imageFilter; + /// Whether or not to apply the image filter opation to the child of this + /// widget. + /// + /// Prefer setting enabled to `false` instead of creating a "no-op" filter + /// type for performance reasons. + final bool enabled; + @override - RenderObject createRenderObject(BuildContext context) => _ImageFilterRenderObject(imageFilter); + RenderObject createRenderObject(BuildContext context) => _ImageFilterRenderObject(imageFilter, enabled); @override void updateRenderObject(BuildContext context, RenderObject renderObject) { - (renderObject as _ImageFilterRenderObject).imageFilter = imageFilter; + (renderObject as _ImageFilterRenderObject) + ..enabled = enabled + ..imageFilter = imageFilter; } @override @@ -48,7 +71,17 @@ class ImageFiltered extends SingleChildRenderObjectWidget { } class _ImageFilterRenderObject extends RenderProxyBox { - _ImageFilterRenderObject(this._imageFilter); + _ImageFilterRenderObject(this._imageFilter, this._enabled); + + bool get enabled => _enabled; + bool _enabled; + set enabled(bool value) { + if (enabled == value) { + return; + } + _enabled = value; + markNeedsPaint(); + } ImageFilter get imageFilter => _imageFilter; ImageFilter _imageFilter; @@ -61,11 +94,16 @@ class _ImageFilterRenderObject extends RenderProxyBox { } @override - bool get alwaysNeedsCompositing => child != null; + bool get alwaysNeedsCompositing => child != null && enabled; @override void paint(PaintingContext context, Offset offset) { assert(imageFilter != null); + if (!enabled) { + layer = null; + return super.paint(context, offset); + } + if (layer == null) { layer = ImageFilterLayer(imageFilter: imageFilter); } else { diff --git a/packages/flutter/test/widgets/image_filter_test.dart b/packages/flutter/test/widgets/image_filter_test.dart index 38d949860baa1..6395cb044edca 100644 --- a/packages/flutter/test/widgets/image_filter_test.dart +++ b/packages/flutter/test/widgets/image_filter_test.dart @@ -86,4 +86,25 @@ void main() { await pumpWithSigma(10.0); expect(renderObject.debugLayer, same(originalLayer)); }); + + testWidgets('Image filter - enabled and disabled', (WidgetTester tester) async { + Future pumpWithEnabledStaet(bool enabled) async { + await tester.pumpWidget( + RepaintBoundary( + child: ImageFiltered( + enabled: enabled, + imageFilter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), + child: const Placeholder(), + ), + ), + ); + } + + await pumpWithEnabledStaet(false); + expect(tester.layers, isNot(contains(isA()))); + + + await pumpWithEnabledStaet(true); + expect(tester.layers, contains(isA())); + }); } From 63574cf76ab021877d14be5c39fb77ea8116bab4 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Mon, 25 Apr 2022 18:14:06 -0700 Subject: [PATCH 075/141] add benchmark for animated complex opacity (#102532) --- .ci.yaml | 11 ++++ TESTOWNERS | 1 + .../android/app/src/main/AndroidManifest.xml | 1 + .../macrobenchmarks/lib/common.dart | 1 + dev/benchmarks/macrobenchmarks/lib/main.dart | 9 +++ .../lib/src/animated_complex_opacity.dart | 59 +++++++++++++++++++ ...ted_complex_opacity_perf__e2e_summary.dart | 14 +++++ dev/devicelab/lib/tasks/perf_tests.dart | 7 +++ 8 files changed, 103 insertions(+) create mode 100644 dev/benchmarks/macrobenchmarks/lib/src/animated_complex_opacity.dart create mode 100644 dev/devicelab/bin/tasks/animated_complex_opacity_perf__e2e_summary.dart diff --git a/.ci.yaml b/.ci.yaml index 47ecaac5d6fea..8322c8c8b45d2 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -1453,6 +1453,17 @@ targets: task_name: animated_image_gc_perf scheduler: luci + - name: Linux_android animated_complex_opacity_perf__e2e_summary + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true + timeout: 60 + properties: + tags: > + ["devicelab","android","linux"] + task_name: animated_complex_opacity_perf__e2e_summary + scheduler: luci + - name: Linux_android animated_placeholder_perf__e2e_summary recipe: devicelab/devicelab_drone presubmit: false diff --git a/TESTOWNERS b/TESTOWNERS index d48ef1a5494c3..9706dde1c5154 100644 --- a/TESTOWNERS +++ b/TESTOWNERS @@ -78,6 +78,7 @@ /dev/devicelab/bin/tasks/gradient_consistent_perf__e2e_summary.dart @flar @flutter/engine /dev/devicelab/bin/tasks/gradient_dynamic_perf__e2e_summary.dart @flar @flutter/engine /dev/devicelab/bin/tasks/gradient_static_perf__e2e_summary.dart @flar @flutter/engine +/dev/devicelab/bin/tasks/animated_complex_opacity_perf__e2e_summary.dart @jonahwilliams @flutter/engine ## Windows Android DeviceLab tests /dev/devicelab/bin/tasks/basic_material_app_win__compile.dart @zanderso @flutter/tool diff --git a/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml b/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml index c0f2c6be78295..6453a039057a8 100644 --- a/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml +++ b/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ found in the LICENSE file. --> android:label="macrobenchmarks" android:icon="@mipmap/ic_launcher"> const GradientPerfHomePage(), ...gradientPerfRoutes, + kAnimatedComplexOpacityPerfRouteName: (BuildContext context) => const AnimatedComplexOpacity(), }, ); } @@ -257,6 +259,13 @@ class HomePage extends StatelessWidget { Navigator.pushNamed(context, kGradientPerfRouteName); }, ), + ElevatedButton( + key: const Key(kAnimatedComplexOpacityPerfRouteName), + child: const Text('Animated complex opacity perf'), + onPressed: () { + Navigator.pushNamed(context, kAnimatedComplexOpacityPerfRouteName); + }, + ), ], ), ); diff --git a/dev/benchmarks/macrobenchmarks/lib/src/animated_complex_opacity.dart b/dev/benchmarks/macrobenchmarks/lib/src/animated_complex_opacity.dart new file mode 100644 index 0000000000000..90b2276e343bc --- /dev/null +++ b/dev/benchmarks/macrobenchmarks/lib/src/animated_complex_opacity.dart @@ -0,0 +1,59 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; + +// Various tests to verify that Aniamted opacity layers (i.e. FadeTransition) do not +// dirty children even without explicit repaint boundaries. These intentionally use +// text to ensure we don't measure the opacity peephole case. +class AnimatedComplexOpacity extends StatefulWidget { + const AnimatedComplexOpacity({ super.key }); + + @override + State createState() => _AnimatedComplexOpacityState(); +} + +class _AnimatedComplexOpacityState extends State with SingleTickerProviderStateMixin { + late final AnimationController controller = AnimationController(vsync: this, duration: const Duration(milliseconds: 5000)); + late final Animation animation = controller.drive(Tween(begin: 0.0, end: 1.0)); + + @override + void initState() { + super.initState(); + controller.forward(from: 0.0); + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Scaffold( + body: ListView( + children: [ + for (int i = 0; i < 20; i++) + FadeTransition(opacity: animation, child: Center( + child: Transform.scale(scale: 1.01, child: const ModeratelyComplexWidget()), + )) + ], + ), + ), + ); + } +} + +class ModeratelyComplexWidget extends StatelessWidget { + const ModeratelyComplexWidget({ super.key }); + + @override + Widget build(BuildContext context) { + return const Material( + elevation: 10, + clipBehavior: Clip.hardEdge, + child: ListTile( + leading: Icon(Icons.abc, size: 24), + title: DecoratedBox(decoration: BoxDecoration(color: Colors.red), child: Text('Hello World')), + trailing: FlutterLogo(), + ), + ); + } +} diff --git a/dev/devicelab/bin/tasks/animated_complex_opacity_perf__e2e_summary.dart b/dev/devicelab/bin/tasks/animated_complex_opacity_perf__e2e_summary.dart new file mode 100644 index 0000000000000..64f073714bde0 --- /dev/null +++ b/dev/devicelab/bin/tasks/animated_complex_opacity_perf__e2e_summary.dart @@ -0,0 +1,14 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; + +import 'package:flutter_devicelab/framework/devices.dart'; +import 'package:flutter_devicelab/framework/framework.dart'; +import 'package:flutter_devicelab/tasks/perf_tests.dart'; + +Future main() async { + deviceOperatingSystem = DeviceOperatingSystem.android; + await task(createAnimatedComplexOpacityPerfE2ETest()); +} diff --git a/dev/devicelab/lib/tasks/perf_tests.dart b/dev/devicelab/lib/tasks/perf_tests.dart index a004d8580d8d5..5618cc84613a7 100644 --- a/dev/devicelab/lib/tasks/perf_tests.dart +++ b/dev/devicelab/lib/tasks/perf_tests.dart @@ -577,6 +577,13 @@ TaskFunction createGradientStaticPerfE2ETest() { ).run; } +TaskFunction createAnimatedComplexOpacityPerfE2ETest() { + return PerfTest.e2e( + '${flutterDirectory.path}/dev/benchmarks/macrobenchmarks', + 'test/animated_complex_opacity_perf_e2e.dart', + ).run; +} + Map _average(List> results, int iterations) { final Map tally = {}; for (final Map item in results) { From 2381657394ae95d56bebf121759694d9a0ae258c Mon Sep 17 00:00:00 2001 From: xubaolin Date: Tue, 26 Apr 2022 09:24:07 +0800 Subject: [PATCH 076/141] Fix a `Slider` widget accessibility bug (#102129) --- .../lib/src/material/range_slider.dart | 9 ++- packages/flutter/lib/src/material/slider.dart | 5 +- .../test/material/range_slider_test.dart | 59 ++++++++++++++++++ .../flutter/test/material/slider_test.dart | 60 +++++++++++++++++++ 4 files changed, 126 insertions(+), 7 deletions(-) diff --git a/packages/flutter/lib/src/material/range_slider.dart b/packages/flutter/lib/src/material/range_slider.dart index eff3119b3e87b..bb86fde4859cf 100644 --- a/packages/flutter/lib/src/material/range_slider.dart +++ b/packages/flutter/lib/src/material/range_slider.dart @@ -285,7 +285,9 @@ class RangeSlider extends StatefulWidget { /// If null, the slider is continuous. final int? divisions; - /// Labels to show as text in the [SliderThemeData.rangeValueIndicatorShape]. + /// Labels to show as text in the [SliderThemeData.rangeValueIndicatorShape] + /// when the slider is active and [SliderThemeData.showValueIndicator] + /// is satisfied. /// /// There are two labels: one for the start thumb and one for the end thumb. /// @@ -1491,7 +1493,6 @@ class _RenderRangeSlider extends RenderBox with RelayoutWhenSystemFontsChangeMix double value, double increasedValue, double decreasedValue, - String? label, VoidCallback increaseAction, VoidCallback decreaseAction, ) { @@ -1503,7 +1504,7 @@ class _RenderRangeSlider extends RenderBox with RelayoutWhenSystemFontsChangeMix config.onIncrease = increaseAction; config.onDecrease = decreaseAction; } - config.label = label ?? ''; + if (semanticFormatterCallback != null) { config.value = semanticFormatterCallback!(_state._lerp(value)); config.increasedValue = semanticFormatterCallback!(_state._lerp(increasedValue)); @@ -1529,7 +1530,6 @@ class _RenderRangeSlider extends RenderBox with RelayoutWhenSystemFontsChangeMix values.start, _increasedStartValue, _decreasedStartValue, - labels?.start, _increaseStartAction, _decreaseStartAction, ); @@ -1537,7 +1537,6 @@ class _RenderRangeSlider extends RenderBox with RelayoutWhenSystemFontsChangeMix values.end, _increasedEndValue, _decreasedEndValue, - labels?.end, _increaseEndAction, _decreaseEndAction, ); diff --git a/packages/flutter/lib/src/material/slider.dart b/packages/flutter/lib/src/material/slider.dart index 3110d05c3f5b6..5cb0ee675dc42 100644 --- a/packages/flutter/lib/src/material/slider.dart +++ b/packages/flutter/lib/src/material/slider.dart @@ -317,7 +317,8 @@ class Slider extends StatefulWidget { /// If null, the slider is continuous. final int? divisions; - /// A label to show above the slider when the slider is active. + /// A label to show above the slider when the slider is active and + /// [SliderThemeData.showValueIndicator] is satisfied. /// /// It is used to display the value of a discrete slider, and it is displayed /// as part of the value indicator shape. @@ -1506,7 +1507,7 @@ class _RenderSlider extends RenderBox with RelayoutWhenSystemFontsChangeMixin { config.onIncrease = increaseAction; config.onDecrease = decreaseAction; } - config.label = _label ?? ''; + if (semanticFormatterCallback != null) { config.value = semanticFormatterCallback!(_state._lerp(value)); config.increasedValue = semanticFormatterCallback!(_state._lerp((value + _semanticActionUnit).clamp(0.0, 1.0))); diff --git a/packages/flutter/test/material/range_slider_test.dart b/packages/flutter/test/material/range_slider_test.dart index 621c3da740c7c..6e8595bf0d87e 100644 --- a/packages/flutter/test/material/range_slider_test.dart +++ b/packages/flutter/test/material/range_slider_test.dart @@ -1681,6 +1681,65 @@ void main() { ); }); + // Regression test for https://github.com/flutter/flutter/issues/101868 + testWidgets('RangeSlider.label info should not write to semantic node', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Theme( + data: ThemeData.light(), + child: Directionality( + textDirection: TextDirection.ltr, + child: Material( + child: RangeSlider( + values: const RangeValues(10.0, 12.0), + max: 100.0, + onChanged: (RangeValues v) { }, + labels: const RangeLabels('Begin', 'End'), + ), + ), + ), + ), + ), + ); + + await tester.pumpAndSettle(); + + expect( + tester.getSemantics(find.byType(RangeSlider)), + matchesSemantics( + scopesRoute: true, + children:[ + matchesSemantics( + children: [ + matchesSemantics( + isEnabled: true, + isSlider: true, + hasEnabledState: true, + hasIncreaseAction: true, + hasDecreaseAction: true, + value: '10%', + increasedValue: '10%', + decreasedValue: '5%', + label: '' + ), + matchesSemantics( + isEnabled: true, + isSlider: true, + hasEnabledState: true, + hasIncreaseAction: true, + hasDecreaseAction: true, + value: '12%', + increasedValue: '17%', + decreasedValue: '12%', + label: '' + ), + ], + ), + ], + ), + ); + }); + testWidgets('Range Slider Semantics', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( diff --git a/packages/flutter/test/material/slider_test.dart b/packages/flutter/test/material/slider_test.dart index 354ddde960265..543831055c32f 100644 --- a/packages/flutter/test/material/slider_test.dart +++ b/packages/flutter/test/material/slider_test.dart @@ -1816,6 +1816,66 @@ void main() { semantics.dispose(); }); + // Regression test for https://github.com/flutter/flutter/issues/101868 + testWidgets('Slider.label info should not write to semantic node', (WidgetTester tester) async { + final SemanticsTester semantics = SemanticsTester(tester); + + await tester.pumpWidget(MaterialApp( + home: Directionality( + textDirection: TextDirection.ltr, + child: Material( + child: Slider( + value: 40.0, + max: 200.0, + divisions: 10, + semanticFormatterCallback: (double value) => value.round().toString(), + onChanged: (double v) { }, + label: 'Bingo', + ), + ), + ), + )); + + expect( + semantics, + hasSemantics( + TestSemantics.root( + children: [ + TestSemantics( + id: 1, + textDirection: TextDirection.ltr, + children: [ + TestSemantics( + id: 2, + children: [ + TestSemantics( + id: 3, + flags: [SemanticsFlag.scopesRoute], + children: [ + TestSemantics( + id: 4, + flags: [SemanticsFlag.hasEnabledState, SemanticsFlag.isEnabled, SemanticsFlag.isFocusable, SemanticsFlag.isSlider], + actions: [SemanticsAction.increase, SemanticsAction.decrease], + value: '40', + increasedValue: '60', + decreasedValue: '20', + textDirection: TextDirection.ltr, + ), + ], + ), + ], + ), + ], + ), + ], + ), + ignoreRect: true, + ignoreTransform: true, + ), + ); + semantics.dispose(); + }); + testWidgets('Slider is focusable and has correct focus color', (WidgetTester tester) async { final FocusNode focusNode = FocusNode(debugLabel: 'Slider'); tester.binding.focusManager.highlightStrategy = FocusHighlightStrategy.alwaysTraditional; From fa96ddd42789cf42ea1aa9c2f3635e32b505fd78 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Mon, 25 Apr 2022 21:39:07 -0700 Subject: [PATCH 077/141] add missing benchmark test file fromhttps://github.com/flutter/flutter/pull/102532 (#102544) --- .../test/animated_complex_opacity_perf_e2e.dart | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 dev/benchmarks/macrobenchmarks/test/animated_complex_opacity_perf_e2e.dart diff --git a/dev/benchmarks/macrobenchmarks/test/animated_complex_opacity_perf_e2e.dart b/dev/benchmarks/macrobenchmarks/test/animated_complex_opacity_perf_e2e.dart new file mode 100644 index 0000000000000..cd6e4f92f5c77 --- /dev/null +++ b/dev/benchmarks/macrobenchmarks/test/animated_complex_opacity_perf_e2e.dart @@ -0,0 +1,16 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:macrobenchmarks/common.dart'; + +import 'util.dart'; + +void main() { + macroPerfTestE2E( + 'animated_complex_opacity_perf', + kAnimatedComplexOpacityPerfRouteName, + pageDelay: const Duration(seconds: 1), + duration: const Duration(seconds: 5), + ); +} From de6689aaa32ec32d738884850d0df6caab1290cf Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 01:02:38 -0400 Subject: [PATCH 078/141] Roll Engine from 4df9cf27052b to 79152137a94c (8 revisions) (#102551) * b2ca1ce53 [web] Migrate Flutter Web to JS static interop - 14. (flutter/engine#32683) * d3886d6c5 Roll Fuchsia Linux SDK from MbA1RtjV4... to YyokSAVV4... (flutter/engine#32907) * 0aca7c0a1 Roll Skia from 4f33f5bef8eb to f8e52b27aa70 (4 revisions) (flutter/engine#32911) * ccf075470 Roll Skia from f8e52b27aa70 to 74742130b08d (2 revisions) (flutter/engine#32913) * a2d8df99e Roll Skia from 74742130b08d to 82146a7fcde2 (1 revision) (flutter/engine#32914) * 1e19613db Roll Fuchsia Mac SDK from JVNKiIJWP... to Jki3kG8_P... (flutter/engine#32916) * 65bc7e348 Roll Dart SDK from 865c2ff0940e to e89b629ed91d (1 revision) (flutter/engine#32917) * 79152137a Revert "[web] Migrate Flutter Web to JS static interop - 14. (#32683)" (flutter/engine#32919) * Add impellerc to conductor codesigning list * Update coductor codesigning for libtessellator.dylib Co-authored-by: Zachary Anderson --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- dev/conductor/core/lib/src/codesign.dart | 2 ++ 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 3648a52ab4f87..648830f1b1802 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -4df9cf27052bbb6c6acdeab17db1bac0bf79a372 +79152137a94cf2c0efd84d783531c8b3839593c3 diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index 0d44851a49b42..8fe2d423b387a 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -MbA1RtjV4CJorJFQIR2Ueo6zQWyA00GExqKIWj3bYcEC +YyokSAVV4CDbCsZkAKj1Qiony-m4sjI-Pvwb1wX18ZkC diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index d4df5be730842..1bcedb32f599e 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -JVNKiIJWP2nsg080g4dtv3nbXCEU_BKeBv23bgWC9IUC +Jki3kG8_PI7MxcaiJMq3S_hlIs_wVuqBMOWOnuEHaw0C diff --git a/dev/conductor/core/lib/src/codesign.dart b/dev/conductor/core/lib/src/codesign.dart index 271a5bcd1823c..32b3b7f0efe36 100644 --- a/dev/conductor/core/lib/src/codesign.dart +++ b/dev/conductor/core/lib/src/codesign.dart @@ -189,6 +189,8 @@ class CodesignCommand extends Command { 'artifacts/engine/darwin-x64-release/FlutterMacOS.framework/Versions/A/FlutterMacOS', 'artifacts/engine/darwin-x64/FlutterMacOS.framework/Versions/A/FlutterMacOS', 'artifacts/engine/darwin-x64/font-subset', + 'artifacts/engine/darwin-x64/impellerc', + 'artifacts/engine/darwin-x64/libtessellator.dylib', 'artifacts/engine/ios-profile/Flutter.xcframework/ios-arm64/Flutter.framework/Flutter', 'artifacts/engine/ios-profile/Flutter.xcframework/ios-arm64_x86_64-simulator/Flutter.framework/Flutter', 'artifacts/engine/ios-release/Flutter.xcframework/ios-arm64/Flutter.framework/Flutter', From 719a3816b172adf3304878ecd14df0f38c03b4a8 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 02:09:07 -0400 Subject: [PATCH 079/141] Roll Engine from 79152137a94c to df21738974e3 (1 revision) (#102553) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 648830f1b1802..5ebbd77102d6b 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -79152137a94cf2c0efd84d783531c8b3839593c3 +df21738974e335897a23a764b992b14a1fc13766 From c593903eee813d57d2a6138043d83dd6238d1244 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 03:14:06 -0400 Subject: [PATCH 080/141] Roll Engine from df21738974e3 to 8aace64d19fc (1 revision) (#102555) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 5ebbd77102d6b..b9b5db1343a2c 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -df21738974e335897a23a764b992b14a1fc13766 +8aace64d19fcf6330ceccdc6f4a2a2726064c47a From 646b910c9cefa394dd1e906444ed1cbb75255b08 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 05:14:04 -0400 Subject: [PATCH 081/141] Roll Engine from 8aace64d19fc to cd78221a88ae (1 revision) (#102562) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index b9b5db1343a2c..d13baebf32373 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -8aace64d19fcf6330ceccdc6f4a2a2726064c47a +cd78221a88ae704ae94323344cc793d6ecc20e9c From bc7d3bbc65b3786800d1a8ad137d80e1bd7e3fd7 Mon Sep 17 00:00:00 2001 From: Bruno Leroux Date: Tue, 26 Apr 2022 11:24:05 +0200 Subject: [PATCH 082/141] Fix DraggableScrollableController.animateTo leaks Ticker (#102504) --- .../src/widgets/draggable_scrollable_sheet.dart | 17 +++++++++++++++++ .../draggable_scrollable_sheet_test.dart | 15 +++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart b/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart index 0ccae36798f3d..a53437444a3ca 100644 --- a/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart +++ b/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart @@ -52,6 +52,7 @@ typedef ScrollableWidgetBuilder = Widget Function( /// constraints provided to an attached sheet change. class DraggableScrollableController extends ChangeNotifier { _DraggableScrollableSheetScrollController? _attachedController; + final Set _animationControllers = {}; /// Get the current size (as a fraction of the parent height) of the attached sheet. double get size { @@ -115,6 +116,7 @@ class DraggableScrollableController extends ChangeNotifier { vsync: _attachedController!.position.context.vsync, value: _attachedController!.extent.currentSize, ); + _animationControllers.add(animationController); _attachedController!.position.goIdle(); // This disables any snapping until the next user interaction with the sheet. _attachedController!.extent.hasDragged = false; @@ -175,6 +177,7 @@ class DraggableScrollableController extends ChangeNotifier { assert(_attachedController == null, 'Draggable scrollable controller is already attached to a sheet.'); _attachedController = scrollController; _attachedController!.extent._currentSize.addListener(notifyListeners); + _attachedController!.onPositionDetached = _disposeAnimationControllers; } void _onExtentReplaced(_DraggableSheetExtent previousExtent) { @@ -193,6 +196,13 @@ class DraggableScrollableController extends ChangeNotifier { _attachedController?.extent._currentSize.removeListener(notifyListeners); _attachedController = null; } + + void _disposeAnimationControllers() { + for (final AnimationController animationController in _animationControllers) { + animationController.dispose(); + } + _animationControllers.clear(); + } } /// A container for a [Scrollable] that responds to drag gestures by resizing @@ -724,6 +734,7 @@ class _DraggableScrollableSheetScrollController extends ScrollController { }) : assert(extent != null); _DraggableSheetExtent extent; + VoidCallback? onPositionDetached; @override _DraggableScrollableSheetScrollPosition createScrollPosition( @@ -764,6 +775,12 @@ class _DraggableScrollableSheetScrollController extends ScrollController { } extent.updateSize(extent.initialSize, position.context.notificationContext!); } + + @override + void detach(ScrollPosition position) { + onPositionDetached?.call(); + super.detach(position); + } } /// A scroll position that manages scroll activities for diff --git a/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart b/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart index bfd65190b9dc9..28375d25328c2 100644 --- a/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart +++ b/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart @@ -1209,4 +1209,19 @@ void main() { expect(controller.isAttached, true); expect(controller.size, isNotNull); }); + + testWidgets('DraggableScrollableController.animateTo should not leak Ticker', (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/102483 + final DraggableScrollableController controller = DraggableScrollableController(); + await tester.pumpWidget(_boilerplate(() {}, controller: controller)); + + controller.animateTo(0.0, curve: Curves.linear, duration: const Duration(milliseconds: 200)); + await tester.pump(); + + // Dispose the DraggableScrollableSheet + await tester.pumpWidget(const SizedBox.shrink()); + // Controller should be detached and no exception should be thrown + expect(controller.isAttached, false); + expect(tester.takeException(), isNull); + }); } From 34d84209cf7ece5fb82ac6a114f86a2291754824 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 26 Apr 2022 08:44:09 -0700 Subject: [PATCH 083/141] Avoid scheduling a forced frame when there is no child to the renderView (#102556) --- .../flutter/lib/src/rendering/binding.dart | 5 ++++- .../flutter/test/rendering/binding_test.dart | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 packages/flutter/test/rendering/binding_test.dart diff --git a/packages/flutter/lib/src/rendering/binding.dart b/packages/flutter/lib/src/rendering/binding.dart index 2e59a4055faf2..ed1a0e28f5dd0 100644 --- a/packages/flutter/lib/src/rendering/binding.dart +++ b/packages/flutter/lib/src/rendering/binding.dart @@ -235,10 +235,13 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture /// /// See [dart:ui.PlatformDispatcher.onMetricsChanged]. @protected + @visibleForTesting void handleMetricsChanged() { assert(renderView != null); renderView.configuration = createViewConfiguration(); - scheduleForcedFrame(); + if (renderView.child != null) { + scheduleForcedFrame(); + } } /// Called when the platform text scale factor changes. diff --git a/packages/flutter/test/rendering/binding_test.dart b/packages/flutter/test/rendering/binding_test.dart new file mode 100644 index 0000000000000..c10df12b05f41 --- /dev/null +++ b/packages/flutter/test/rendering/binding_test.dart @@ -0,0 +1,22 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/rendering.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + WidgetsFlutterBinding.ensureInitialized(); + + test('handleMetricsChanged does not scheduleForcedFrame unless there is a child to the renderView', () async { + expect(SchedulerBinding.instance.hasScheduledFrame, false); + RendererBinding.instance.handleMetricsChanged(); + expect(SchedulerBinding.instance.hasScheduledFrame, false); + + RendererBinding.instance.renderView.child = RenderLimitedBox(); + RendererBinding.instance.handleMetricsChanged(); + expect(SchedulerBinding.instance.hasScheduledFrame, true); + }); +} From 14c5787cc3e9d1c30064009e3945b2b95742c11f Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 12:14:05 -0400 Subject: [PATCH 084/141] Roll Engine from cd78221a88ae to 6d60b810d747 (1 revision) (#102575) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index d13baebf32373..9bf7bbe047aee 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -cd78221a88ae704ae94323344cc793d6ecc20e9c +6d60b810d74766f533640f11a57843135cf55b14 diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index 8fe2d423b387a..7099c48b4dcac 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -YyokSAVV4CDbCsZkAKj1Qiony-m4sjI-Pvwb1wX18ZkC +GPkj69-XiXEkbjYX9L7LD42YJVhQq51Tlt8Fjs3GXtsC From 61bbaaa44a1aed51c3dbf1ccf36b21dcdb6cf30a Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 12:19:08 -0400 Subject: [PATCH 085/141] Roll Plugins from 4ff0157340ea to e55659835427 (1 revision) (#102576) --- bin/internal/flutter_plugins.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/flutter_plugins.version b/bin/internal/flutter_plugins.version index 8fcea5085fea7..14e754218556d 100644 --- a/bin/internal/flutter_plugins.version +++ b/bin/internal/flutter_plugins.version @@ -1 +1 @@ -4ff0157340ea1874ca753bf921807e62c1943099 +e55659835427fdc2b3c838548ce7e49267f100fd From 0cb5772e73cb7641c77ddbb5662333d43b02ef9c Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Tue, 26 Apr 2022 10:19:09 -0700 Subject: [PATCH 086/141] [framework] allow other RenderObjects to behave like repaint boundaries (#101952) --- .../flutter/lib/src/rendering/object.dart | 205 +++++++++++-- .../flutter/lib/src/rendering/proxy_box.dart | 64 ++-- packages/flutter/lib/src/widgets/heroes.dart | 8 +- .../flutter/test/rendering/debug_test.dart | 3 +- .../test/rendering/proxy_box_test.dart | 207 +++++++++++++ .../animated_opacity_repaint_test.dart | 90 ++++++ .../test/widgets/opacity_repaint_test.dart | 275 ++++++++++++++++++ 7 files changed, 794 insertions(+), 58 deletions(-) create mode 100644 packages/flutter/test/widgets/animated_opacity_repaint_test.dart create mode 100644 packages/flutter/test/widgets/opacity_repaint_test.dart diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart index 50ad60b44da61..c517ae1a64c61 100644 --- a/packages/flutter/lib/src/rendering/object.dart +++ b/packages/flutter/lib/src/rendering/object.dart @@ -121,22 +121,38 @@ class PaintingContext extends ClipContext { if (childLayer == null) { assert(debugAlsoPaintedParent); assert(child._layerHandle.layer == null); + // Not using the `layer` setter because the setter asserts that we not // replace the layer for repaint boundaries. That assertion does not // apply here because this is exactly the place designed to create a // layer for repaint boundaries. - final OffsetLayer layer = OffsetLayer(); + final OffsetLayer layer = child.updateCompositedLayer(oldLayer: null); child._layerHandle.layer = childLayer = layer; } else { assert(debugAlsoPaintedParent || childLayer.attached); + Offset? debugOldOffset; + assert(() { + debugOldOffset = childLayer!.offset; + return true; + }()); childLayer.removeAllChildren(); + final OffsetLayer updatedLayer = child.updateCompositedLayer(oldLayer: childLayer); + assert(identical(updatedLayer, childLayer), + '$child created a new layer instance $updatedLayer instead of reusing the ' + 'existing layer $childLayer. See the documentation of RenderObject.updateCompositedLayer ' + 'for more information on how to correctly implement this method.' + ); + assert(debugOldOffset == updatedLayer.offset); } + child._needsCompositedLayerUpdate = false; + assert(identical(childLayer, child._layerHandle.layer)); assert(child._layerHandle.layer is OffsetLayer); assert(() { childLayer!.debugCreator = child.debugCreator ?? child.runtimeType; return true; }()); + childContext ??= PaintingContext(childLayer, child.paintBounds); child._paintWithContext(childContext, Offset.zero); @@ -146,6 +162,38 @@ class PaintingContext extends ClipContext { childContext.stopRecordingIfNeeded(); } + /// Update the composited layer of [child] without repainting its children. + /// + /// The render object must be attached to a [PipelineOwner], must have a + /// composited layer, and must be in need of a composited layer update but + /// not in need of painting. The render object's layer is re-used, and none + /// of its children are repaint or their layers updated. + /// + /// See also: + /// + /// * [RenderObject.isRepaintBoundary], which determines if a [RenderObject] + /// has a composited layer. + static void updateLayerProperties(RenderObject child) { + assert(child.isRepaintBoundary && child._wasRepaintBoundary); + assert(!child._needsPaint); + assert(child._layerHandle.layer != null); + + final OffsetLayer childLayer = child._layerHandle.layer! as OffsetLayer; + Offset? debugOldOffset; + assert(() { + debugOldOffset = childLayer.offset; + return true; + }()); + final OffsetLayer updatedLayer = child.updateCompositedLayer(oldLayer: childLayer); + assert(identical(updatedLayer, childLayer), + '$child created a new layer instance $updatedLayer instead of reusing the ' + 'existing layer $childLayer. See the documentation of RenderObject.updateCompositedLayer ' + 'for more information on how to correctly implement this method.' + ); + assert(debugOldOffset == updatedLayer.offset); + child._needsCompositedLayerUpdate = false; + } + /// In debug mode, repaint the given render object using a custom painting /// context that can record the results of the painting operation in addition /// to performing the regular paint of the child. @@ -183,6 +231,12 @@ class PaintingContext extends ClipContext { if (child.isRepaintBoundary) { stopRecordingIfNeeded(); _compositeChild(child, offset); + // If a render object was a repaint boundary but no longer is one, this + // is where the framework managed layer is automatically disposed. + } else if (child._wasRepaintBoundary) { + assert(child._layerHandle.layer is OffsetLayer); + child._layerHandle.layer = null; + child._paintWithContext(this, offset); } else { child._paintWithContext(this, offset); } @@ -194,9 +248,12 @@ class PaintingContext extends ClipContext { assert(_canvas == null || _canvas!.getSaveCount() == 1); // Create a layer for our child, and paint the child into it. - if (child._needsPaint) { + if (child._needsPaint || !child._wasRepaintBoundary) { repaintCompositedChild(child, debugAlsoPaintedParent: true); } else { + if (child._needsCompositedLayerUpdate) { + updateLayerProperties(child); + } assert(() { // register the call for RepaintBoundary metrics child.debugRegisterRepaintBoundaryPaint(); @@ -978,19 +1035,25 @@ class PipelineOwner { arguments: debugTimelineArguments, ); } - assert(() { - _debugDoingPaint = true; - return true; - }()); try { + assert(() { + _debugDoingPaint = true; + return true; + }()); final List dirtyNodes = _nodesNeedingPaint; _nodesNeedingPaint = []; + // Sort the dirty nodes in reverse order (deepest first). for (final RenderObject node in dirtyNodes..sort((RenderObject a, RenderObject b) => b.depth - a.depth)) { assert(node._layerHandle.layer != null); - if (node._needsPaint && node.owner == this) { + if ((node._needsPaint || node._needsCompositedLayerUpdate) && node.owner == this) { if (node._layerHandle.layer!.attached) { - PaintingContext.repaintCompositedChild(node); + assert(node.isRepaintBoundary); + if (node._needsPaint) { + PaintingContext.repaintCompositedChild(node); + } else { + PaintingContext.updateLayerProperties(node); + } } else { node._skippedPaintingOnLayer(); } @@ -1236,6 +1299,7 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im /// Initializes internal fields for subclasses. RenderObject() { _needsCompositing = isRepaintBoundary || alwaysNeedsCompositing; + _wasRepaintBoundary = isRepaintBoundary; } /// Cause the entire subtree rooted at the given [RenderObject] to be marked @@ -2070,12 +2134,13 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im /// to repaint. /// /// If this getter returns true, the [paintBounds] are applied to this object - /// and all descendants. The framework automatically creates an [OffsetLayer] - /// and assigns it to the [layer] field. Render objects that declare - /// themselves as repaint boundaries must not replace the layer created by - /// the framework. + /// and all descendants. The framework invokes [RenderObject.updateCompositedLayer] + /// to create an [OffsetLayer] and assigns it to the [layer] field. + /// Render objects that declare themselves as repaint boundaries must not replace + /// the layer created by the framework. /// - /// Warning: This getter must not change value over the lifetime of this object. + /// If the value of this getter changes, [markNeedsCompositingBitsUpdate] must + /// be called. /// /// See [RepaintBoundary] for more information about how repaint boundaries function. bool get isRepaintBoundary => false; @@ -2098,6 +2163,34 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im @protected bool get alwaysNeedsCompositing => false; + late bool _wasRepaintBoundary; + + /// Update the composited layer owned by this render object. + /// + /// This method is called by the framework when [isRepaintBoundary] is true. + /// + /// If [oldLayer] is `null`, this method must return a new [OffsetLayer] + /// (or subtype thereof). If [oldLayer] is not `null`, then this method must + /// reuse the layer instance that is provided - it is an error to create a new + /// layer in this instance. The layer will be disposed by the framework when + /// either the render object is disposed or if it is no longer a repaint + /// boundary. + /// + /// The [OffsetLayer.offset] property will be managed by the framework and + /// must not be updated by this method. + /// + /// If a property of the composited layer needs to be updated, the render object + /// must call [markNeedsCompositedLayerUpdate] which will schedule this method + /// to be called without repainting children. If this widget was marked as + /// needing to paint and needing a composited layer update, this method is only + /// called once. + // TODO(jonahwilliams): https://github.com/flutter/flutter/issues/102102 revisit the + // contraint that the instance/type of layer cannot be changed at runtime. + OffsetLayer updateCompositedLayer({required covariant OffsetLayer? oldLayer}) { + assert(isRepaintBoundary); + return oldLayer ?? OffsetLayer(); + } + /// The compositing layer that this render object uses to repaint. /// /// If this render object is not a repaint boundary, it is the responsibility @@ -2184,7 +2277,8 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im final RenderObject parent = this.parent! as RenderObject; if (parent._needsCompositingBitsUpdate) return; - if (!isRepaintBoundary && !parent.isRepaintBoundary) { + + if ((!_wasRepaintBoundary || !isRepaintBoundary) && !parent.isRepaintBoundary) { parent.markNeedsCompositingBitsUpdate(); return; } @@ -2225,9 +2319,23 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im }); if (isRepaintBoundary || alwaysNeedsCompositing) _needsCompositing = true; - if (oldNeedsCompositing != _needsCompositing) + // If a node was previously a repaint boundary, but no longer is one, then + // regardless of its compositing state we need to find a new parent to + // paint from. To do this, we mark it clean again so that the traversal + // in markNeedsPaint is not short-circuited. It is removed from _nodesNeedingPaint + // so that we do not attempt to paint from it after locating a parent. + if (!isRepaintBoundary && _wasRepaintBoundary) { + _needsPaint = false; + _needsCompositedLayerUpdate = false; + owner?._nodesNeedingPaint.remove(this); + _needsCompositingBitsUpdate = false; + markNeedsPaint(); + } else if (oldNeedsCompositing != _needsCompositing) { + _needsCompositingBitsUpdate = false; markNeedsPaint(); - _needsCompositingBitsUpdate = false; + } else { + _needsCompositingBitsUpdate = false; + } } /// Whether this render object's paint information is dirty. @@ -2254,6 +2362,24 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im } bool _needsPaint = true; + /// Whether this render object's layer information is dirty. + /// + /// This is only set in debug mode. In general, render objects should not need + /// to condition their runtime behavior on whether they are dirty or not, + /// since they should only be marked dirty immediately prior to being laid + /// out and painted. (In release builds, this throws.) + /// + /// It is intended to be used by tests and asserts. + bool get debugNeedsCompositedLayerUpdate { + late bool result; + assert(() { + result = _needsCompositedLayerUpdate; + return true; + }()); + return result; + } + bool _needsCompositedLayerUpdate = false; + /// Mark this render object as having changed its visual appearance. /// /// Rather than eagerly updating this render object's display list @@ -2280,7 +2406,9 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im if (_needsPaint) return; _needsPaint = true; - if (isRepaintBoundary) { + // If this was not previously a repaint boundary it will not have + // a layer we can paint from. + if (isRepaintBoundary && _wasRepaintBoundary) { assert(() { if (debugPrintMarkNeedsPaintStacks) debugPrintStack(label: 'markNeedsPaint() called for $this'); @@ -2312,6 +2440,45 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im } } + /// Mark this render object as having changed a property on its composited + /// layer. + /// + /// Render objects that have a composited layer have [isRepaintBoundary] equal + /// to true may update the properties of that composited layer without repainting + /// their children. If this render object is a repaint boundary but does + /// not yet have a composited layer created for it, this method will instead + /// mark the nearest repaint boundary parent as needing to be painted. + /// + /// If this method is called on a render object that is not a repaint boundary + /// or is a repaint boundary but hasn't been composited yet, it is equivalent + /// to calling [markNeedsPaint]. + /// + /// See also: + /// + /// * [RenderOpacity], which uses this method when its opacity is updated to + /// update the layer opacity without repainting children. + void markNeedsCompositedLayerUpdate() { + assert(!_debugDisposed); + assert(owner == null || !owner!.debugDoingPaint); + if (_needsCompositedLayerUpdate || _needsPaint) { + return; + } + _needsCompositedLayerUpdate = true; + // If this was not previously a repaint boundary it will not have + // a layer we can paint from. + if (isRepaintBoundary && _wasRepaintBoundary) { + // If we always have our own layer, then we can just repaint + // ourselves without involving any other nodes. + assert(_layerHandle.layer != null); + if (owner != null) { + owner!._nodesNeedingPaint.add(this); + owner!.requestVisualUpdate(); + } + } else { + markNeedsPaint(); + } + } + // Called when flushPaint() tries to make us paint but our layer is detached. // To make sure that our subtree is repainted when it's finally reattached, // even in the case where some ancestor layer is itself never marked dirty, we @@ -2320,7 +2487,7 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im void _skippedPaintingOnLayer() { assert(attached); assert(isRepaintBoundary); - assert(_needsPaint); + assert(_needsPaint || _needsCompositedLayerUpdate); assert(_layerHandle.layer != null); assert(!_layerHandle.layer!.attached); AbstractNode? node = parent; @@ -2475,6 +2642,8 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im return true; }()); _needsPaint = false; + _needsCompositedLayerUpdate = false; + _wasRepaintBoundary = isRepaintBoundary; try { paint(context, offset); assert(!_needsLayout); // check that the paint() method didn't mark us dirty again diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart index 2b62dafa78d2c..7e45a9d82d606 100644 --- a/packages/flutter/lib/src/rendering/proxy_box.dart +++ b/packages/flutter/lib/src/rendering/proxy_box.dart @@ -843,7 +843,14 @@ class RenderOpacity extends RenderProxyBox { super(child); @override - bool get alwaysNeedsCompositing => child != null && (_alpha > 0); + bool get isRepaintBoundary => child != null && (_alpha > 0); + + @override + OffsetLayer updateCompositedLayer({required covariant OpacityLayer? oldLayer}) { + final OpacityLayer updatedLayer = oldLayer ?? OpacityLayer(); + updatedLayer.alpha = _alpha; + return updatedLayer; + } int _alpha; @@ -864,13 +871,13 @@ class RenderOpacity extends RenderProxyBox { assert(value >= 0.0 && value <= 1.0); if (_opacity == value) return; - final bool didNeedCompositing = alwaysNeedsCompositing; + final bool wasRepaintBoundary = isRepaintBoundary; final bool wasVisible = _alpha != 0; _opacity = value; _alpha = ui.Color.getAlphaFromOpacity(_opacity); - if (didNeedCompositing != alwaysNeedsCompositing) + if (wasRepaintBoundary != isRepaintBoundary) markNeedsCompositingBitsUpdate(); - markNeedsPaint(); + markNeedsCompositedLayerUpdate(); if (wasVisible != (_alpha != 0) && !alwaysIncludeSemantics) markNeedsSemanticsUpdate(); } @@ -891,19 +898,10 @@ class RenderOpacity extends RenderProxyBox { @override void paint(PaintingContext context, Offset offset) { - if (child != null) { - if (_alpha == 0) { - // No need to keep the layer. We'll create a new one if necessary. - layer = null; - return; - } - assert(needsCompositing); - layer = context.pushOpacity(offset, _alpha, super.paint, oldLayer: layer as OpacityLayer?); - assert(() { - layer!.debugCreator = debugCreator; - return true; - }()); + if (_alpha == 0) { + return; } + super.paint(context, offset); } @override @@ -929,8 +927,15 @@ mixin RenderAnimatedOpacityMixin on RenderObjectWithChil int? _alpha; @override - bool get alwaysNeedsCompositing => child != null && _currentlyNeedsCompositing!; - bool? _currentlyNeedsCompositing; + bool get isRepaintBoundary => child != null && _currentlyIsRepaintBoundary!; + bool? _currentlyIsRepaintBoundary; + + @override + OffsetLayer updateCompositedLayer({required covariant OpacityLayer? oldLayer}) { + final OpacityLayer updatedLayer = oldLayer ?? OpacityLayer(); + updatedLayer.alpha = _alpha; + return updatedLayer; + } /// The animation that drives this render object's opacity. /// @@ -990,11 +995,11 @@ mixin RenderAnimatedOpacityMixin on RenderObjectWithChil final int? oldAlpha = _alpha; _alpha = ui.Color.getAlphaFromOpacity(opacity.value); if (oldAlpha != _alpha) { - final bool? didNeedCompositing = _currentlyNeedsCompositing; - _currentlyNeedsCompositing = _alpha! > 0; - if (child != null && didNeedCompositing != _currentlyNeedsCompositing) + final bool? wasRepaintBoundary = _currentlyIsRepaintBoundary; + _currentlyIsRepaintBoundary = _alpha! > 0; + if (child != null && wasRepaintBoundary != _currentlyIsRepaintBoundary) markNeedsCompositingBitsUpdate(); - markNeedsPaint(); + markNeedsCompositedLayerUpdate(); if (oldAlpha == 0 || _alpha == 0) markNeedsSemanticsUpdate(); } @@ -1002,19 +1007,10 @@ mixin RenderAnimatedOpacityMixin on RenderObjectWithChil @override void paint(PaintingContext context, Offset offset) { - if (child != null) { - if (_alpha == 0) { - // No need to keep the layer. We'll create a new one if necessary. - layer = null; - return; - } - assert(needsCompositing); - layer = context.pushOpacity(offset, _alpha!, super.paint, oldLayer: layer as OpacityLayer?); - assert(() { - layer!.debugCreator = debugCreator; - return true; - }()); + if (_alpha == 0) { + return; } + super.paint(context, offset); } @override diff --git a/packages/flutter/lib/src/widgets/heroes.dart b/packages/flutter/lib/src/widgets/heroes.dart index 8cb222f24fe99..253a487ba1a88 100644 --- a/packages/flutter/lib/src/widgets/heroes.dart +++ b/packages/flutter/lib/src/widgets/heroes.dart @@ -545,11 +545,9 @@ class _HeroFlight { bottom: offsets.bottom, left: offsets.left, child: IgnorePointer( - child: RepaintBoundary( - child: FadeTransition( - opacity: _heroOpacity, - child: child, - ), + child: FadeTransition( + opacity: _heroOpacity, + child: child, ), ), ); diff --git a/packages/flutter/test/rendering/debug_test.dart b/packages/flutter/test/rendering/debug_test.dart index 87c69d7f5e4f7..b31703e6c5e0f 100644 --- a/packages/flutter/test/rendering/debug_test.dart +++ b/packages/flutter/test/rendering/debug_test.dart @@ -231,7 +231,8 @@ void main() { rootLayer, const Rect.fromLTWH(0, 0, 500, 500), ); - root.paint(context, const Offset(40, 40)); + context.paintChild(root, const Offset(40, 40)); + final OpacityLayer opacityLayer = rootLayer.firstChild! as OpacityLayer; expect(opacityLayer.offset, const Offset(40, 40)); debugDisableOpacityLayers = false; diff --git a/packages/flutter/test/rendering/proxy_box_test.dart b/packages/flutter/test/rendering/proxy_box_test.dart index 28b1a0fb640fb..70dfff9df4cff 100644 --- a/packages/flutter/test/rendering/proxy_box_test.dart +++ b/packages/flutter/test/rendering/proxy_box_test.dart @@ -561,6 +561,178 @@ void main() { // The follower is still hit testable because there is a leader layer. expect(follower.hitTest(hitTestResult, position: Offset.zero), isTrue); }); + + test('RenderObject can become a repaint boundary', () { + final ConditionalRepaintBoundary childBox = ConditionalRepaintBoundary(); + final ConditionalRepaintBoundary renderBox = ConditionalRepaintBoundary(child: childBox); + + layout(renderBox, phase: EnginePhase.composite); + + expect(childBox.paintCount, 1); + expect(renderBox.paintCount, 1); + + renderBox.isRepaintBoundary = true; + renderBox.markNeedsCompositingBitsUpdate(); + renderBox.markNeedsCompositedLayerUpdate(); + + pumpFrame(phase: EnginePhase.composite); + + // The first time the render object becomes a repaint boundary + // we must repaint from the parent to allow the layer to be + // created. + expect(childBox.paintCount, 2); + expect(renderBox.paintCount, 2); + expect(renderBox.debugLayer, isA()); + + renderBox.markNeedsCompositedLayerUpdate(); + expect(renderBox.debugNeedsPaint, false); + expect(renderBox.debugNeedsCompositedLayerUpdate, true); + + pumpFrame(phase: EnginePhase.composite); + + // The second time the layer exists and we can skip paint. + expect(childBox.paintCount, 2); + expect(renderBox.paintCount, 2); + expect(renderBox.debugLayer, isA()); + + renderBox.isRepaintBoundary = false; + renderBox.markNeedsCompositingBitsUpdate(); + + pumpFrame(phase: EnginePhase.composite); + + // Once it stops being a repaint boundary we must repaint to + // remove the layer. its required that the render object + // perform this action in paint. + expect(childBox.paintCount, 3); + expect(renderBox.paintCount, 3); + expect(renderBox.debugLayer, null); + + // When the render object is not a repaint boundary, calling + // markNeedsLayerPropertyUpdate is the same as calling + // markNeedsPaint. + + renderBox.markNeedsCompositedLayerUpdate(); + expect(renderBox.debugNeedsPaint, true); + expect(renderBox.debugNeedsCompositedLayerUpdate, true); + }); + + test('RenderObject with repaint boundary asserts when a composited layer is replaced during layer property update', () { + final ConditionalRepaintBoundary childBox = ConditionalRepaintBoundary(isRepaintBoundary: true); + final ConditionalRepaintBoundary renderBox = ConditionalRepaintBoundary(child: childBox); + + // Ignore old layer. + childBox.offsetLayerFactory = (OffsetLayer? oldLayer) { + return TestOffsetLayerA(); + }; + + layout(renderBox, phase: EnginePhase.composite); + + expect(childBox.paintCount, 1); + expect(renderBox.paintCount, 1); + + renderBox.markNeedsCompositedLayerUpdate(); + + pumpFrame(phase: EnginePhase.composite, onErrors: expectAssertionError); + }, skip: kIsWeb); // https://github.com/flutter/flutter/issues/102086 + + test('RenderObject with repaint boundary asserts when a composited layer is replaced during painting', () { + final ConditionalRepaintBoundary childBox = ConditionalRepaintBoundary(isRepaintBoundary: true); + final ConditionalRepaintBoundary renderBox = ConditionalRepaintBoundary(child: childBox); + + // Ignore old layer. + childBox.offsetLayerFactory = (OffsetLayer? oldLayer) { + return TestOffsetLayerA(); + }; + + layout(renderBox, phase: EnginePhase.composite); + + expect(childBox.paintCount, 1); + expect(renderBox.paintCount, 1); + renderBox.markNeedsPaint(); + + pumpFrame(phase: EnginePhase.composite, onErrors: expectAssertionError); + }, skip: kIsWeb); // https://github.com/flutter/flutter/issues/102086 + + test('RenderObject with repaint boundary asserts when a composited layer tries to update its own offset', () { + final ConditionalRepaintBoundary childBox = ConditionalRepaintBoundary(isRepaintBoundary: true); + final ConditionalRepaintBoundary renderBox = ConditionalRepaintBoundary(child: childBox); + + // Ignore old layer. + childBox.offsetLayerFactory = (OffsetLayer? oldLayer) { + return (oldLayer ?? TestOffsetLayerA())..offset = const Offset(2133, 4422); + }; + + layout(renderBox, phase: EnginePhase.composite); + + expect(childBox.paintCount, 1); + expect(renderBox.paintCount, 1); + renderBox.markNeedsPaint(); + + pumpFrame(phase: EnginePhase.composite, onErrors: expectAssertionError); + }, skip: kIsWeb); // https://github.com/flutter/flutter/issues/102086 + + test('RenderObject markNeedsPaint while repaint boundary, and then updated to no longer be a repaint boundary with ' + 'calling markNeedsCompositingBitsUpdate 1', () { + final ConditionalRepaintBoundary childBox = ConditionalRepaintBoundary(isRepaintBoundary: true); + final ConditionalRepaintBoundary renderBox = ConditionalRepaintBoundary(child: childBox); + // Ignore old layer. + childBox.offsetLayerFactory = (OffsetLayer? oldLayer) { + return oldLayer ?? TestOffsetLayerA(); + }; + + layout(renderBox, phase: EnginePhase.composite); + + expect(childBox.paintCount, 1); + expect(renderBox.paintCount, 1); + + childBox.markNeedsPaint(); + childBox.isRepaintBoundary = false; + childBox.markNeedsCompositingBitsUpdate(); + + expect(() => pumpFrame(phase: EnginePhase.composite), returnsNormally); + }); + + test('RenderObject markNeedsPaint while repaint boundary, and then updated to no longer be a repaint boundary with ' + 'calling markNeedsCompositingBitsUpdate 2', () { + final ConditionalRepaintBoundary childBox = ConditionalRepaintBoundary(isRepaintBoundary: true); + final ConditionalRepaintBoundary renderBox = ConditionalRepaintBoundary(child: childBox); + // Ignore old layer. + childBox.offsetLayerFactory = (OffsetLayer? oldLayer) { + return oldLayer ?? TestOffsetLayerA(); + }; + + layout(renderBox, phase: EnginePhase.composite); + + expect(childBox.paintCount, 1); + expect(renderBox.paintCount, 1); + + childBox.isRepaintBoundary = false; + childBox.markNeedsCompositingBitsUpdate(); + childBox.markNeedsPaint(); + + expect(() => pumpFrame(phase: EnginePhase.composite), returnsNormally); + }); + + test('RenderObject markNeedsPaint while repaint boundary, and then updated to no longer be a repaint boundary with ' + 'calling markNeedsCompositingBitsUpdate 3', () { + final ConditionalRepaintBoundary childBox = ConditionalRepaintBoundary(isRepaintBoundary: true); + final ConditionalRepaintBoundary renderBox = ConditionalRepaintBoundary(child: childBox); + // Ignore old layer. + childBox.offsetLayerFactory = (OffsetLayer? oldLayer) { + return oldLayer ?? TestOffsetLayerA(); + }; + + layout(renderBox, phase: EnginePhase.composite); + + expect(childBox.paintCount, 1); + expect(renderBox.paintCount, 1); + + childBox.isRepaintBoundary = false; + childBox.markNeedsCompositedLayerUpdate(); + childBox.markNeedsCompositingBitsUpdate(); + + expect(() => pumpFrame(phase: EnginePhase.composite), returnsNormally); + }); } class _TestRectClipper extends CustomClipper { @@ -631,3 +803,38 @@ class _TestSemanticsUpdateRenderFractionalTranslation extends RenderFractionalTr super.markNeedsSemanticsUpdate(); } } + +class ConditionalRepaintBoundary extends RenderProxyBox { + ConditionalRepaintBoundary({this.isRepaintBoundary = false, RenderBox? child}) : super(child); + + @override + bool isRepaintBoundary = false; + + OffsetLayer Function(OffsetLayer?)? offsetLayerFactory; + + int paintCount = 0; + + @override + OffsetLayer updateCompositedLayer({required covariant OffsetLayer? oldLayer}) { + if (offsetLayerFactory != null) { + return offsetLayerFactory!.call(oldLayer); + } + return super.updateCompositedLayer(oldLayer: oldLayer); + } + + @override + void paint(PaintingContext context, Offset offset) { + paintCount += 1; + super.paint(context, offset); + } +} + +class TestOffsetLayerA extends OffsetLayer {} + +void expectAssertionError() { + final FlutterErrorDetails errorDetails = TestRenderingFlutterBinding.instance.takeFlutterErrorDetails()!; + final bool asserted = errorDetails.toString().contains('Failed assertion'); + if (!asserted) { + FlutterError.reportError(errorDetails); + } +} diff --git a/packages/flutter/test/widgets/animated_opacity_repaint_test.dart b/packages/flutter/test/widgets/animated_opacity_repaint_test.dart new file mode 100644 index 0000000000000..664a118df256a --- /dev/null +++ b/packages/flutter/test/widgets/animated_opacity_repaint_test.dart @@ -0,0 +1,90 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('RenderAnimatedOpacityMixin avoids repainting child as it animates', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + final AnimationController controller = AnimationController(vsync: const TestVSync(), duration: const Duration(seconds: 1)); + final Tween opacityTween = Tween(begin: 0, end: 1); + await tester.pumpWidget( + Container( + color: Colors.red, + child: FadeTransition( + opacity: controller.drive(opacityTween), + child: const TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 0); + controller.forward(); + + await tester.pump(); + await tester.pump(const Duration(milliseconds: 500)); + + expect(RenderTestObject.paintCount, 1); + + await tester.pump(); + await tester.pump(const Duration(milliseconds: 500)); + + expect(RenderTestObject.paintCount, 1); + + controller.stop(); + await tester.pump(); + + expect(RenderTestObject.paintCount, 1); + }); + + testWidgets('RenderAnimatedOpacityMixin allows opacity layer to be disposed when animating to 0 opacity', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + final AnimationController controller = AnimationController(vsync: const TestVSync(), duration: const Duration(seconds: 1)); + final Tween opacityTween = Tween(begin: 1, end: 0); + await tester.pumpWidget( + Container( + color: Colors.red, + child: FadeTransition( + opacity: controller.drive(opacityTween), + child: const TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + expect(tester.layers, contains(isA())); + controller.forward(); + + await tester.pump(); + await tester.pump(const Duration(seconds: 2)); + + expect(RenderTestObject.paintCount, 1); + + controller.stop(); + await tester.pump(); + + expect(tester.layers, isNot(contains(isA()))); + }); +} + +class TestWidget extends SingleChildRenderObjectWidget { + const TestWidget({super.key, super.child}); + + @override + RenderObject createRenderObject(BuildContext context) { + return RenderTestObject(); + } +} + +class RenderTestObject extends RenderProxyBox { + static int paintCount = 0; + + @override + void paint(PaintingContext context, Offset offset) { + paintCount += 1; + super.paint(context, offset); + } +} diff --git a/packages/flutter/test/widgets/opacity_repaint_test.dart b/packages/flutter/test/widgets/opacity_repaint_test.dart new file mode 100644 index 0000000000000..00ca2964d3ea7 --- /dev/null +++ b/packages/flutter/test/widgets/opacity_repaint_test.dart @@ -0,0 +1,275 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('RenderOpacity acts as a repaint boundary for changes above the widget when partially opaque', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + await tester.pumpWidget( + Container( + color: Colors.red, + child: const Opacity( + opacity: 0.5, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + + await tester.pumpWidget( + Container( + color: Colors.blue, + child: const Opacity( + opacity: 0.5, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + }); + + testWidgets('RenderOpacity acts as a repaint boundary for changes above the widget when fully opaque', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + await tester.pumpWidget( + Container( + color: Colors.red, + child: const Opacity( + opacity: 1, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + + await tester.pumpWidget( + Container( + color: Colors.blue, + child: const Opacity( + opacity: 1, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + }); + + testWidgets('RenderOpacity can update its opacity without repainting its child - partially opaque to partially opaque', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + await tester.pumpWidget( + Container( + color: Colors.red, + child: const Opacity( + opacity: 0.5, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + + await tester.pumpWidget( + Container( + color: Colors.blue, + child: const Opacity( + opacity: 0.9, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + }); + + testWidgets('RenderOpacity can update its opacity without repainting its child - partially opaque to fully opaque', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + await tester.pumpWidget( + Container( + color: Colors.red, + child: const Opacity( + opacity: 0.5, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + + await tester.pumpWidget( + Container( + color: Colors.blue, + child: const Opacity( + opacity: 1, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + }); + + testWidgets('RenderOpacity can update its opacity without repainting its child - fully opaque to partially opaque', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + await tester.pumpWidget( + Container( + color: Colors.red, + child: const Opacity( + opacity: 1, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + + await tester.pumpWidget( + Container( + color: Colors.blue, + child: const Opacity( + opacity: 0.5, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + }); + + testWidgets('RenderOpacity can update its opacity without repainting its child - fully opaque to fully transparent', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + await tester.pumpWidget( + Container( + color: Colors.red, + child: const Opacity( + opacity: 1, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + + await tester.pumpWidget( + Container( + color: Colors.blue, + child: const Opacity( + opacity: 0, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + }); + + testWidgets('RenderOpacity must paint child - fully transparent to partially opaque', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + await tester.pumpWidget( + Container( + color: Colors.red, + child: const Opacity( + opacity: 0, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 0); + + await tester.pumpWidget( + Container( + color: Colors.blue, + child: const Opacity( + opacity: 0.5, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + }); + + testWidgets('RenderOpacity allows child to update without updating parent', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + await tester.pumpWidget( + TestWidget( + child: Opacity( + opacity: 0.5, + child: Container( + color: Colors.red, + ), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + + await tester.pumpWidget( + TestWidget( + child: Opacity( + opacity: 0.5, + child: Container( + color: Colors.blue, + ), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + }); + + testWidgets('RenderOpacity disposes of opacity layer when opacity is updated to 0', (WidgetTester tester) async { + RenderTestObject.paintCount = 0; + await tester.pumpWidget( + Container( + color: Colors.red, + child: const Opacity( + opacity: 0.5, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + expect(tester.layers, contains(isA())); + + await tester.pumpWidget( + Container( + color: Colors.blue, + child: const Opacity( + opacity: 0, + child: TestWidget(), + ), + ) + ); + + expect(RenderTestObject.paintCount, 1); + expect(tester.layers, isNot(contains(isA()))); + }); +} + +class TestWidget extends SingleChildRenderObjectWidget { + const TestWidget({super.key, super.child}); + + @override + RenderObject createRenderObject(BuildContext context) { + return RenderTestObject(); + } +} + +class RenderTestObject extends RenderProxyBox { + static int paintCount = 0; + + @override + void paint(PaintingContext context, Offset offset) { + paintCount += 1; + super.paint(context, offset); + } +} From 6132b86d240055cacd842dc8961bf272bfaf1cc0 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 13:24:07 -0400 Subject: [PATCH 087/141] Roll Engine from 6d60b810d747 to d5b381c2e56d (1 revision) (#102581) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 9bf7bbe047aee..0fd5076e42244 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -6d60b810d74766f533640f11a57843135cf55b14 +d5b381c2e56d76ff56f4fcd4d53c84325c186182 From a75743e80ed4d8c4791178772be5f155f20d8bce Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Tue, 26 Apr 2022 13:14:06 -0500 Subject: [PATCH 088/141] Revert "Re-land reverse case for AppBar scrolled under" (#102580) --- .../flutter/lib/src/material/app_bar.dart | 34 +- .../widgets/scroll_notification_observer.dart | 32 +- .../flutter/test/material/app_bar_test.dart | 706 +++++++----------- .../flutter/test/material/debug_test.dart | 1 - .../flutter/test/material/scaffold_test.dart | 1 - 5 files changed, 295 insertions(+), 479 deletions(-) diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart index 045d9d8325ac4..39c7bd39c339c 100644 --- a/packages/flutter/lib/src/material/app_bar.dart +++ b/packages/flutter/lib/src/material/app_bar.dart @@ -767,33 +767,17 @@ class _AppBarState extends State { } void _handleScrollNotification(ScrollNotification notification) { - final bool oldScrolledUnder = _scrolledUnder; - final ScrollMetrics metrics = notification.metrics; - - if (notification.depth != 0) { - _scrolledUnder = false; - } else { - switch (metrics.axisDirection) { - case AxisDirection.up: - // Scroll view is reversed - _scrolledUnder = metrics.extentAfter > 0; - break; - case AxisDirection.down: - _scrolledUnder = metrics.extentBefore > 0; - break; - case AxisDirection.right: - case AxisDirection.left: - // Scrolled under is only supported in the vertical axis. - _scrolledUnder = false; - break; + if (notification is ScrollUpdateNotification) { + final bool oldScrolledUnder = _scrolledUnder; + _scrolledUnder = notification.depth == 0 + && notification.metrics.extentBefore > 0 + && notification.metrics.axis == Axis.vertical; + if (_scrolledUnder != oldScrolledUnder) { + setState(() { + // React to a change in MaterialState.scrolledUnder + }); } } - - if (_scrolledUnder != oldScrolledUnder) { - setState(() { - // React to a change in MaterialState.scrolledUnder - }); - } } Color _resolveColor(Set states, Color? widgetColor, Color? themeColor, Color defaultColor) { diff --git a/packages/flutter/lib/src/widgets/scroll_notification_observer.dart b/packages/flutter/lib/src/widgets/scroll_notification_observer.dart index 6fa7ffaa15b7c..bc151190f1d5d 100644 --- a/packages/flutter/lib/src/widgets/scroll_notification_observer.dart +++ b/packages/flutter/lib/src/widgets/scroll_notification_observer.dart @@ -9,7 +9,6 @@ import 'package:flutter/foundation.dart'; import 'framework.dart'; import 'notification_listener.dart'; import 'scroll_notification.dart'; -import 'scroll_position.dart'; /// A [ScrollNotification] listener for [ScrollNotificationObserver]. /// @@ -152,26 +151,14 @@ class ScrollNotificationObserverState extends State @override Widget build(BuildContext context) { - // A ScrollMetricsNotification allows listeners to be notified for an - // initial state, as well as if the content dimensions change without - // scrolling. - return NotificationListener( - onNotification: (ScrollMetricsNotification notification) { - _notifyListeners(_ConvertedScrollMetricsNotification( - metrics: notification.metrics, - context: notification.context, - )); + return NotificationListener( + onNotification: (ScrollNotification notification) { + _notifyListeners(notification); return false; }, - child: NotificationListener( - onNotification: (ScrollNotification notification) { - _notifyListeners(notification); - return false; - }, - child: _ScrollNotificationObserverScope( - scrollNotificationObserverState: this, - child: widget.child, - ), + child: _ScrollNotificationObserverScope( + scrollNotificationObserverState: this, + child: widget.child, ), ); } @@ -183,10 +170,3 @@ class ScrollNotificationObserverState extends State super.dispose(); } } - -class _ConvertedScrollMetricsNotification extends ScrollNotification { - _ConvertedScrollMetricsNotification({ - required super.metrics, - required super.context, - }); -} diff --git a/packages/flutter/test/material/app_bar_test.dart b/packages/flutter/test/material/app_bar_test.dart index 1b08520ea620f..88b6963f68aab 100644 --- a/packages/flutter/test/material/app_bar_test.dart +++ b/packages/flutter/test/material/app_bar_test.dart @@ -2567,457 +2567,311 @@ void main() { expect(actionIconTheme.color, foregroundColor); }); - group('MaterialStateColor scrolledUnder', () { + testWidgets('SliverAppBar.backgroundColor MaterialStateColor scrolledUnder', (WidgetTester tester) async { const double collapsedHeight = kToolbarHeight; const double expandedHeight = 200.0; const Color scrolledColor = Color(0xff00ff00); const Color defaultColor = Color(0xff0000ff); + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; + }), + expandedHeight: expandedHeight, + pinned: true, + ), + SliverList( + delegate: SliverChildListDelegate( + [ + Container(height: 1200.0, color: Colors.teal), + ], + ), + ), + ], + ), + ), + ), + ); + Finder findAppBarMaterial() { - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)).first; + return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)); } - Color? getAppBarBackgroundColor(WidgetTester tester) { + Color? getAppBarBackgroundColor() { return tester.widget(findAppBarMaterial()).color; } - group('SliverAppBar', () { - Widget _buildSliverApp({ - required double contentHeight, - bool reverse = false, - bool includeFlexibleSpace = false, - }) { - return MaterialApp( - home: Scaffold( - body: CustomScrollView( - reverse: reverse, - slivers: [ - SliverAppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) - ? scrolledColor - : defaultColor; - }), - expandedHeight: expandedHeight, - pinned: true, - flexibleSpace: includeFlexibleSpace - ? const FlexibleSpaceBar(title: Text('SliverAppBar')) - : null, + expect(getAppBarBackgroundColor(), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('SliverAppBar.backgroundColor with FlexibleSpace MaterialStateColor scrolledUnder', (WidgetTester tester) async { + const double collapsedHeight = kToolbarHeight; + const double expandedHeight = 200.0; + const Color scrolledColor = Color(0xff00ff00); + const Color defaultColor = Color(0xff0000ff); + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; + }), + expandedHeight: expandedHeight, + pinned: true, + flexibleSpace: const FlexibleSpaceBar( + title: Text('SliverAppBar'), ), - SliverList( - delegate: SliverChildListDelegate( + ), + SliverList( + delegate: SliverChildListDelegate( [ - Container(height: contentHeight, color: Colors.teal), + Container(height: 1200.0, color: Colors.teal), ], - ), ), - ], - ), + ), + ], ), - ); - } - - testWidgets('backgroundColor', (WidgetTester tester) async { - await tester.pumpWidget( - _buildSliverApp(contentHeight: 1200.0) - ); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - }); - - testWidgets('backgroundColor with FlexibleSpace', (WidgetTester tester) async { - await tester.pumpWidget( - _buildSliverApp(contentHeight: 1200.0, includeFlexibleSpace: true) - ); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - }); - - testWidgets('backgroundColor - reverse', (WidgetTester tester) async { - await tester.pumpWidget( - _buildSliverApp(contentHeight: 1200.0, reverse: true) - ); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, -expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - }); - - testWidgets('backgroundColor with FlexibleSpace - reverse', (WidgetTester tester) async { - await tester.pumpWidget( - _buildSliverApp( - contentHeight: 1200.0, - reverse: true, - includeFlexibleSpace: true, - ) - ); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, -expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - }); - - testWidgets('backgroundColor - not triggered in reverse for short content', (WidgetTester tester) async { - await tester.pumpWidget( - _buildSliverApp(contentHeight: 200, reverse: true) - ); - - // In reverse, the content here is not long enough to scroll under the app - // bar. - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - - final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - }); - - testWidgets('backgroundColor with FlexibleSpace - not triggered in reverse for short content', (WidgetTester tester) async { - await tester.pumpWidget( - _buildSliverApp( - contentHeight: 200, - reverse: true, - includeFlexibleSpace: true, - ) - ); - - // In reverse, the content here is not long enough to scroll under the app - // bar. - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - - final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - }); - }); + ), + ), + ); - group('AppBar', () { - Widget _buildAppBar({ - required double contentHeight, - bool reverse = false, - bool includeFlexibleSpace = false - }) { - return MaterialApp( - home: Scaffold( - appBar: AppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) - ? scrolledColor - : defaultColor; - }), - title: const Text('AppBar'), - flexibleSpace: includeFlexibleSpace - ? const FlexibleSpaceBar(title: Text('FlexibleSpace')) - : null, + Finder findAppBarMaterial() { + // There are 2 Material widgets below AppBar. The second is only added if + // flexibleSpace is non-null. + return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)).first; + } + + Color? getAppBarBackgroundColor() { + return tester.widget(findAppBarMaterial()).color; + } + + expect(getAppBarBackgroundColor(), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('AppBar.backgroundColor MaterialStateColor scrolledUnder', (WidgetTester tester) async { + const Color scrolledColor = Color(0xff00ff00); + const Color defaultColor = Color(0xff0000ff); + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; + }), + title: const Text('AppBar'), + ), + body: ListView( + children: [ + Container(height: 1200.0, color: Colors.teal), + ], + ), + ), + ), + ); + + Finder findAppBarMaterial() { + return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)); + } + + Color? getAppBarBackgroundColor() { + return tester.widget(findAppBarMaterial()).color; + } + + expect(getAppBarBackgroundColor(), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('AppBar.backgroundColor with FlexibleSpace MaterialStateColor scrolledUnder', (WidgetTester tester) async { + const Color scrolledColor = Color(0xff00ff00); + const Color defaultColor = Color(0xff0000ff); + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; + }), + title: const Text('AppBar'), + flexibleSpace: const FlexibleSpaceBar( + title: Text('FlexibleSpace'), ), - body: ListView( - reverse: reverse, + ), + body: ListView( + children: [ + Container(height: 1200.0, color: Colors.teal), + ], + ), + ), + ), + ); + + Finder findAppBarMaterial() { + // There are 2 Material widgets below AppBar. The second is only added if + // flexibleSpace is non-null. + return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)).first; + } + + Color? getAppBarBackgroundColor() { + return tester.widget(findAppBarMaterial()).color; + } + + expect(getAppBarBackgroundColor(), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('AppBar._handleScrollNotification safely calls setState()', (WidgetTester tester) async { + // Regression test for failures found in Google internal issue b/185192049. + final ScrollController controller = ScrollController(initialScrollOffset: 400); + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('AppBar'), + ), + body: Scrollbar( + isAlwaysShown: true, + controller: controller, + child: ListView( + controller: controller, children: [ - Container(height: contentHeight, color: Colors.teal), + Container(height: 1200.0, color: Colors.teal), ], ), ), - ); - } - - testWidgets('backgroundColor', (WidgetTester tester) async { - await tester.pumpWidget( - _buildAppBar(contentHeight: 1200.0) - ); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - }); - - testWidgets('backgroundColor with FlexibleSpace', (WidgetTester tester) async { - await tester.pumpWidget( - _buildAppBar(contentHeight: 1200.0, includeFlexibleSpace: true) - ); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - }); - - testWidgets('backgroundColor - reverse', (WidgetTester tester) async { - await tester.pumpWidget( - _buildAppBar(contentHeight: 1200.0, reverse: true) - ); - await tester.pump(); - - // In this test case, the content always extends under the AppBar, so it - // should always be the scrolledColor. - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - }); - - testWidgets('backgroundColor with FlexibleSpace - reverse', (WidgetTester tester) async { - await tester.pumpWidget( - _buildAppBar( - contentHeight: 1200.0, - reverse: true, - includeFlexibleSpace: true, - ) - ); - await tester.pump(); - - // In this test case, the content always extends under the AppBar, so it - // should always be the scrolledColor. - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - }); - - testWidgets('_handleScrollNotification safely calls setState()', (WidgetTester tester) async { - // Regression test for failures found in Google internal issue b/185192049. - final ScrollController controller = ScrollController(initialScrollOffset: 400); - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - appBar: AppBar( - title: const Text('AppBar'), - ), - body: Scrollbar( - isAlwaysShown: true, - controller: controller, - child: ListView( - controller: controller, - children: [ - Container(height: 1200.0, color: Colors.teal), - ], - ), - ), - ), - ), - ); + ), + ), + ); - expect(tester.takeException(), isNull); - }); + expect(tester.takeException(), isNull); + }); - testWidgets('does not trigger on horizontal scroll', (WidgetTester tester) async { - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - appBar: AppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) - ? scrolledColor - : defaultColor; - }), - title: const Text('AppBar'), - ), - body: ListView( - scrollDirection: Axis.horizontal, - children: [ - Container(height: 600.0, width: 1200.0, color: Colors.teal), - ], - ), - ), + testWidgets('AppBar scrolledUnder does not trigger on horizontal scroll', (WidgetTester tester) async { + const Color scrolledColor = Color(0xff00ff00); + const Color defaultColor = Color(0xff0000ff); + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; + }), + title: const Text('AppBar'), ), - ); - - expect(getAppBarBackgroundColor(tester), defaultColor); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(-100.0, 0.0)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - - gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(100.0, 0.0)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - }); - - testWidgets('backgroundColor - not triggered in reverse for short content', (WidgetTester tester) async { - await tester.pumpWidget( - _buildAppBar( - contentHeight: 200.0, - reverse: true, - ) - ); - await tester.pump(); - - // In reverse, the content here is not long enough to scroll under the app - // bar. - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - }); - - testWidgets('backgroundColor with FlexibleSpace - not triggered in reverse for short content', (WidgetTester tester) async { - await tester.pumpWidget( - _buildAppBar( - contentHeight: 200.0, - reverse: true, - includeFlexibleSpace: true, - ) - ); - await tester.pump(); - - // In reverse, the content here is not long enough to scroll under the app - // bar. - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(tester), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - }); - }); + body: ListView( + scrollDirection: Axis.horizontal, + children: [ + Container(height: 600.0, width: 1200.0, color: Colors.teal), + ], + ), + ), + ), + ); + + Finder findAppBarMaterial() { + return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)); + } + + Color? getAppBarBackgroundColor() { + return tester.widget(findAppBarMaterial()).color; + } + + expect(getAppBarBackgroundColor(), defaultColor); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(-100.0, 0.0)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(), defaultColor); + + gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(100.0, 0.0)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(), defaultColor); }); testWidgets('AppBar.preferredHeightFor', (WidgetTester tester) async { diff --git a/packages/flutter/test/material/debug_test.dart b/packages/flutter/test/material/debug_test.dart index 21492e972bc01..46f9e61b37fd9 100644 --- a/packages/flutter/test/material/debug_test.dart +++ b/packages/flutter/test/material/debug_test.dart @@ -349,7 +349,6 @@ void main() { ' Material\n' ' _ScrollNotificationObserverScope\n' ' NotificationListener\n' - ' NotificationListener\n' ' ScrollNotificationObserver\n' ' _ScaffoldScope\n' ' Scaffold-[LabeledGlobalKey#00000]\n' diff --git a/packages/flutter/test/material/scaffold_test.dart b/packages/flutter/test/material/scaffold_test.dart index 7aeee33dc42ec..3a10ba8c08fb3 100644 --- a/packages/flutter/test/material/scaffold_test.dart +++ b/packages/flutter/test/material/scaffold_test.dart @@ -2339,7 +2339,6 @@ void main() { ' Material\n' ' _ScrollNotificationObserverScope\n' ' NotificationListener\n' - ' NotificationListener\n' ' ScrollNotificationObserver\n' ' _ScaffoldScope\n' ' Scaffold\n' From 944fcda67f294981dfe2b57991c32afc724f34c2 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Tue, 26 Apr 2022 11:19:07 -0700 Subject: [PATCH 089/141] [flutter_tools] remove UWP tooling (#102174) --- .../flutter_tools/bin/getaumidfromname.ps1 | 13 - packages/flutter_tools/bin/tool_backend.dart | 3 +- .../lib/src/android/android_device.dart | 2 - packages/flutter_tools/lib/src/artifacts.dart | 40 +- .../flutter_tools/lib/src/base/build.dart | 1 - .../flutter_tools/lib/src/build_info.dart | 12 - .../lib/src/build_system/targets/common.dart | 1 - .../lib/src/build_system/targets/windows.dart | 207 +--------- packages/flutter_tools/lib/src/cache.dart | 4 - .../flutter_tools/lib/src/cmake_project.dart | 44 -- .../lib/src/commands/assemble.dart | 4 - .../flutter_tools/lib/src/commands/build.dart | 2 - .../lib/src/commands/build_bundle.dart | 1 - .../lib/src/commands/build_winuwp.dart | 62 --- .../lib/src/commands/create.dart | 1 - .../lib/src/commands/create_base.dart | 13 - .../lib/src/commands/precache.dart | 2 - .../flutter_tools/lib/src/context_runner.dart | 6 - packages/flutter_tools/lib/src/features.dart | 14 - .../lib/src/flutter_application_package.dart | 2 - .../flutter_tools/lib/src/flutter_cache.dart | 35 -- .../lib/src/flutter_device_manager.dart | 5 +- .../lib/src/flutter_features.dart | 3 - .../lib/src/flutter_plugins.dart | 30 -- .../flutter_tools/lib/src/mdns_discovery.dart | 1 - .../lib/src/platform_plugins.dart | 4 - packages/flutter_tools/lib/src/project.dart | 13 - .../lib/src/resident_runner.dart | 1 - .../lib/src/runner/flutter_command.dart | 4 - .../lib/src/runner/local_engine.dart | 4 - .../flutter_tools/lib/src/sksl_writer.dart | 1 - packages/flutter_tools/lib/src/template.dart | 5 - .../lib/src/windows/application_package.dart | 11 - .../lib/src/windows/build_windows.dart | 130 ------ .../lib/src/windows/install_manifest.dart | 50 --- .../lib/src/windows/uwptool.dart | 161 -------- .../lib/src/windows/windows_device.dart | 347 +--------------- .../templates/app/winuwp.tmpl/.gitignore | 17 - .../winuwp.tmpl/CMakeLists.txt.tmpl | 64 --- .../winuwp.tmpl/flutter/CMakeLists.txt | 92 ----- .../app_shared/winuwp.tmpl/project_version | 1 - .../Assets/LargeTile.scale-100.png.img.tmpl | 0 .../Assets/LargeTile.scale-125.png.img.tmpl | 0 .../Assets/LargeTile.scale-150.png.img.tmpl | 0 .../Assets/LargeTile.scale-200.png.img.tmpl | 0 .../Assets/LargeTile.scale-400.png.img.tmpl | 0 .../LockScreenLogo.scale-200.png.img.tmpl | 0 .../Assets/SmallTile.scale-100.png.img.tmpl | 0 .../Assets/SmallTile.scale-125.png.img.tmpl | 0 .../Assets/SmallTile.scale-150.png.img.tmpl | 0 .../Assets/SmallTile.scale-200.png.img.tmpl | 0 .../Assets/SmallTile.scale-400.png.img.tmpl | 0 .../SplashScreen.scale-100.png.img.tmpl | 0 .../SplashScreen.scale-125.png.img.tmpl | 0 .../SplashScreen.scale-150.png.img.tmpl | 0 .../SplashScreen.scale-200.png.img.tmpl | 0 .../SplashScreen.scale-400.png.img.tmpl | 0 .../Square150x150Logo.scale-100.png.img.tmpl | 0 .../Square150x150Logo.scale-125.png.img.tmpl | 0 .../Square150x150Logo.scale-150.png.img.tmpl | 0 .../Square150x150Logo.scale-200.png.img.tmpl | 0 .../Square150x150Logo.scale-400.png.img.tmpl | 0 ...ltform-unplated_targetsize-16.png.img.tmpl | 0 ...tform-unplated_targetsize-256.png.img.tmpl | 0 ...ltform-unplated_targetsize-32.png.img.tmpl | 0 ...ltform-unplated_targetsize-48.png.img.tmpl | 0 .../Square44x44Logo.scale-100.png.img.tmpl | 0 .../Square44x44Logo.scale-125.png.img.tmpl | 0 .../Square44x44Logo.scale-150.png.img.tmpl | 0 .../Square44x44Logo.scale-200.png.img.tmpl | 0 .../Square44x44Logo.scale-400.png.img.tmpl | 0 ...Square44x44Logo.targetsize-16.png.img.tmpl | 0 ...Square44x44Logo.targetsize-24.png.img.tmpl | 0 ...argetsize-24_altform-unplated.png.img.tmpl | 0 ...quare44x44Logo.targetsize-256.png.img.tmpl | 0 ...Square44x44Logo.targetsize-32.png.img.tmpl | 0 ...Square44x44Logo.targetsize-48.png.img.tmpl | 0 .../runner_uwp/Assets/StoreLogo.png.img.tmpl | 0 .../Assets/StoreLogo.scale-100.png.img.tmpl | 0 .../Assets/StoreLogo.scale-125.png.img.tmpl | 0 .../Assets/StoreLogo.scale-150.png.img.tmpl | 0 .../Assets/StoreLogo.scale-200.png.img.tmpl | 0 .../Assets/StoreLogo.scale-400.png.img.tmpl | 0 .../Wide310x150Logo.scale-200.png.img.tmpl | 0 .../Assets/WideTile.scale-100.png.img.tmpl | 0 .../Assets/WideTile.scale-125.png.img.tmpl | 0 .../Assets/WideTile.scale-150.png.img.tmpl | 0 .../Assets/WideTile.scale-200.png.img.tmpl | 0 .../Assets/WideTile.scale-400.png.img.tmpl | 0 .../runner_uwp/CMakeLists.txt.tmpl | 141 ------- .../winuwp.tmpl/runner_uwp/CMakeSettings.json | 27 -- .../Windows_TemporaryKey.pfx.img.tmpl | 0 .../winuwp.tmpl/runner_uwp/appxmanifest.in | 42 -- .../runner_uwp/flutter_frameworkview.cpp | 155 ------- .../winuwp.tmpl/runner_uwp/main.cpp | 30 -- .../runner_uwp/resources.pri.img.tmpl | 0 .../templates/template_manifest.json | 59 --- .../hermetic/build_windows_test.dart | 146 +------ .../commands.shard/permeable/create_test.dart | 30 -- .../test/general.shard/artifacts_test.dart | 26 -- .../targets/dart_plugin_registrant_test.dart | 1 - .../build_system/targets/windows_test.dart | 159 +------ .../test/general.shard/cache_test.dart | 14 - .../test/general.shard/dart_plugin_test.dart | 3 - .../test/general.shard/features_test.dart | 32 -- .../general.shard/plugin_parsing_test.dart | 11 +- .../test/general.shard/plugins_test.dart | 3 - .../runner/local_engine_test.dart | 25 -- .../windows/install_manifest_test.dart | 144 ------- .../general.shard/windows/plugins_test.dart | 87 ---- .../general.shard/windows/project_test.dart | 138 ------- .../windows/windows_device_test.dart | 387 ------------------ packages/flutter_tools/test/src/fakes.dart | 6 - 113 files changed, 19 insertions(+), 3060 deletions(-) delete mode 100644 packages/flutter_tools/bin/getaumidfromname.ps1 delete mode 100644 packages/flutter_tools/lib/src/commands/build_winuwp.dart delete mode 100644 packages/flutter_tools/lib/src/windows/install_manifest.dart delete mode 100644 packages/flutter_tools/lib/src/windows/uwptool.dart delete mode 100644 packages/flutter_tools/templates/app/winuwp.tmpl/.gitignore delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/CMakeLists.txt.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/flutter/CMakeLists.txt delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/project_version delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-100.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-125.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-150.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-200.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-400.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LockScreenLogo.scale-200.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-100.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-125.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-150.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-200.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-400.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-100.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-125.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-150.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-200.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-400.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-100.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-125.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-150.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-200.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-400.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-16.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-256.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-32.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-48.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-100.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-125.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-150.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-200.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-400.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-16.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-256.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-32.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-48.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-100.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-125.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-150.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-200.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-400.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Wide310x150Logo.scale-200.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-100.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-125.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-150.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-200.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-400.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/CMakeLists.txt.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/CMakeSettings.json delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Windows_TemporaryKey.pfx.img.tmpl delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/appxmanifest.in delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/flutter_frameworkview.cpp delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/main.cpp delete mode 100644 packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/resources.pri.img.tmpl delete mode 100644 packages/flutter_tools/test/general.shard/windows/install_manifest_test.dart delete mode 100644 packages/flutter_tools/test/general.shard/windows/project_test.dart diff --git a/packages/flutter_tools/bin/getaumidfromname.ps1 b/packages/flutter_tools/bin/getaumidfromname.ps1 deleted file mode 100644 index d5873e33e812a..0000000000000 --- a/packages/flutter_tools/bin/getaumidfromname.ps1 +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2014 The Flutter Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Retrieves the AMUID from a given application name -[CmdletBinding()] -param( - [Parameter()] - [string]$Name -) -$foo = get-appxpackage | Where-Object { $_.Name -like $name } -$aumid = $foo.packagefamilyname + "!" + (Get-AppxPackageManifest $foo).package.applications.application.id -Write-Output $aumid diff --git a/packages/flutter_tools/bin/tool_backend.dart b/packages/flutter_tools/bin/tool_backend.dart index 754df1ac1d41e..5b4b66585356a 100644 --- a/packages/flutter_tools/bin/tool_backend.dart +++ b/packages/flutter_tools/bin/tool_backend.dart @@ -61,9 +61,8 @@ or else 'flutter' ]); - final bool uwp = targetPlatform.contains('uwp'); final String bundlePlatform = targetPlatform.startsWith('windows') ? 'windows' : targetPlatform; - final String target = '${buildMode}_bundle_${bundlePlatform}_assets${uwp ? '_uwp' : ''}'; + final String target = '${buildMode}_bundle_${bundlePlatform}_assets'; final Process assembleProcess = await Process.start( flutterExecutable, [ diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart index 3a750cafdb4a6..49345ccea72a5 100644 --- a/packages/flutter_tools/lib/src/android/android_device.dart +++ b/packages/flutter_tools/lib/src/android/android_device.dart @@ -227,7 +227,6 @@ class AndroidDevice extends Device { case TargetPlatform.linux_x64: case TargetPlatform.tester: case TargetPlatform.web_javascript: - case TargetPlatform.windows_uwp_x64: case TargetPlatform.windows_x64: throw UnsupportedError('Invalid target platform for Android'); } @@ -565,7 +564,6 @@ class AndroidDevice extends Device { case TargetPlatform.linux_x64: case TargetPlatform.tester: case TargetPlatform.web_javascript: - case TargetPlatform.windows_uwp_x64: case TargetPlatform.windows_x64: _logger.printError('Android platforms are only supported.'); return LaunchResult.failed(); diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart index 2aac9686e822d..b53bca9ca5860 100644 --- a/packages/flutter_tools/lib/src/artifacts.dart +++ b/packages/flutter_tools/lib/src/artifacts.dart @@ -38,10 +38,7 @@ enum Artifact { windowsDesktopPath, /// The root of the cpp client code for Windows desktop. windowsCppClientWrapper, - /// The root of the cpp client code for Windows UWP desktop. - windowsUwpCppClientWrapper, - /// The root of the Windows UWP desktop sources. - windowsUwpDesktopPath, + /// The root of the sky_engine package. skyEnginePath, /// The location of the macOS engine podspec file. @@ -54,9 +51,6 @@ enum Artifact { /// Tools related to subsetting or icon font files. fontSubset, constFinder, - - // Windows UWP app management tool. - uwptool, } /// A subset of [Artifact]s that are platform and build mode independent @@ -120,7 +114,6 @@ TargetPlatform? _mapTargetPlatform(TargetPlatform? targetPlatform) { case TargetPlatform.linux_x64: case TargetPlatform.linux_arm64: case TargetPlatform.windows_x64: - case TargetPlatform.windows_uwp_x64: case TargetPlatform.fuchsia_arm64: case TargetPlatform.fuchsia_x64: case TargetPlatform.tester: @@ -137,7 +130,6 @@ TargetPlatform? _mapTargetPlatform(TargetPlatform? targetPlatform) { bool _isWindows(TargetPlatform? platform) { switch (platform) { case TargetPlatform.windows_x64: - case TargetPlatform.windows_uwp_x64: return true; case TargetPlatform.android: case TargetPlatform.android_arm: @@ -190,9 +182,7 @@ String? _artifactToFileName(Artifact artifact, [ TargetPlatform? platform, Build case Artifact.linuxHeaders: return 'flutter_linux'; case Artifact.windowsCppClientWrapper: - case Artifact.windowsUwpCppClientWrapper: return 'cpp_client_wrapper'; - case Artifact.windowsUwpDesktopPath: case Artifact.windowsDesktopPath: return ''; case Artifact.skyEnginePath: @@ -209,8 +199,6 @@ String? _artifactToFileName(Artifact artifact, [ TargetPlatform? platform, Build return 'font-subset$exe'; case Artifact.constFinder: return 'const_finder.dart.snapshot'; - case Artifact.uwptool: - return 'uwptool$exe'; } } @@ -431,7 +419,6 @@ class CachedArtifacts implements Artifacts { case TargetPlatform.linux_x64: case TargetPlatform.linux_arm64: case TargetPlatform.windows_x64: - case TargetPlatform.windows_uwp_x64: return _getDesktopArtifactPath(artifact, platform, mode); case TargetPlatform.fuchsia_arm64: case TargetPlatform.fuchsia_x64: @@ -483,12 +470,9 @@ class CachedArtifacts implements Artifacts { case Artifact.platformKernelDill: case Artifact.platformLibrariesJson: case Artifact.skyEnginePath: - case Artifact.uwptool: case Artifact.vmSnapshotData: case Artifact.windowsCppClientWrapper: case Artifact.windowsDesktopPath: - case Artifact.windowsUwpCppClientWrapper: - case Artifact.windowsUwpDesktopPath: return _getHostArtifactPath(artifact, platform, mode); } } @@ -519,12 +503,9 @@ class CachedArtifacts implements Artifacts { case Artifact.platformKernelDill: case Artifact.platformLibrariesJson: case Artifact.skyEnginePath: - case Artifact.uwptool: case Artifact.vmSnapshotData: case Artifact.windowsCppClientWrapper: case Artifact.windowsDesktopPath: - case Artifact.windowsUwpCppClientWrapper: - case Artifact.windowsUwpDesktopPath: return _getHostArtifactPath(artifact, platform, mode); } } @@ -567,12 +548,9 @@ class CachedArtifacts implements Artifacts { case Artifact.linuxHeaders: case Artifact.platformLibrariesJson: case Artifact.skyEnginePath: - case Artifact.uwptool: case Artifact.vmSnapshotData: case Artifact.windowsCppClientWrapper: case Artifact.windowsDesktopPath: - case Artifact.windowsUwpCppClientWrapper: - case Artifact.windowsUwpDesktopPath: return _getHostArtifactPath(artifact, platform, mode); } } @@ -626,15 +604,9 @@ class CachedArtifacts implements Artifacts { } final String engineArtifactsPath = _cache.getArtifactDirectory('engine').path; return _fileSystem.path.join(engineArtifactsPath, platformDirName, _artifactToFileName(artifact, platform, mode)); - case Artifact.windowsUwpDesktopPath: - final String engineArtifactsPath = _cache.getArtifactDirectory('engine').path; - return _fileSystem.path.join(engineArtifactsPath, 'windows-uwp-x64-${getNameForBuildMode(mode!)}', _artifactToFileName(artifact, platform, mode)); case Artifact.windowsCppClientWrapper: final String engineArtifactsPath = _cache.getArtifactDirectory('engine').path; return _fileSystem.path.join(engineArtifactsPath, 'windows-x64', _artifactToFileName(artifact, platform, mode)); - case Artifact.windowsUwpCppClientWrapper: - final String engineArtifactsPath = _cache.getArtifactDirectory('engine').path; - return _fileSystem.path.join(engineArtifactsPath, 'windows-uwp-x64-debug', _artifactToFileName(artifact, platform, mode)); case Artifact.skyEnginePath: final Directory dartPackageDirectory = _cache.getCacheDir('pkg'); return _fileSystem.path.join(dartPackageDirectory.path, _artifactToFileName(artifact)); @@ -644,11 +616,6 @@ class CachedArtifacts implements Artifacts { .childDirectory(_enginePlatformDirectoryName(platform)) .childFile(_artifactToFileName(artifact, platform, mode)!) .path; - case Artifact.uwptool: - return _cache.getArtifactDirectory('engine') - .childDirectory('windows-uwp-x64-${getNameForBuildMode(mode ?? BuildMode.debug)}') - .childFile(_artifactToFileName(artifact, platform, mode)!) - .path; case Artifact.flutterFramework: case Artifact.flutterXcframework: case Artifact.fuchsiaFlutterRunner: @@ -684,7 +651,6 @@ class CachedArtifacts implements Artifacts { case TargetPlatform.android_arm64: case TargetPlatform.android_x64: case TargetPlatform.android_x86: - case TargetPlatform.windows_uwp_x64: assert(mode != null, 'Need to specify a build mode for platform $platform.'); final String suffix = mode != BuildMode.debug ? '-${snakeCase(getModeName(mode!), '-')}' : ''; return _fileSystem.path.join(engineDir, platformName + suffix); @@ -914,19 +880,15 @@ class CachedLocalEngineArtifacts implements LocalEngineArtifacts { return _fileSystem.path.join(_hostEngineOutPath, artifactFileName); case Artifact.constFinder: return _fileSystem.path.join(_hostEngineOutPath, 'gen', artifactFileName); - case Artifact.windowsUwpDesktopPath: case Artifact.linuxDesktopPath: case Artifact.linuxHeaders: case Artifact.windowsDesktopPath: case Artifact.windowsCppClientWrapper: - case Artifact.windowsUwpCppClientWrapper: return _fileSystem.path.join(_hostEngineOutPath, artifactFileName); case Artifact.frontendServerSnapshotForEngineDartSdk: return _fileSystem.path.join( _hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', artifactFileName, ); - case Artifact.uwptool: - return _fileSystem.path.join(_hostEngineOutPath, artifactFileName); } } diff --git a/packages/flutter_tools/lib/src/base/build.dart b/packages/flutter_tools/lib/src/base/build.dart index 79d5b6090462c..92bf17d27f8d3 100644 --- a/packages/flutter_tools/lib/src/base/build.dart +++ b/packages/flutter_tools/lib/src/base/build.dart @@ -314,7 +314,6 @@ class AOTSnapshotter { TargetPlatform.linux_x64, TargetPlatform.linux_arm64, TargetPlatform.windows_x64, - TargetPlatform.windows_uwp_x64, ].contains(platform); } } diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart index c12e7c201ffb1..954e678716b10 100644 --- a/packages/flutter_tools/lib/src/build_info.dart +++ b/packages/flutter_tools/lib/src/build_info.dart @@ -527,7 +527,6 @@ enum TargetPlatform { linux_x64, linux_arm64, windows_x64, - windows_uwp_x64, fuchsia_arm64, fuchsia_x64, tester, @@ -660,8 +659,6 @@ String getNameForTargetPlatform(TargetPlatform platform, {DarwinArch? darwinArch return 'linux-arm64'; case TargetPlatform.windows_x64: return 'windows-x64'; - case TargetPlatform.windows_uwp_x64: - return 'windows-uwp-x64'; case TargetPlatform.fuchsia_arm64: return 'fuchsia-arm64'; case TargetPlatform.fuchsia_x64: @@ -705,8 +702,6 @@ TargetPlatform getTargetPlatformForName(String platform) { return TargetPlatform.linux_arm64; case 'windows-x64': return TargetPlatform.windows_x64; - case 'windows-uwp-x64': - return TargetPlatform.windows_uwp_x64; case 'web-javascript': return TargetPlatform.web_javascript; } @@ -770,7 +765,6 @@ String fuchsiaArchForTargetPlatform(TargetPlatform targetPlatform) { case TargetPlatform.linux_x64: case TargetPlatform.tester: case TargetPlatform.web_javascript: - case TargetPlatform.windows_uwp_x64: case TargetPlatform.windows_x64: throw UnsupportedError('Unexpected Fuchsia platform $targetPlatform'); } @@ -859,11 +853,6 @@ String getWindowsBuildDirectory() { return globals.fs.path.join(getBuildDirectory(), 'windows'); } -/// Returns the Windows UWP build output directory. -String getWindowsBuildUwpDirectory() { - return globals.fs.path.join(getBuildDirectory(), 'winuwp'); -} - /// Returns the Fuchsia build output directory. String getFuchsiaBuildDirectory() { return globals.fs.path.join(getBuildDirectory(), 'fuchsia'); @@ -1030,7 +1019,6 @@ String getNameForTargetPlatformArch(TargetPlatform platform) { case TargetPlatform.ios: case TargetPlatform.tester: case TargetPlatform.web_javascript: - case TargetPlatform.windows_uwp_x64: throw UnsupportedError('Unexpected target platform $platform'); } } diff --git a/packages/flutter_tools/lib/src/build_system/targets/common.dart b/packages/flutter_tools/lib/src/build_system/targets/common.dart index c0e78b7398579..9c00dce02342a 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/common.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/common.dart @@ -204,7 +204,6 @@ class KernelSnapshot extends Target { case TargetPlatform.linux_arm64: case TargetPlatform.tester: case TargetPlatform.web_javascript: - case TargetPlatform.windows_uwp_x64: forceLinkPlatform = false; break; } diff --git a/packages/flutter_tools/lib/src/build_system/targets/windows.dart b/packages/flutter_tools/lib/src/build_system/targets/windows.dart index 4eed095b1ca09..b5f80a331e2c3 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/windows.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/windows.dart @@ -26,20 +26,7 @@ const List _kWindowsArtifacts = [ 'flutter_windows.h', ]; -const List _kWindowsUwpArtifacts = [ - 'flutter_windows_winuwp.dll', - 'flutter_windows_winuwp.dll.exp', - 'flutter_windows_winuwp.dll.lib', - 'flutter_windows_winuwp.dll.pdb', - 'flutter_export.h', - 'flutter_messenger.h', - 'flutter_plugin_registrar.h', - 'flutter_texture_registrar.h', - 'flutter_windows.h', -]; - const String _kWindowsDepfile = 'windows_engine_sources.d'; -const String _kWindowsUwpDepfile = 'windows_uwp_engine_sources.d'; /// Copies the Windows desktop embedding files to the copy directory. class UnpackWindows extends Target { @@ -111,84 +98,6 @@ class UnpackWindows extends Target { } } - -/// Copies the Windows desktop embedding files to the copy directory. -class UnpackWindowsUwp extends Target { - const UnpackWindowsUwp(); - - @override - String get name => 'unpack_windows_uwp'; - - @override - List get inputs => const [ - Source.pattern('{FLUTTER_ROOT}/packages/flutter_tools/lib/src/build_system/targets/windows.dart'), - ]; - - @override - List get outputs => const []; - - @override - List get depfiles => const [_kWindowsUwpDepfile]; - - @override - List get dependencies => const []; - - @override - Future build(Environment environment) async { - final String? buildModeEnvironment = environment.defines[kBuildMode]; - if (buildModeEnvironment == null) { - throw MissingDefineException(kBuildMode, name); - } - final BuildMode buildMode = getBuildModeForName(buildModeEnvironment); - final String engineSourcePath = environment.artifacts - .getArtifactPath( - Artifact.windowsUwpDesktopPath, - platform: TargetPlatform.windows_x64, - mode: buildMode, - ); - final String clientSourcePath = environment.artifacts - .getArtifactPath( - Artifact.windowsUwpCppClientWrapper, - platform: TargetPlatform.windows_x64, - mode: buildMode, - ); - final Directory outputDirectory = environment.fileSystem.directory( - environment.fileSystem.path.join( - environment.projectDir.path, - 'winuwp', - 'flutter', - 'ephemeral', - ), - ); - final Depfile depfile = unpackDesktopArtifacts( - fileSystem: environment.fileSystem, - artifacts: _kWindowsUwpArtifacts, - engineSourcePath: engineSourcePath, - outputDirectory: outputDirectory, - clientSourcePaths: [clientSourcePath], - icuDataPath: environment.artifacts.getArtifactPath( - Artifact.icuData, - platform: TargetPlatform.windows_x64 - ) - ); - // Copy flutter_windows.h into flutter directory as well. - final File flutterWindows = outputDirectory.childFile('flutter_windows.h'); - final File flutterWindowsDest = flutterWindows.parent.parent.childFile('flutter_windows.h'); - flutterWindows.copySync(flutterWindowsDest.path); - depfile.outputs.add(flutterWindowsDest); - // - - final DepfileService depfileService = DepfileService( - fileSystem: environment.fileSystem, - logger: environment.logger, - ); - depfileService.writeToFile( - depfile, - environment.buildDir.childFile(_kWindowsUwpDepfile), - ); - } -} - /// Creates a bundle for the Windows desktop target. abstract class BundleWindowsAssets extends Target { const BundleWindowsAssets(); @@ -245,31 +154,16 @@ abstract class BundleWindowsAssets extends Target { } } - -/// Creates a bundle for the Windows desktop target. -abstract class BundleWindowsAssetsUwp extends BundleWindowsAssets { - const BundleWindowsAssetsUwp(); - - @override - List get dependencies => const [ - KernelSnapshot(), - UnpackWindowsUwp(), - ]; -} - /// A wrapper for AOT compilation that copies app.so into the output directory. class WindowsAotBundle extends Target { /// Create a [WindowsAotBundle] wrapper for [aotTarget]. - const WindowsAotBundle(this.aotTarget, {required this.uwp}); + const WindowsAotBundle(this.aotTarget); /// The [AotElfBase] subclass that produces the app.so. final AotElfBase aotTarget; - /// Whether this is the UWP target. - final bool uwp; - @override - String get name => uwp ? 'windows_uwp_aot_bundle' : 'windows_aot_bundle'; + String get name => 'windows_aot_bundle'; @override List get inputs => const [ @@ -277,10 +171,7 @@ class WindowsAotBundle extends Target { ]; @override - List get outputs => uwp ? - const [ - Source.pattern('{OUTPUT_DIR}/winuwp/app.so'), - ] : + List get outputs => const [ Source.pattern('{OUTPUT_DIR}/windows/app.so'), ]; @@ -293,44 +184,7 @@ class WindowsAotBundle extends Target { @override Future build(Environment environment) async { final File outputFile = environment.buildDir.childFile('app.so'); - final Directory outputDirectory = environment.outputDir.childDirectory(uwp ? 'winuwp' : 'windows'); - if (!outputDirectory.existsSync()) { - outputDirectory.createSync(recursive: true); - } - outputFile.copySync(outputDirectory.childFile('app.so').path); - } -} - -/// A wrapper for AOT compilation that copies app.so into the output directory. -class WindowsUwpAotBundle extends Target { - /// Create a [WindowsAotBundle] wrapper for [aotTarget]. - const WindowsUwpAotBundle(this.aotTarget); - - /// The [AotElfBase] subclass that produces the app.so. - final AotElfBase aotTarget; - - @override - String get name => 'windows_uwp_aot_bundle'; - - @override - List get inputs => const [ - Source.pattern('{BUILD_DIR}/app.so'), - ]; - - @override - List get outputs => const [ - Source.pattern('{OUTPUT_DIR}/winuwp/app.so'), - ]; - - @override - List get dependencies => [ - aotTarget, - ]; - - @override - Future build(Environment environment) async { - final File outputFile = environment.buildDir.childFile('app.so'); - final Directory outputDirectory = environment.outputDir.childDirectory('winuwp'); + final Directory outputDirectory = environment.outputDir.childDirectory('windows'); if (!outputDirectory.existsSync()) { outputDirectory.createSync(recursive: true); } @@ -350,7 +204,7 @@ class ReleaseBundleWindowsAssets extends BundleWindowsAssets { @override List get dependencies => [ ...super.dependencies, - const WindowsAotBundle(AotElfRelease(TargetPlatform.windows_x64), uwp: false), + const WindowsAotBundle(AotElfRelease(TargetPlatform.windows_x64)), ]; } @@ -366,7 +220,7 @@ class ProfileBundleWindowsAssets extends BundleWindowsAssets { @override List get dependencies => [ ...super.dependencies, - const WindowsAotBundle(AotElfProfile(TargetPlatform.windows_x64), uwp: false), + const WindowsAotBundle(AotElfProfile(TargetPlatform.windows_x64)), ]; } @@ -386,52 +240,3 @@ class DebugBundleWindowsAssets extends BundleWindowsAssets { const Source.pattern('{OUTPUT_DIR}/flutter_assets/kernel_blob.bin'), ]; } - -class ReleaseBundleWindowsAssetsUwp extends BundleWindowsAssetsUwp { - const ReleaseBundleWindowsAssetsUwp(); - - @override - String get name => 'release_bundle_windows_assets_uwp'; - - @override - List get outputs => const []; - - @override - List get dependencies => [ - ...super.dependencies, - const WindowsAotBundle(AotElfRelease(TargetPlatform.windows_uwp_x64), uwp: true), - ]; -} - -class ProfileBundleWindowsAssetsUwp extends BundleWindowsAssetsUwp { - const ProfileBundleWindowsAssetsUwp(); - - @override - String get name => 'profile_bundle_windows_assets_uwp'; - - @override - List get outputs => const []; - - @override - List get dependencies => [ - ...super.dependencies, - const WindowsAotBundle(AotElfProfile(TargetPlatform.windows_uwp_x64), uwp: true), - ]; -} - -class DebugBundleWindowsAssetsUwp extends BundleWindowsAssetsUwp { - const DebugBundleWindowsAssetsUwp(); - - @override - String get name => 'debug_bundle_windows_assets_uwp'; - - @override - List get inputs => [ - const Source.pattern('{BUILD_DIR}/app.dill'), - ]; - - @override - List get outputs => [ - const Source.pattern('{OUTPUT_DIR}/flutter_assets/kernel_blob.bin'), - ]; -} diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart index 701a898f33922..6fe426a5601f8 100644 --- a/packages/flutter_tools/lib/src/cache.dart +++ b/packages/flutter_tools/lib/src/cache.dart @@ -70,9 +70,6 @@ class DevelopmentArtifact { /// Artifacts required for the Flutter Runner. static const DevelopmentArtifact flutterRunner = DevelopmentArtifact._('flutter_runner', feature: flutterFuchsiaFeature); - /// Artifacts required for desktop Windows UWP. - static const DevelopmentArtifact windowsUwp = DevelopmentArtifact._('winuwp', feature: windowsUwpEmbedding); - /// Artifacts required for any development platform. /// /// This does not need to be explicitly returned from requiredArtifacts as @@ -92,7 +89,6 @@ class DevelopmentArtifact { fuchsia, universal, flutterRunner, - windowsUwp, ]; @override diff --git a/packages/flutter_tools/lib/src/cmake_project.dart b/packages/flutter_tools/lib/src/cmake_project.dart index d30b43e7986fd..bb707840d2d42 100644 --- a/packages/flutter_tools/lib/src/cmake_project.dart +++ b/packages/flutter_tools/lib/src/cmake_project.dart @@ -2,13 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:meta/meta.dart'; -import 'package:xml/xml.dart'; - -import 'base/common.dart'; import 'base/file_system.dart'; import 'base/utils.dart'; -import 'cmake.dart'; import 'platform_plugins.dart'; import 'project.dart'; @@ -84,45 +79,6 @@ class WindowsProject extends FlutterProjectPlatform implements CmakeBasedProject Future ensureReadyForPlatformSpecificTooling() async {} } -/// The Windows UWP version of the Windows project. -class WindowsUwpProject extends WindowsProject { - WindowsUwpProject.fromFlutter(super.parent) : super.fromFlutter(); - - @override - String get _childDirectory => 'winuwp'; - - File get runnerCmakeFile => _editableDirectory.childDirectory('runner_uwp').childFile('CMakeLists.txt'); - - /// Eventually this will be used to check if the user's unstable project needs to be regenerated. - int? get projectVersion => int.tryParse(_editableDirectory.childFile('project_version').readAsStringSync()); - - /// Retrieve the GUID of the UWP package. - late final String? packageGuid = getCmakePackageGuid(runnerCmakeFile); - - File get appManifest => _editableDirectory.childDirectory('runner_uwp').childFile('appxmanifest.in'); - - late final String? packageVersion = parseAppVersion(this); -} - -@visibleForTesting -String? parseAppVersion(WindowsUwpProject project) { - final File appManifestFile = project.appManifest; - if (!appManifestFile.existsSync()) { - return null; - } - - XmlDocument document; - try { - document = XmlDocument.parse(appManifestFile.readAsStringSync()); - } on XmlParserException { - throwToolExit('Error parsing $appManifestFile. Please ensure that the appx manifest is a valid XML document and try again.'); - } - for (final XmlElement metaData in document.findAllElements('Identity')) { - return metaData.getAttribute('Version'); - } - return null; -} - /// The Linux sub project. class LinuxProject extends FlutterProjectPlatform implements CmakeBasedProject { LinuxProject.fromFlutter(this.parent); diff --git a/packages/flutter_tools/lib/src/commands/assemble.dart b/packages/flutter_tools/lib/src/commands/assemble.dart index 928181d31f65f..4f7d9c01cb7bb 100644 --- a/packages/flutter_tools/lib/src/commands/assemble.dart +++ b/packages/flutter_tools/lib/src/commands/assemble.dart @@ -79,10 +79,6 @@ List _kDefaultTargets = [ const DebugBundleWindowsAssets(), const ProfileBundleWindowsAssets(), const ReleaseBundleWindowsAssets(), - // Windows UWP targets - const DebugBundleWindowsAssetsUwp(), - const ProfileBundleWindowsAssetsUwp(), - const ReleaseBundleWindowsAssetsUwp(), ]; /// Assemble provides a low level API to interact with the flutter tool build diff --git a/packages/flutter_tools/lib/src/commands/build.dart b/packages/flutter_tools/lib/src/commands/build.dart index 5cfaa11c5dc97..9a332a2753479 100644 --- a/packages/flutter_tools/lib/src/commands/build.dart +++ b/packages/flutter_tools/lib/src/commands/build.dart @@ -18,7 +18,6 @@ import 'build_fuchsia.dart'; import 'build_ios.dart'; import 'build_ios_framework.dart'; import 'build_web.dart'; -import 'build_winuwp.dart'; class BuildCommand extends FlutterCommand { BuildCommand({ bool verboseHelp = false }) { @@ -39,7 +38,6 @@ class BuildCommand extends FlutterCommand { verboseHelp: verboseHelp )); _addSubcommand(BuildWindowsCommand(verboseHelp: verboseHelp)); - _addSubcommand(BuildWindowsUwpCommand(verboseHelp: verboseHelp)); _addSubcommand(BuildFuchsiaCommand(verboseHelp: verboseHelp)); } diff --git a/packages/flutter_tools/lib/src/commands/build_bundle.dart b/packages/flutter_tools/lib/src/commands/build_bundle.dart index f7f90453edc00..327097e7be687 100644 --- a/packages/flutter_tools/lib/src/commands/build_bundle.dart +++ b/packages/flutter_tools/lib/src/commands/build_bundle.dart @@ -108,7 +108,6 @@ class BuildBundleCommand extends BuildSubCommand { } break; case TargetPlatform.windows_x64: - case TargetPlatform.windows_uwp_x64: if (!featureFlags.isWindowsEnabled) { throwToolExit('Windows is not a supported target platform.'); } diff --git a/packages/flutter_tools/lib/src/commands/build_winuwp.dart b/packages/flutter_tools/lib/src/commands/build_winuwp.dart deleted file mode 100644 index 7fb6eb9617775..0000000000000 --- a/packages/flutter_tools/lib/src/commands/build_winuwp.dart +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:meta/meta.dart'; - -import '../base/common.dart'; -import '../build_info.dart'; -import '../cache.dart'; -import '../features.dart'; -import '../globals.dart' as globals; -import '../project.dart'; -import '../runner/flutter_command.dart' show FlutterCommandResult; -import '../windows/build_windows.dart'; -import '../windows/visual_studio.dart'; -import 'build.dart'; - -/// A command to build a Windows UWP desktop target. -class BuildWindowsUwpCommand extends BuildSubCommand { - BuildWindowsUwpCommand({ - bool verboseHelp = false, - }) : super(verboseHelp: verboseHelp) { - addCommonDesktopBuildOptions(verboseHelp: verboseHelp); - } - - @override - final String name = 'winuwp'; - - @override - bool get hidden => !featureFlags.isWindowsUwpEnabled || !globals.platform.isWindows; - - @override - Future> get requiredArtifacts async => { - DevelopmentArtifact.windowsUwp, - }; - - @override - String get description => 'Build a Windows UWP desktop application.'; - - @visibleForTesting - VisualStudio? visualStudioOverride; - - @override - Future runCommand() async { - final FlutterProject flutterProject = FlutterProject.current(); - final BuildInfo buildInfo = await getBuildInfo(); - if (!featureFlags.isWindowsUwpEnabled) { - throwToolExit('"build winuwp" is not currently supported.'); - } - if (!globals.platform.isWindows) { - throwToolExit('"build winuwp" only supported on Windows hosts.'); - } - displayNullSafetyMode(buildInfo); - await buildWindowsUwp( - flutterProject.windowsUwp, - buildInfo, - target: targetFile, - visualStudioOverride: visualStudioOverride, - ); - return FlutterCommandResult.success(); - } -} diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart index cf85a54a70500..ae8b55bf0c2ce 100644 --- a/packages/flutter_tools/lib/src/commands/create.dart +++ b/packages/flutter_tools/lib/src/commands/create.dart @@ -289,7 +289,6 @@ class CreateCommand extends CreateBase { linux: featureFlags.isLinuxEnabled && platforms.contains('linux'), macos: featureFlags.isMacOSEnabled && platforms.contains('macos'), windows: featureFlags.isWindowsEnabled && platforms.contains('windows'), - windowsUwp: featureFlags.isWindowsUwpEnabled && platforms.contains('winuwp'), // Enable null safety everywhere. dartSdkVersionBounds: "'>=$dartSdk <3.0.0'", implementationTests: boolArg('implementation-tests'), diff --git a/packages/flutter_tools/lib/src/commands/create_base.dart b/packages/flutter_tools/lib/src/commands/create_base.dart index f1f9856bc8b31..737b3d3c04806 100644 --- a/packages/flutter_tools/lib/src/commands/create_base.dart +++ b/packages/flutter_tools/lib/src/commands/create_base.dart @@ -20,7 +20,6 @@ import '../cache.dart'; import '../convert.dart'; import '../dart/generate_synthetic_packages.dart'; import '../dart/pub.dart'; -import '../features.dart'; import '../flutter_project_metadata.dart'; import '../globals.dart' as globals; import '../project.dart'; @@ -45,7 +44,6 @@ const List kAllCreatePlatforms = [ 'linux', 'macos', 'web', - 'winuwp', ]; const String _kDefaultPlatformArgumentHelp = @@ -165,13 +163,9 @@ abstract class CreateBase extends FlutterCommand { aliases: [ 'platform' ], defaultsTo: [ ..._kAvailablePlatforms, - if (featureFlags.isWindowsUwpEnabled) - 'winuwp', ], allowed: [ ..._kAvailablePlatforms, - if (featureFlags.isWindowsUwpEnabled) - 'winuwp', ], ); } @@ -355,7 +349,6 @@ abstract class CreateBase extends FlutterCommand { bool linux = false, bool macos = false, bool windows = false, - bool windowsUwp = false, bool implementationTests = false, }) { final String pluginDartClass = _createPluginClassName(projectName); @@ -418,7 +411,6 @@ abstract class CreateBase extends FlutterCommand { 'linux': linux, 'macos': macos, 'windows': windows, - 'winuwp': windowsUwp, 'year': DateTime.now().year, 'dartSdkVersionBounds': dartSdkVersionBounds, 'implementationTests': implementationTests, @@ -522,7 +514,6 @@ abstract class CreateBase extends FlutterCommand { final bool macOSPlatform = templateContext['macos'] as bool ?? false; final bool windowsPlatform = templateContext['windows'] as bool ?? false; final bool webPlatform = templateContext['web'] as bool ?? false; - final bool winUwpPlatform = templateContext['winuwp'] as bool ?? false; if (boolArg('pub')) { final Environment environment = Environment( @@ -562,7 +553,6 @@ abstract class CreateBase extends FlutterCommand { macOSPlatform: macOSPlatform, windowsPlatform: windowsPlatform, webPlatform: webPlatform, - winUwpPlatform: winUwpPlatform, ); } final List platformsForMigrateConfig = [SupportedPlatform.root]; @@ -585,9 +575,6 @@ abstract class CreateBase extends FlutterCommand { if (windowsPlatform) { platformsForMigrateConfig.add(SupportedPlatform.windows); } - if (winUwpPlatform) { - platformsForMigrateConfig.add(SupportedPlatform.windowsuwp); - } if (templateContext['fuchsia'] == true) { platformsForMigrateConfig.add(SupportedPlatform.fuchsia); } diff --git a/packages/flutter_tools/lib/src/commands/precache.dart b/packages/flutter_tools/lib/src/commands/precache.dart index 39de6503826e0..dfab73928d90a 100644 --- a/packages/flutter_tools/lib/src/commands/precache.dart +++ b/packages/flutter_tools/lib/src/commands/precache.dart @@ -50,8 +50,6 @@ class PrecacheCommand extends FlutterCommand { help: 'Precache artifacts for Linux desktop development.'); argParser.addFlag('windows', negatable: true, defaultsTo: false, help: 'Precache artifacts for Windows desktop development.'); - argParser.addFlag('winuwp', negatable: true, defaultsTo: false, - help: 'Precache artifacts for Windows UWP desktop development.'); argParser.addFlag('macos', negatable: true, defaultsTo: false, help: 'Precache artifacts for macOS desktop development.'); argParser.addFlag('fuchsia', negatable: true, defaultsTo: false, diff --git a/packages/flutter_tools/lib/src/context_runner.dart b/packages/flutter_tools/lib/src/context_runner.dart index aea6b97f89f5b..7dcda5c5e6aa7 100644 --- a/packages/flutter_tools/lib/src/context_runner.dart +++ b/packages/flutter_tools/lib/src/context_runner.dart @@ -64,7 +64,6 @@ import 'run_hot.dart'; import 'runner/local_engine.dart'; import 'version.dart'; import 'web/workflow.dart'; -import 'windows/uwptool.dart'; import 'windows/visual_studio.dart'; import 'windows/visual_studio_validator.dart'; import 'windows/windows_workflow.dart'; @@ -207,11 +206,6 @@ Future runInContext( operatingSystemUtils: globals.os, terminal: globals.terminal, customDevicesConfig: globals.customDevicesConfig, - uwptool: UwpTool( - artifacts: globals.artifacts, - logger: globals.logger, - processManager: globals.processManager, - ), ), DevtoolsLauncher: () => DevtoolsServerLauncher( processManager: globals.processManager, diff --git a/packages/flutter_tools/lib/src/features.dart b/packages/flutter_tools/lib/src/features.dart index f94f031b6f6cf..a53d3baf3fd07 100644 --- a/packages/flutter_tools/lib/src/features.dart +++ b/packages/flutter_tools/lib/src/features.dart @@ -47,9 +47,6 @@ abstract class FeatureFlags { /// Whether fast single widget reloads are enabled. bool get isSingleWidgetReloadEnabled => false; - /// Whether the windows UWP embedding is enabled. - bool get isWindowsUwpEnabled => false; - /// Whether a particular feature is enabled for the current channel. /// /// Prefer using one of the specific getters above instead of this API. @@ -62,7 +59,6 @@ const List allFeatures = [ flutterLinuxDesktopFeature, flutterMacOSDesktopFeature, flutterWindowsDesktopFeature, - windowsUwpEmbedding, singleWidgetReload, flutterAndroidFeature, flutterIOSFeature, @@ -212,16 +208,6 @@ const Feature singleWidgetReload = Feature( ), ); -/// The feature for enabling the Windows UWP embedding. -const Feature windowsUwpEmbedding = Feature( - name: 'Flutter for Windows UWP', - configSetting: 'enable-windows-uwp-desktop', - extraHelpText: 'Warning: Windows UWP support is obsolete and will be removed.', - master: FeatureChannelSetting( - available: true, - ), -); - /// A [Feature] is a process for conditionally enabling tool features. /// /// All settings are optional, and if not provided will generally default to diff --git a/packages/flutter_tools/lib/src/flutter_application_package.dart b/packages/flutter_tools/lib/src/flutter_application_package.dart index a0f924bef9eb7..c7afa223d372e 100644 --- a/packages/flutter_tools/lib/src/flutter_application_package.dart +++ b/packages/flutter_tools/lib/src/flutter_application_package.dart @@ -105,8 +105,6 @@ class FlutterApplicationPackageFactory extends ApplicationPackageFactory { return applicationBinary == null ? FuchsiaApp.fromFuchsiaProject(FlutterProject.current().fuchsia) : FuchsiaApp.fromPrebuiltApp(applicationBinary); - case TargetPlatform.windows_uwp_x64: - return BuildableUwpApp(project: FlutterProject.current().windowsUwp); } } } diff --git a/packages/flutter_tools/lib/src/flutter_cache.dart b/packages/flutter_tools/lib/src/flutter_cache.dart index 818c10f1082b8..4874af196d45b 100644 --- a/packages/flutter_tools/lib/src/flutter_cache.dart +++ b/packages/flutter_tools/lib/src/flutter_cache.dart @@ -38,7 +38,6 @@ class FlutterCache extends Cache { registerArtifact(FlutterWebSdk(this, platform: platform)); registerArtifact(FlutterSdk(this, platform: platform)); registerArtifact(WindowsEngineArtifacts(this, platform: platform)); - registerArtifact(WindowsUwpEngineArtifacts(this, platform: platform)); registerArtifact(MacOSEngineArtifacts(this, platform: platform)); registerArtifact(LinuxEngineArtifacts(this, platform: platform)); registerArtifact(LinuxFuchsiaSDKArtifacts(this, platform: platform)); @@ -305,33 +304,6 @@ class WindowsEngineArtifacts extends EngineCachedArtifact { List getLicenseDirs() => const []; } -class WindowsUwpEngineArtifacts extends EngineCachedArtifact { - WindowsUwpEngineArtifacts(Cache cache, { - required Platform platform, - }) : _platform = platform, - super( - 'windows-uwp-sdk', - cache, - DevelopmentArtifact.windowsUwp, - ); - - final Platform _platform; - - @override - List getPackageDirs() => const []; - - @override - List> getBinaryDirs() { - if (_platform.isWindows || ignorePlatformFiltering) { - return _windowsUwpDesktopBinaryDirs; - } - return const >[]; - } - - @override - List getLicenseDirs() => const []; -} - /// Artifacts required for desktop Linux builds. class LinuxEngineArtifacts extends EngineCachedArtifact { LinuxEngineArtifacts(Cache cache, { @@ -864,13 +836,6 @@ const List> _windowsDesktopBinaryDirs = >[ ['windows-x64-release', 'windows-x64-release/windows-x64-flutter.zip'], ]; -const List> _windowsUwpDesktopBinaryDirs = >[ - ['windows-uwp-x64-debug', 'windows-x64-debug/windows-uwp-x64-flutter.zip'], - ['windows-uwp-x64-debug', 'windows-x64/flutter-cpp-client-wrapper.zip'], - ['windows-uwp-x64-profile', 'windows-x64-profile/windows-uwp-x64-flutter.zip'], - ['windows-uwp-x64-release', 'windows-x64-release/windows-uwp-x64-flutter.zip'], -]; - const List> _macOSDesktopBinaryDirs = >[ ['darwin-x64', 'darwin-x64/FlutterMacOS.framework.zip'], ['darwin-x64', 'darwin-x64/gen_snapshot.zip'], diff --git a/packages/flutter_tools/lib/src/flutter_device_manager.dart b/packages/flutter_tools/lib/src/flutter_device_manager.dart index 4e394a166f98e..887783b5df426 100644 --- a/packages/flutter_tools/lib/src/flutter_device_manager.dart +++ b/packages/flutter_tools/lib/src/flutter_device_manager.dart @@ -29,7 +29,7 @@ import 'macos/xcdevice.dart'; import 'tester/flutter_tester.dart'; import 'version.dart'; import 'web/web_device.dart'; -import 'windows/uwptool.dart'; + import 'windows/windows_device.dart'; import 'windows/windows_workflow.dart'; @@ -56,7 +56,6 @@ class FlutterDeviceManager extends DeviceManager { required WindowsWorkflow windowsWorkflow, required super.terminal, required CustomDevicesConfig customDevicesConfig, - required UwpTool uwptool, }) : deviceDiscoverers = [ AndroidDevices( logger: logger, @@ -120,8 +119,6 @@ class FlutterDeviceManager extends DeviceManager { logger: logger, fileSystem: fileSystem, windowsWorkflow: windowsWorkflow, - featureFlags: featureFlags, - uwptool: uwptool, ), WebDevices( featureFlags: featureFlags, diff --git a/packages/flutter_tools/lib/src/flutter_features.dart b/packages/flutter_tools/lib/src/flutter_features.dart index d3b1295831b5a..9f4ce259850f8 100644 --- a/packages/flutter_tools/lib/src/flutter_features.dart +++ b/packages/flutter_tools/lib/src/flutter_features.dart @@ -47,9 +47,6 @@ class FlutterFeatureFlags implements FeatureFlags { @override bool get isSingleWidgetReloadEnabled => isEnabled(singleWidgetReload); - @override - bool get isWindowsUwpEnabled => isEnabled(windowsUwpEmbedding); - @override bool isEnabled(Feature feature) { final String currentChannel = _flutterVersion.channel; diff --git a/packages/flutter_tools/lib/src/flutter_plugins.dart b/packages/flutter_tools/lib/src/flutter_plugins.dart index d2f8fbd8092bf..a399c834b49f8 100644 --- a/packages/flutter_tools/lib/src/flutter_plugins.dart +++ b/packages/flutter_tools/lib/src/flutter_plugins.dart @@ -922,25 +922,6 @@ Future writeWindowsPluginFiles(FlutterProject project, List plugin await _writePluginCmakefile(project.windows.generatedPluginCmakeFile, context, templateRenderer); } -/// The tooling currently treats UWP and win32 as identical, other than variant -/// filtering, for the purposes of tooling support and initial UWP bootstrap. -@visibleForTesting -Future writeWindowsUwpPluginFiles(FlutterProject project, List plugins, TemplateRenderer templateRenderer) async { - final List methodChannelPlugins = _filterMethodChannelPlugins(plugins, WindowsPlugin.kConfigKey); - final List uwpPlugins = _filterPluginsByVariant(methodChannelPlugins, WindowsPlugin.kConfigKey, PluginPlatformVariant.winuwp); - final List> windowsMethodChannelPlugins = _extractPlatformMaps(uwpPlugins, WindowsPlugin.kConfigKey); - final List ffiPlugins = _filterFfiPlugins(plugins, WindowsPlugin.kConfigKey)..removeWhere(methodChannelPlugins.contains); - final List> windowsFfiPlugins = _extractPlatformMaps(ffiPlugins, WindowsPlugin.kConfigKey); - final Map context = { - 'os': 'windows', - 'methodChannelPlugins': windowsMethodChannelPlugins, - 'ffiPlugins': windowsFfiPlugins, - 'pluginsDir': _cmakeRelativePluginSymlinkDirectoryPath(project.windowsUwp), - }; - await _writeCppPluginRegistrant(project.windowsUwp.managedDirectory, context, templateRenderer); - await _writePluginCmakefile(project.windowsUwp.generatedPluginCmakeFile, context, templateRenderer); -} - Future _writeCppPluginRegistrant(Directory destination, Map templateContext, TemplateRenderer templateRenderer) async { _renderTemplateToFile( _cppPluginRegistryHeaderTemplate, @@ -1006,13 +987,6 @@ void createPluginSymlinks(FlutterProject project, {bool force = false, @visibleF force: force, ); } - if (localFeatureFlags.isWindowsUwpEnabled && project.windowsUwp.existsSync()) { - _createPlatformPluginSymlinks( - project.windowsUwp.pluginSymlinkDirectory, - platformPlugins[project.windows.pluginConfigKey] as List?, - force: force, - ); - } } /// Handler for symlink failures which provides specific instructions for known @@ -1104,7 +1078,6 @@ Future injectPlugins( bool linuxPlatform = false, bool macOSPlatform = false, bool windowsPlatform = false, - bool winUwpPlatform = false, bool webPlatform = false, }) async { final List plugins = await findPlugins(project); @@ -1125,9 +1098,6 @@ Future injectPlugins( if (windowsPlatform) { await writeWindowsPluginFiles(project, plugins, globals.templateRenderer); } - if (winUwpPlatform) { - await writeWindowsUwpPluginFiles(project, plugins, globals.templateRenderer); - } if (!project.isModule) { final List darwinProjects = [ if (iosPlatform) project.ios, diff --git a/packages/flutter_tools/lib/src/mdns_discovery.dart b/packages/flutter_tools/lib/src/mdns_discovery.dart index b4dee608d76f0..ce7d8c2602b16 100644 --- a/packages/flutter_tools/lib/src/mdns_discovery.dart +++ b/packages/flutter_tools/lib/src/mdns_discovery.dart @@ -217,7 +217,6 @@ class MDnsObservatoryDiscovery { case TargetPlatform.linux_x64: case TargetPlatform.tester: case TargetPlatform.web_javascript: - case TargetPlatform.windows_uwp_x64: case TargetPlatform.windows_x64: _logger.printTrace('No interface with an ipv4 link local address was found.'); break; diff --git a/packages/flutter_tools/lib/src/platform_plugins.dart b/packages/flutter_tools/lib/src/platform_plugins.dart index 3a9e9744c0ebd..58d5e3cae2700 100644 --- a/packages/flutter_tools/lib/src/platform_plugins.dart +++ b/packages/flutter_tools/lib/src/platform_plugins.dart @@ -26,9 +26,6 @@ const String kSupportedVariants = 'supportedVariants'; enum PluginPlatformVariant { /// Win32 variant of Windows. win32, - - // UWP variant of Windows. - winuwp, } /// Marker interface for all platform specific plugin config implementations. @@ -396,7 +393,6 @@ class WindowsPlugin extends PluginPlatform } else { const Map variantByName = { 'win32': PluginPlatformVariant.win32, - 'uwp': PluginPlatformVariant.winuwp, }; for (final String variantName in variantList.cast()) { final PluginPlatformVariant? variant = variantByName[variantName]; diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index 4061987a0305a..c127c3030c4e6 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart @@ -35,7 +35,6 @@ enum SupportedPlatform { macos, web, windows, - windowsuwp, fuchsia, root, // Special platform to represent the root project directory } @@ -194,9 +193,6 @@ class FlutterProject { /// The Windows sub project of this project. late final WindowsProject windows = WindowsProject.fromFlutter(this); - /// The Windows UWP sub project of this project. - late final WindowsUwpProject windowsUwp = WindowsUwpProject.fromFlutter(this); - /// The Fuchsia sub project of this project. late final FuchsiaProject fuchsia = FuchsiaProject._(this); @@ -278,9 +274,6 @@ class FlutterProject { if (windows.existsSync()) { platforms.add(SupportedPlatform.windows); } - if (windowsUwp.existsSync()) { - platforms.add(SupportedPlatform.windowsuwp); - } if (fuchsia.existsSync()) { platforms.add(SupportedPlatform.fuchsia); } @@ -336,7 +329,6 @@ class FlutterProject { macOSPlatform: featureFlags.isMacOSEnabled && macos.existsSync(), windowsPlatform: featureFlags.isWindowsEnabled && windows.existsSync(), webPlatform: featureFlags.isWebEnabled && web.existsSync(), - winUwpPlatform: featureFlags.isWindowsUwpEnabled && windowsUwp.existsSync(), deprecationBehavior: deprecationBehavior, ); } @@ -350,7 +342,6 @@ class FlutterProject { bool macOSPlatform = false, bool windowsPlatform = false, bool webPlatform = false, - bool winUwpPlatform = false, DeprecationBehavior deprecationBehavior = DeprecationBehavior.none, }) async { if (!directory.existsSync() || isPlugin) { @@ -375,9 +366,6 @@ class FlutterProject { if (webPlatform) { await web.ensureReadyForPlatformSpecificTooling(); } - if (winUwpPlatform) { - await windowsUwp.ensureReadyForPlatformSpecificTooling(); - } await injectPlugins( this, androidPlatform: androidPlatform, @@ -386,7 +374,6 @@ class FlutterProject { macOSPlatform: macOSPlatform, windowsPlatform: windowsPlatform, webPlatform: webPlatform, - winUwpPlatform: winUwpPlatform, ); } diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index d303e639a60db..b5bbac33c7e16 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart @@ -1523,7 +1523,6 @@ Future getMissingPackageHintForPlatform(TargetPlatform platform) async { case TargetPlatform.linux_x64: case TargetPlatform.tester: case TargetPlatform.web_javascript: - case TargetPlatform.windows_uwp_x64: case TargetPlatform.windows_x64: return null; } diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index 3d1c55316fa9a..21bab0ccfd9cd 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -1591,10 +1591,6 @@ DevelopmentArtifact? artifactFromTargetPlatform(TargetPlatform targetPlatform) { case TargetPlatform.fuchsia_arm64: case TargetPlatform.fuchsia_x64: case TargetPlatform.tester: - case TargetPlatform.windows_uwp_x64: - if (featureFlags.isWindowsUwpEnabled) { - return DevelopmentArtifact.windowsUwp; - } return null; } } diff --git a/packages/flutter_tools/lib/src/runner/local_engine.dart b/packages/flutter_tools/lib/src/runner/local_engine.dart index e3626024ebbe9..ecdad2fa14908 100644 --- a/packages/flutter_tools/lib/src/runner/local_engine.dart +++ b/packages/flutter_tools/lib/src/runner/local_engine.dart @@ -150,10 +150,6 @@ class LocalEngineLocator { // Determine the host engine directory associated with the local engine: // Strip '_sim_' since there are no host simulator builds. String _getHostEngineBasename(String localEngineBasename) { - // Allow winuwp builds to be treated as host builds. - if (localEngineBasename.startsWith('winuwp')) { - return localEngineBasename; - } String tmpBasename = localEngineBasename.replaceFirst('_sim_', '_'); tmpBasename = tmpBasename.substring(tmpBasename.indexOf('_') + 1); // Strip suffix for various archs. diff --git a/packages/flutter_tools/lib/src/sksl_writer.dart b/packages/flutter_tools/lib/src/sksl_writer.dart index 6ac6e3ddd20f8..aab82c0c8079a 100644 --- a/packages/flutter_tools/lib/src/sksl_writer.dart +++ b/packages/flutter_tools/lib/src/sksl_writer.dart @@ -54,7 +54,6 @@ Future sharedSkSlWriter(Device device, Map data, { case TargetPlatform.linux_x64: case TargetPlatform.tester: case TargetPlatform.web_javascript: - case TargetPlatform.windows_uwp_x64: case TargetPlatform.windows_x64: break; } diff --git a/packages/flutter_tools/lib/src/template.dart b/packages/flutter_tools/lib/src/template.dart index 06ae4e7920aad..9af0106fbd1f8 100644 --- a/packages/flutter_tools/lib/src/template.dart +++ b/packages/flutter_tools/lib/src/template.dart @@ -214,11 +214,6 @@ class Template { if (relativeDestinationPath.startsWith('windows.tmpl') && !windows) { return null; } - // Only build a Windows UWP project if explicitly asked. - final bool windowsUwp = (context['winuwp'] as bool?) ?? false; - if (relativeDestinationPath.startsWith('winuwp.tmpl') && !windowsUwp) { - return null; - } final String? projectName = context['projectName'] as String?; final String? androidIdentifier = context['androidIdentifier'] as String?; diff --git a/packages/flutter_tools/lib/src/windows/application_package.dart b/packages/flutter_tools/lib/src/windows/application_package.dart index 2b1e1939e2529..aeb8c6330f2e4 100644 --- a/packages/flutter_tools/lib/src/windows/application_package.dart +++ b/packages/flutter_tools/lib/src/windows/application_package.dart @@ -71,14 +71,3 @@ class BuildableWindowsApp extends WindowsApp { @override String get name => project.parent.manifest.appName; } - -class BuildableUwpApp extends ApplicationPackage { - BuildableUwpApp({required this.project}) : super(id: project.packageGuid ?? 'com.example.placeholder'); - - final WindowsUwpProject project; - - String? get projectVersion => project.packageVersion; - - @override - String? get name => getCmakeExecutableName(project); -} diff --git a/packages/flutter_tools/lib/src/windows/build_windows.dart b/packages/flutter_tools/lib/src/windows/build_windows.dart index 859b97ceb611d..ce4abbb399c88 100644 --- a/packages/flutter_tools/lib/src/windows/build_windows.dart +++ b/packages/flutter_tools/lib/src/windows/build_windows.dart @@ -17,12 +17,8 @@ import '../convert.dart'; import '../flutter_plugins.dart'; import '../globals.dart' as globals; import '../migrations/cmake_custom_command_migration.dart'; -import 'install_manifest.dart'; import 'visual_studio.dart'; -/// Update the string when non-backwards compatible changes are made to the UWP template. -const int kCurrentUwpTemplateVersion = 0; - /// Builds the Windows project using msbuild. Future buildWindows(WindowsProject windowsProject, BuildInfo buildInfo, { String? target, @@ -116,132 +112,6 @@ Future buildWindows(WindowsProject windowsProject, BuildInfo buildInfo, { } } -/// Build the Windows UWP project. -/// -/// Note that this feature is currently unfinished. -Future buildWindowsUwp(WindowsUwpProject windowsProject, BuildInfo buildInfo, { - String? target, - VisualStudio? visualStudioOverride, -}) async { - final Directory buildDirectory = globals.fs.directory(getWindowsBuildUwpDirectory()); - if (!windowsProject.existsSync()) { - throwToolExit( - 'No Windows UWP desktop project configured. See ' - 'https://docs.flutter.dev/desktop#add-desktop-support-to-an-existing-flutter-app ' - 'to learn about adding Windows support to a project.', - ); - } - if (windowsProject.projectVersion != kCurrentUwpTemplateVersion) { - throwToolExit( - 'The Windows UWP project template and build process has changed. In order to build ' - 'you must delete the winuwp directory and re-create the project.', - ); - } - // Ensure that necessary ephemeral files are generated and up to date. - _writeGeneratedFlutterConfig(windowsProject, buildInfo, target); - createPluginSymlinks(windowsProject.parent); - await createManifest( - buildDirectory: buildDirectory, - logger: globals.logger, - platform: globals.platform, - project: windowsProject, - buildInfo: buildInfo, - fileSystem: globals.fs, - ); - - final VisualStudio visualStudio = visualStudioOverride ?? VisualStudio( - fileSystem: globals.fs, - platform: globals.platform, - logger: globals.logger, - processManager: globals.processManager, - ); - final String? cmakePath = visualStudio.cmakePath; - final String? cmakeGenerator = visualStudio.cmakeGenerator; - if (cmakePath == null || cmakeGenerator == null) { - throwToolExit('Unable to find suitable Visual Studio toolchain. ' - 'Please run `flutter doctor` for more details.'); - } - - final String buildModeName = getNameForBuildMode(buildInfo.mode); - final Status status = globals.logger.startProgress( - 'Building Windows UWP application...', - ); - try { - // The Cmake re-entrant build does not work for UWP, so the flutter build is - // run in advance. - await _runFlutterBuild(buildDirectory, buildInfo, target); - await _runCmakeGeneration( - cmakePath: cmakePath, - generator: cmakeGenerator, - buildDir: buildDirectory, - sourceDir: windowsProject.cmakeFile.parent, - ); - await _runBuild(cmakePath, buildDirectory, buildModeName, install: false); - } finally { - status.cancel(); - } -} - -const Map _targets = { - BuildMode.debug: 'debug_bundle_windows_assets_uwp', - BuildMode.profile: 'profile_bundle_windows_assets_uwp', - BuildMode.release: 'release_bundle_windows_assets_uwp', -}; - -Future _runFlutterBuild(Directory buildDirectory, BuildInfo buildInfo, String? targetFile) async { - await buildDirectory.create(recursive: true); - int result; - String? flutterEngine; - String? localEngine; - final Artifacts artifacts = globals.artifacts!; - if (artifacts is LocalEngineArtifacts) { - final String engineOutPath = artifacts.engineOutPath; - flutterEngine = globals.fs.path.dirname(globals.fs.path.dirname(engineOutPath)); - localEngine = globals.fs.path.basename(engineOutPath); - } - try { - final String? buildMode = _targets[buildInfo.mode]; - result = await globals.processUtils.stream( - [ - globals.fs.path.join(Cache.flutterRoot!, 'bin', 'flutter'), - if (globals.logger.isVerbose) - '--verbose', - if (flutterEngine != null) '--local-engine-src-path=$flutterEngine', - if (localEngine != null) '--local-engine=$localEngine', - 'assemble', - '--no-version-check', - '--output=build', - '-dTargetPlatform=windows-uwp-x64', - '-dTrackWidgetCreation=${buildInfo.trackWidgetCreation}', - '-dBuildMode=${getNameForBuildMode(buildInfo.mode)}', - '-dTargetFile=$targetFile', - '-dTreeShakeIcons="${buildInfo.treeShakeIcons}"', - '-dDartObfuscation=${buildInfo.dartObfuscation}', - if (buildInfo.bundleSkSLPath != null) - '-dBundleSkSLPath=${buildInfo.bundleSkSLPath}', - if (buildInfo.codeSizeDirectory != null) - '-dCodeSizeDirectory=${buildInfo.codeSizeDirectory}', - if (buildInfo.splitDebugInfoPath != null) - '-dSplitDebugInfo=${buildInfo.splitDebugInfoPath}', - if (buildInfo.dartDefines != null && buildInfo.dartDefines.isNotEmpty) - '--DartDefines=${encodeDartDefines(buildInfo.dartDefines)}', - if (buildInfo.extraGenSnapshotOptions != null && buildInfo.extraGenSnapshotOptions.isNotEmpty) - '--ExtraGenSnapshotOptions=${buildInfo.extraGenSnapshotOptions}', - if (buildInfo.extraFrontEndOptions != null && buildInfo.extraFrontEndOptions.isNotEmpty) - '--ExtraFrontEndOptions=${buildInfo.extraFrontEndOptions}', - if (buildMode != null) - buildMode, - ], - trace: true, - ); - } on ArgumentError { - throwToolExit("cmake not found. Run 'flutter doctor' for more information."); - } - if (result != 0) { - throwToolExit('Unable to generate build files'); - } -} - Future _runCmakeGeneration({ required String cmakePath, required String generator, diff --git a/packages/flutter_tools/lib/src/windows/install_manifest.dart b/packages/flutter_tools/lib/src/windows/install_manifest.dart deleted file mode 100644 index 783e22ca29099..0000000000000 --- a/packages/flutter_tools/lib/src/windows/install_manifest.dart +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import '../asset.dart'; -import '../base/common.dart'; -import '../base/file_system.dart'; -import '../base/logger.dart'; -import '../base/platform.dart'; -import '../build_info.dart'; -import '../cmake_project.dart'; - -/// Generate an install manifest that is required for CMAKE on UWP projects. -Future createManifest({ - required Logger logger, - required FileSystem fileSystem, - required Platform platform, - required WindowsUwpProject project, - required BuildInfo buildInfo, - required Directory buildDirectory, -}) async { - final List outputs = []; - final AssetBundle assetBundle = AssetBundleFactory.defaultInstance( - logger: logger, - fileSystem: fileSystem, - platform: platform, - ).createBundle(); - final int resultCode = await assetBundle.build( - packagesPath: buildInfo.packagesPath, - assetDirPath: buildDirectory.childDirectory('flutter_assets').path, - ); - if (resultCode != 0) { - throwToolExit('Failed to build assets.'); - } - - if (buildInfo.mode.isPrecompiled) { - outputs.add(buildDirectory.childFile('app.so')); - } else { - outputs.add(buildDirectory.parent.childDirectory('flutter_assets').childFile('kernel_blob.bin')); - } - for (final String key in assetBundle.entries.keys) { - outputs.add(buildDirectory.parent.childDirectory('flutter_assets').childFile(key)); - } - outputs.add(project.ephemeralDirectory.childFile('flutter_windows_winuwp.dll')); - outputs.add(project.ephemeralDirectory.childFile('flutter_windows_winuwp.dll.pdb')); - outputs.add(project.ephemeralDirectory.childFile('icudtl.dat')); - project.ephemeralDirectory.childFile('install_manifest') - ..createSync(recursive: true) - ..writeAsStringSync(outputs.map((File file) => file.absolute.uri.path.substring(1)).join('\n')); -} diff --git a/packages/flutter_tools/lib/src/windows/uwptool.dart b/packages/flutter_tools/lib/src/windows/uwptool.dart deleted file mode 100644 index f5dbba084d5bb..0000000000000 --- a/packages/flutter_tools/lib/src/windows/uwptool.dart +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:async'; - -import 'package:process/process.dart'; - -import '../artifacts.dart'; -import '../base/logger.dart'; -import '../base/process.dart'; - -/// The uwptool command-line tool. -/// -/// `uwptool` is a host utility command-line tool that supports a variety of -/// actions related to Universal Windows Platform (UWP) applications, including -/// installing and uninstalling apps, querying installed apps, and launching -/// apps. -class UwpTool { - UwpTool({ - required Artifacts artifacts, - required Logger logger, - required ProcessManager processManager, - }) : _artifacts = artifacts, - _logger = logger, - _processUtils = ProcessUtils(processManager: processManager, logger: logger); - - final Artifacts _artifacts; - final Logger _logger; - final ProcessUtils _processUtils; - - String get _binaryPath => _artifacts.getArtifactPath(Artifact.uwptool); - - Future> listApps() async { - final List launchCommand = [ - _binaryPath, - 'listapps', - ]; - final RunResult result = await _processUtils.run(launchCommand); - if (result.exitCode != 0) { - _logger.printError('Failed to list installed UWP apps: ${result.stderr}'); - return []; - } - final List packageFamilies = []; - for (final String line in result.stdout.split('\n')) { - final String packageFamily = line.trim(); - if (packageFamily.isNotEmpty) { - packageFamilies.add(packageFamily); - } - } - return packageFamilies; - } - - /// Returns the package family name for the specified package name. - /// - /// If no installed application on the system matches the specified package - /// name, returns null. - Future getPackageFamilyName(String packageName) async { - for (final String packageFamily in await listApps()) { - if (packageFamily.startsWith(packageName)) { - return packageFamily; - } - } - return null; - } - - /// Launches the app with the specified package family name. - /// - /// On success, returns the process ID of the launched app, otherwise null. - Future launchApp(String packageFamily, List args) async { - final List launchCommand = [ - _binaryPath, - 'launch', - packageFamily - ] + args; - final RunResult result = await _processUtils.run(launchCommand); - if (result.exitCode != 0) { - _logger.printError('Failed to launch app $packageFamily: ${result.stderr}'); - return null; - } - // Read the process ID from stdout. - final int? processId = int.tryParse(result.stdout.trim()); - _logger.printTrace('Launched application $packageFamily with process ID $processId'); - return processId; - } - - /// Returns `true` if the specified package signature is valid. - Future isSignatureValid(String packagePath) async { - final List launchCommand = [ - 'powershell.exe', - '-command', - 'if ((Get-AuthenticodeSignature "$packagePath").Status -eq "Valid") { exit 0 } else { exit 1 }' - ]; - final RunResult result = await _processUtils.run(launchCommand); - if (result.exitCode != 0) { - _logger.printTrace('Invalid signature found for $packagePath'); - return false; - } - _logger.printTrace('Valid signature found for $packagePath'); - return true; - } - - /// Installs a developer signing certificate. - /// - /// Returns `true` on success. - Future installCertificate(String certificatePath) async { - final List launchCommand = [ - 'powershell.exe', - 'start', - 'certutil', - '-argumentlist', - '\'-addstore TrustedPeople "$certificatePath"\'', - '-verb', - 'runas' - ]; - final RunResult result = await _processUtils.run(launchCommand); - if (result.exitCode != 0) { - _logger.printError('Failed to install certificate $certificatePath'); - return false; - } - _logger.printTrace('Waiting for certificate store update'); - // TODO(cbracken): Determine how we can query for success until some timeout. - // https://github.com/flutter/flutter/issues/82665 - await Future.delayed(const Duration(seconds: 1)); - _logger.printTrace('Installed certificate $certificatePath'); - return true; - } - - /// Installs the app with the specified build directory. - /// - /// Returns `true` on success. - Future installApp(String packageUri, List dependencyUris) async { - final List launchCommand = [ - _binaryPath, - 'install', - packageUri, - ] + dependencyUris; - final RunResult result = await _processUtils.run(launchCommand); - if (result.exitCode != 0) { - _logger.printError('Failed to install $packageUri'); - return false; - } - _logger.printTrace('Installed application $packageUri'); - return true; - } - - Future uninstallApp(String packageFamily) async { - final List launchCommand = [ - _binaryPath, - 'uninstall', - packageFamily - ]; - final RunResult result = await _processUtils.run(launchCommand); - if (result.exitCode != 0) { - _logger.printError('Failed to uninstall $packageFamily'); - return false; - } - _logger.printTrace('Uninstalled application $packageFamily'); - return true; - } -} diff --git a/packages/flutter_tools/lib/src/windows/windows_device.dart b/packages/flutter_tools/lib/src/windows/windows_device.dart index 08f9f406d1f04..83af4e012dbd4 100644 --- a/packages/flutter_tools/lib/src/windows/windows_device.dart +++ b/packages/flutter_tools/lib/src/windows/windows_device.dart @@ -6,20 +6,15 @@ import 'dart:async'; import 'package:process/process.dart'; -import '../application_package.dart'; import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/os.dart'; -import '../base/utils.dart'; import '../build_info.dart'; import '../desktop_device.dart'; import '../device.dart'; -import '../device_port_forwarder.dart'; -import '../features.dart'; import '../project.dart'; import 'application_package.dart'; import 'build_windows.dart'; -import 'uwptool.dart'; import 'windows_workflow.dart'; /// A device that represents a desktop Windows target. @@ -72,332 +67,6 @@ class WindowsDevice extends DesktopDevice { } } -// A device that represents a desktop Windows UWP target. -class WindowsUWPDevice extends Device { - WindowsUWPDevice({ - required ProcessManager processManager, - required Logger logger, - required FileSystem fileSystem, - required OperatingSystemUtils operatingSystemUtils, - required UwpTool uwptool, - }) : _logger = logger, - _processManager = processManager, - _operatingSystemUtils = operatingSystemUtils, - _fileSystem = fileSystem, - _uwptool = uwptool, - super( - 'winuwp', - platformType: PlatformType.windows, - ephemeral: false, - category: Category.desktop, - ); - - final ProcessManager _processManager; - final Logger _logger; - final FileSystem _fileSystem; - final OperatingSystemUtils _operatingSystemUtils; - final UwpTool _uwptool; - BuildMode? _buildMode; - - int? _processId; - - @override - bool isSupported() => true; - - @override - String get name => 'Windows (UWP)'; - - @override - Future get targetPlatform async => TargetPlatform.windows_uwp_x64; - - @override - bool isSupportedForProject(FlutterProject flutterProject) { - return flutterProject.windowsUwp.existsSync(); - } - - @override - void clearLogs() { } - - @override - Future dispose() async { } - - @override - Future get emulatorId async => null; - - @override - FutureOr getLogReader({covariant BuildableUwpApp? app, bool includePastLogs = false}) { - return NoOpDeviceLogReader('winuwp'); - } - - // Returns `true` if the specified file is a valid package based on file extension. - bool _isValidPackage(String packagePath) { - const List validPackageExtensions = [ - '.appx', '.msix', // Architecture-specific application. - '.appxbundle', '.msixbundle', // Architecture-independent application. - '.eappx', '.emsix', // Encrypted architecture-specific application. - '.eappxbundle', '.emsixbundle', // Encrypted architecture-independent application. - ]; - return validPackageExtensions.any(packagePath.endsWith); - } - - // Walks the build directory for any dependent packages for the specified architecture. - List _getPackagePaths(String directory) { - if (!_fileSystem.isDirectorySync(directory)) { - return []; - } - final List packagePaths = []; - for (final FileSystemEntity entity in _fileSystem.directory(directory).listSync()) { - if (entity.statSync().type != FileSystemEntityType.file) { - continue; - } - final String packagePath = entity.absolute.path; - if (_isValidPackage(packagePath)) { - packagePaths.add(packagePath); - } - } - return packagePaths; - } - - // Walks the build directory for any dependent packages for the specified architecture. - String? _getAppPackagePath(String buildDirectory) { - final List packagePaths = _getPackagePaths(buildDirectory); - return packagePaths.isNotEmpty ? packagePaths.first : null; - } - - // Walks the build directory for any dependent packages for the specified architecture. - List _getDependencyPaths(String buildDirectory, String architecture) { - final String depsDirectory = _fileSystem.path.join(buildDirectory, 'Dependencies', architecture); - return _getPackagePaths(depsDirectory); - } - - String _getPackageName(String binaryName, String version, String config, {String? architecture}) { - final List components = [ - binaryName, - version, - if (architecture != null) architecture, - config, - ]; - return components.join('_'); - } - - @override - Future installApp(covariant BuildableUwpApp app, {String? userIdentifier}) async { - /// The cmake build generates an install powershell script. - /// build\winuwp\runner_uwp\AppPackages\\__\Add-AppDevPackage.ps1 - final String? binaryName = app.name; - final String? packageVersion = app.projectVersion; - if (binaryName == null || packageVersion == null) { - return false; - } - final String binaryDir = _fileSystem.path.absolute( - _fileSystem.path.join('build', 'winuwp', 'runner_uwp', 'AppPackages', binaryName)); - final String config = sentenceCase(getNameForBuildMode(_buildMode ?? BuildMode.debug)); - - // If a multi-architecture package exists, install that; otherwise install - // the single-architecture package. - final List packageNames = [ - // Multi-archtitecture package. - _getPackageName(binaryName, packageVersion, config), - // Single-archtitecture package. - _getPackageName(binaryName, packageVersion, config, architecture: 'x64'), - ]; - String? packageName; - String? buildDirectory; - String? packagePath; - for (final String name in packageNames) { - packageName = name; - buildDirectory = _fileSystem.path.join(binaryDir, '${packageName}_Test'); - if (_fileSystem.isDirectorySync(buildDirectory)) { - packagePath = _getAppPackagePath(buildDirectory); - if (packagePath != null && _fileSystem.isFileSync(packagePath)) { - break; - } - } - } - if (packagePath == null) { - _logger.printError('Failed to locate app package to install'); - return false; - } - - // Verify package signature. - if (!await _uwptool.isSignatureValid(packagePath)) { - // If signature is invalid, install the developer certificate. - final String certificatePath = _fileSystem.path.join(buildDirectory!, '$packageName.cer'); - if (_logger.terminal.stdinHasTerminal) { - final String response = await _logger.terminal.promptForCharInput( - ['Y', 'y', 'N', 'n'], - logger: _logger, - prompt: 'Install developer certificate.\n' - '\n' - 'Windows UWP apps are signed with a developer certificate during the build\n' - 'process. On the first install of an app with a signature from a new\n' - 'certificate, the certificate must be installed.\n' - '\n' - 'If desired, this certificate can later be removed by launching the \n' - '"Manage Computer Certificates" control panel from the Start menu and deleting\n' - 'the "CMake Test Cert" certificate from the "Trusted People" > "Certificates"\n' - 'section.\n' - '\n' - 'Press "Y" to continue, or "N" to cancel.', - displayAcceptedCharacters: false, - ); - if (response == 'N' || response == 'n') { - return false; - } - } - await _uwptool.installCertificate(certificatePath); - } - - // Install the application and dependencies. - final String packageUri = Uri.file(packagePath).toString(); - final List dependencyUris = _getDependencyPaths(buildDirectory!, 'x64') - .map((String path) => Uri.file(path).toString()) - .toList(); - return _uwptool.installApp(packageUri, dependencyUris); - } - - @override - Future isAppInstalled(covariant ApplicationPackage app, {String? userIdentifier}) async { - final String packageName = app.id; - return await _uwptool.getPackageFamilyName(packageName) != null; - } - - @override - Future isLatestBuildInstalled(covariant ApplicationPackage app) async => false; - - @override - Future get isLocalEmulator async => false; - - @override - DevicePortForwarder get portForwarder => const NoOpDevicePortForwarder(); - - @override - Future get sdkNameAndVersion async => ''; - - @override - Future startApp(covariant BuildableUwpApp package, { - String? mainPath, - String? route, - required DebuggingOptions debuggingOptions, - Map platformArgs = const {}, - bool prebuiltApplication = false, - bool ipv6 = false, - String? userIdentifier, - }) async { - _buildMode = debuggingOptions.buildInfo.mode; - if (!prebuiltApplication) { - await buildWindowsUwp( - package.project, - debuggingOptions.buildInfo, - target: mainPath, - ); - } - if (await isAppInstalled(package) && !await uninstallApp(package)) { - _logger.printError('Failed to uninstall previous app package'); - return LaunchResult.failed(); - } - if (!await installApp(package)) { - _logger.printError('Failed to install app package'); - return LaunchResult.failed(); - } - - final String packageName = package.id; - if (packageName == null) { - _logger.printError('Could not find PACKAGE_GUID in ${package.project.runnerCmakeFile.path}'); - return LaunchResult.failed(); - } - - final String? packageFamily = await _uwptool.getPackageFamilyName(packageName); - if (packageFamily == null) { - _logger.printError('Could not find package family name from $packageName'); - return LaunchResult.failed(); - } - - if (debuggingOptions.buildInfo.mode.isRelease) { - _processId = await _uwptool.launchApp(packageFamily, []); - return _processId != null ? LaunchResult.succeeded() : LaunchResult.failed(); - } - - /// If the terminal is attached, prompt the user to open the firewall port. - if (_logger.terminal.stdinHasTerminal) { - final String response = await _logger.terminal.promptForCharInput( - ['Y', 'y', 'N', 'n'], - logger: _logger, - prompt: 'Enable Flutter debugging from localhost.\n' - '\n' - 'Windows UWP apps run in a sandboxed environment. To enable Flutter debugging\n' - 'and hot reload, you will need to enable inbound connections to the app from the\n' - 'Flutter tool running on your machine. To do so:\n' - ' 1. Launch PowerShell as an Administrator\n' - ' 2. Enter the following command:\n' - ' checknetisolation loopbackexempt -is -n=$packageFamily\n' - '\n' - 'Press "Y" once this is complete, or "N" to abort.', - displayAcceptedCharacters: false, - ); - if (response == 'N' || response == 'n') { - return LaunchResult.failed(); - } - } - - /// Currently we do not have a way to discover the VM Service URI. - final int port = debuggingOptions.deviceVmServicePort ?? await _operatingSystemUtils.findFreePort(); - final List args = [ - '--observatory-port=$port', - '--disable-service-auth-codes', - '--enable-dart-profiling', - if (debuggingOptions.startPaused) '--start-paused', - if (debuggingOptions.useTestFonts) '--use-test-fonts', - if (debuggingOptions.debuggingEnabled) ...[ - '--enable-checked-mode', - '--verify-entry-points', - ], - if (debuggingOptions.enableSoftwareRendering) '--enable-software-rendering', - if (debuggingOptions.skiaDeterministicRendering) '--skia-deterministic-rendering', - if (debuggingOptions.traceSkia) '--trace-skia', - if (debuggingOptions.traceAllowlist != null) '--trace-allowlist="${debuggingOptions.traceAllowlist}"', - if (debuggingOptions.traceSkiaAllowlist != null) '--trace-skia-allowlist="${debuggingOptions.traceSkiaAllowlist}"', - if (debuggingOptions.endlessTraceBuffer) '--endless-trace-buffer', - if (debuggingOptions.dumpSkpOnShaderCompilation) '--dump-skp-on-shader-compilation', - if (debuggingOptions.verboseSystemLogs) '--verbose-logging', - if (debuggingOptions.cacheSkSL) '--cache-sksl', - if (debuggingOptions.purgePersistentCache) '--purge-persistent-cache', - if (platformArgs['trace-startup'] as bool? ?? false) '--trace-startup', - ]; - _processId = await _uwptool.launchApp(packageFamily, args); - if (_processId == null) { - return LaunchResult.failed(); - } - return LaunchResult.succeeded(observatoryUri: Uri.parse('http://localhost:$port')); - } - - @override - Future stopApp(covariant BuildableUwpApp app, {String? userIdentifier}) async { - if (_processId != null) { - return _processManager.killPid(_processId!); - } - return false; - } - - @override - Future uninstallApp(covariant BuildableUwpApp app, {String? userIdentifier}) async { - final String packageName = app.id; - if (packageName == null) { - _logger.printError('Could not find PACKAGE_GUID in ${app.project.runnerCmakeFile.path}'); - return false; - } - final String? packageFamily = await _uwptool.getPackageFamilyName(packageName); - if (packageFamily == null) { - // App is not installed. - return true; - } - return _uwptool.uninstallApp(packageFamily); - } - - @override - FutureOr supportsRuntimeMode(BuildMode buildMode) => buildMode != BuildMode.jitRelease; -} - class WindowsDevices extends PollingDeviceDiscovery { WindowsDevices({ required ProcessManager processManager, @@ -405,15 +74,11 @@ class WindowsDevices extends PollingDeviceDiscovery { required FileSystem fileSystem, required OperatingSystemUtils operatingSystemUtils, required WindowsWorkflow windowsWorkflow, - required FeatureFlags featureFlags, - required UwpTool uwptool, }) : _fileSystem = fileSystem, _logger = logger, _processManager = processManager, _operatingSystemUtils = operatingSystemUtils, _windowsWorkflow = windowsWorkflow, - _featureFlags = featureFlags, - _uwptool = uwptool, super('windows devices'); final FileSystem _fileSystem; @@ -421,8 +86,6 @@ class WindowsDevices extends PollingDeviceDiscovery { final ProcessManager _processManager; final OperatingSystemUtils _operatingSystemUtils; final WindowsWorkflow _windowsWorkflow; - final FeatureFlags _featureFlags; - final UwpTool _uwptool; @override bool get supportsPlatform => _windowsWorkflow.appliesToHostPlatform; @@ -442,14 +105,6 @@ class WindowsDevices extends PollingDeviceDiscovery { processManager: _processManager, operatingSystemUtils: _operatingSystemUtils, ), - if (_featureFlags.isWindowsUwpEnabled) - WindowsUWPDevice( - fileSystem: _fileSystem, - logger: _logger, - processManager: _processManager, - operatingSystemUtils: _operatingSystemUtils, - uwptool: _uwptool, - ) ]; } @@ -457,5 +112,5 @@ class WindowsDevices extends PollingDeviceDiscovery { Future> getDiagnostics() async => const []; @override - List get wellKnownIds => const ['windows', 'winuwp']; + List get wellKnownIds => const ['windows']; } diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/.gitignore b/packages/flutter_tools/templates/app/winuwp.tmpl/.gitignore deleted file mode 100644 index d492d0d98c8fd..0000000000000 --- a/packages/flutter_tools/templates/app/winuwp.tmpl/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -flutter/ephemeral/ - -# Visual Studio user-specific files. -*.suo -*.user -*.userosscache -*.sln.docstates - -# Visual Studio build-related files. -x64/ -x86/ - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/CMakeLists.txt.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/CMakeLists.txt.tmpl deleted file mode 100644 index 9827cf9923178..0000000000000 --- a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/CMakeLists.txt.tmpl +++ /dev/null @@ -1,64 +0,0 @@ -# Project-level configuration. -cmake_minimum_required(VERSION 3.8) -set(CMAKE_SYSTEM_NAME WindowsStore) -set(CMAKE_SYSTEM_VERSION 10.0) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED YES) -project({{projectName}} LANGUAGES CXX) - -# Explicitly opt in to modern CMake behaviors to avoid warnings with recent -# versions of CMake. -cmake_policy(SET CMP0079 NEW) - -# The name of the executable created for the application. Change this to change -# the on-disk name of your application. -set(BINARY_NAME "{{projectName}}") - -# Define build configuration options. -get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(IS_MULTICONFIG) - set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" - CACHE STRING "" FORCE) -else() - if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Debug" CACHE - STRING "Flutter build mode" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Profile" "Release") - endif() -endif() -# Define settings for the Profile build mode. -set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") -set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") -set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") -set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") - -# Use Unicode for all projects. -add_definitions(-DUNICODE -D_UNICODE) - -# Compilation settings that should be applied to most targets. -# -# Be cautious about adding new options here, as plugins use this function by -# default. In most cases, you should add new options to specific targets instead -# of modifying this function. -function(APPLY_STANDARD_SETTINGS TARGET) - target_compile_features(${TARGET} PUBLIC cxx_std_17) - target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100" /await) - target_compile_options(${TARGET} PRIVATE /EHsc) - target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") - target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") - target_compile_definitions(${TARGET} PRIVATE WINUWP) - set_target_properties(${TARGET} PROPERTIES VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION 10.0.18362.0) -endfunction() - -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") - -# Flutter library and tool build rules. -add_subdirectory(${FLUTTER_MANAGED_DIR}) - -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner_uwp") - -# Generated plugin build rules, which manage building the plugins and adding -# them to the application. -include(flutter/generated_plugins.cmake) diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/flutter/CMakeLists.txt b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/flutter/CMakeLists.txt deleted file mode 100644 index 9adbd9ddb310f..0000000000000 --- a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/flutter/CMakeLists.txt +++ /dev/null @@ -1,92 +0,0 @@ -# This file controls Flutter-level build steps. It should not be edited. -cmake_minimum_required(VERSION 3.8) -set(CMAKE_SYSTEM_NAME WindowsStore) -set(CMAKE_SYSTEM_VERSION 10.0) -set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") - -include(CMakePrintHelpers) - -# Configuration provided via flutter tool. -include(${EPHEMERAL_DIR}/generated_config.cmake) - -# TODO: Move the rest of this into files in ephemeral. See -# https://github.com/flutter/flutter/issues/57146. -set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") - -# === Flutter Library === -set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows_winuwp.dll") - -# === Assets === -set(CMAKE_INSTALL_MANIFEST "${EPHEMERAL_DIR}/install_manifest") -file(STRINGS ${CMAKE_INSTALL_MANIFEST} INSTALL_MANIFEST_CONTENT) - -# Published to parent scope for install step. -set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) -set(INSTALL_MANIFEST_CONTENT ${INSTALL_MANIFEST_CONTENT} PARENT_SCOPE) - -list(APPEND FLUTTER_LIBRARY_HEADERS - "flutter_export.h" - "flutter_windows.h" - "flutter_messenger.h" - "flutter_plugin_registrar.h" - "flutter_texture_registrar.h" -) -list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") -add_library(flutter INTERFACE) -target_include_directories(flutter INTERFACE - "${EPHEMERAL_DIR}" -) -target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") -add_dependencies(flutter flutter_assemble) - -# === Wrapper === -list(APPEND CPP_WRAPPER_SOURCES_CORE - "core_implementations.cc" - "standard_codec.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") -list(APPEND CPP_WRAPPER_SOURCES_PLUGIN - "plugin_registrar.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") -list(APPEND CPP_WRAPPER_SOURCES_APP - "flutter_engine.cc" - "flutter_view_controller.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") - -# Wrapper sources needed for a plugin. -add_library(flutter_wrapper_plugin STATIC - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_PLUGIN} -) -apply_standard_settings(flutter_wrapper_plugin) -set_target_properties(flutter_wrapper_plugin PROPERTIES - POSITION_INDEPENDENT_CODE ON) -set_target_properties(flutter_wrapper_plugin PROPERTIES - CXX_VISIBILITY_PRESET hidden) -target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) -target_include_directories(flutter_wrapper_plugin PUBLIC - "${WRAPPER_ROOT}/include" -) -add_dependencies(flutter_wrapper_plugin flutter_assemble) - -# Wrapper sources needed for the runner. -add_library(flutter_wrapper_app STATIC - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_APP} -) -apply_standard_settings(flutter_wrapper_app) -target_link_libraries(flutter_wrapper_app PUBLIC flutter) -target_include_directories(flutter_wrapper_app PUBLIC - "${WRAPPER_ROOT}/include" -) -add_dependencies(flutter_wrapper_app flutter_assemble) - -add_custom_target(flutter_assemble DEPENDS - "${FLUTTER_LIBRARY}" - ${FLUTTER_LIBRARY_HEADERS} - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_PLUGIN} - ${CPP_WRAPPER_SOURCES_APP} -) diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/project_version b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/project_version deleted file mode 100644 index c227083464fb9..0000000000000 --- a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/project_version +++ /dev/null @@ -1 +0,0 @@ -0 \ No newline at end of file diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-100.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-125.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-150.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-200.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-400.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LockScreenLogo.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LockScreenLogo.scale-200.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-100.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-125.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-150.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-200.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-400.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-100.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-125.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-150.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-200.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-400.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-100.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-125.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-150.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-200.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-400.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-16.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-16.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-256.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-256.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-32.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-32.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-48.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-48.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-100.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-125.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-150.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-200.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-400.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-16.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-16.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-256.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-256.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-32.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-32.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-48.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-48.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-100.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-125.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-150.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-200.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-400.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Wide310x150Logo.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Wide310x150Logo.scale-200.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-100.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-125.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-150.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-200.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-400.png.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/CMakeLists.txt.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/CMakeLists.txt.tmpl deleted file mode 100644 index 8dccdc465b189..0000000000000 --- a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/CMakeLists.txt.tmpl +++ /dev/null @@ -1,141 +0,0 @@ -cmake_minimum_required (VERSION 3.8) -set(CMAKE_SYSTEM_NAME WindowsStore) -set(CMAKE_SYSTEM_VERSION 10.0) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED YES) - -include(CMakePrintHelpers) - -project (runner LANGUAGES CXX) - -# UWP tile and icon assets. -set(ASSET_FILES ${ASSET_FILES} - Assets/LargeTile.scale-100.png - Assets/LargeTile.scale-125.png - Assets/LargeTile.scale-150.png - Assets/LargeTile.scale-200.png - Assets/LargeTile.scale-400.png - Assets/LockScreenLogo.scale-200.png - Assets/SmallTile.scale-100.png - Assets/SmallTile.scale-125.png - Assets/SmallTile.scale-150.png - Assets/SmallTile.scale-200.png - Assets/SmallTile.scale-400.png - Assets/SplashScreen.scale-100.png - Assets/SplashScreen.scale-125.png - Assets/SplashScreen.scale-150.png - Assets/SplashScreen.scale-200.png - Assets/SplashScreen.scale-400.png - Assets/Square44x44Logo.altform-unplated_targetsize-16.png - Assets/Square44x44Logo.altform-unplated_targetsize-32.png - Assets/Square44x44Logo.altform-unplated_targetsize-48.png - Assets/Square44x44Logo.altform-unplated_targetsize-256.png - Assets/Square44x44Logo.scale-100.png - Assets/Square44x44Logo.scale-125.png - Assets/Square44x44Logo.scale-150.png - Assets/Square44x44Logo.scale-200.png - Assets/Square44x44Logo.scale-400.png - Assets/Square44x44Logo.targetsize-16.png - Assets/Square44x44Logo.targetsize-24.png - Assets/Square44x44Logo.targetsize-24_altform-unplated.png - Assets/Square44x44Logo.targetsize-32.png - Assets/Square44x44Logo.targetsize-48.png - Assets/Square44x44Logo.targetsize-256.png - Assets/Square150x150Logo.scale-100.png - Assets/Square150x150Logo.scale-125.png - Assets/Square150x150Logo.scale-150.png - Assets/Square150x150Logo.scale-200.png - Assets/Square150x150Logo.scale-400.png - Assets/StoreLogo.png - Assets/StoreLogo.scale-100.png - Assets/StoreLogo.scale-125.png - Assets/StoreLogo.scale-150.png - Assets/StoreLogo.scale-200.png - Assets/StoreLogo.scale-400.png - Assets/Wide310x150Logo.scale-200.png - Assets/WideTile.scale-100.png - Assets/WideTile.scale-125.png - Assets/WideTile.scale-150.png - Assets/WideTile.scale-200.png - Assets/WideTile.scale-400.png -) - -# Configure package manifest file. -set(APP_MANIFEST_NAME Package.appxmanifest) -set(APP_MANIFEST_TARGET_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${APP_MANIFEST_NAME}) -set(SHORT_NAME ${BINARY_NAME}) -set(PACKAGE_GUID "{{windowsIdentifier}}") - -configure_file( - appxmanifest.in - ${APP_MANIFEST_TARGET_LOCATION} - @ONLY) - -set(CONTENT_FILES ${APP_MANIFEST_TARGET_LOCATION}) - -# Configure package content files. -set_property(SOURCE ${CONTENT_FILES} PROPERTY VS_DEPLOYMENT_CONTENT 1) - -set(RESOURCE_FILES ${ASSET_FILES} ${CONTENT_FILES} Windows_TemporaryKey.pfx) -set_property(SOURCE ${ASSET_FILES} PROPERTY VS_DEPLOYMENT_CONTENT 1) -set_property(SOURCE ${ASSET_FILES} PROPERTY VS_DEPLOYMENT_LOCATION "Assets") - -set(STRING_FILES Resources.pri) -set_property(SOURCE ${STRING_FILES} PROPERTY VS_TOOL_OVERRIDE "PRIResource") - -source_group("Resource Files" FILES ${RESOURCE_FILES} ${CONTENT_FILES} ${STRING_FILES}) - -# Configure Flutter assets using tool generated install manifest -foreach(ITEM ${INSTALL_MANIFEST_CONTENT}) - get_filename_component(ITEM_REL ${CMAKE_BINARY_DIR} DIRECTORY) - file(RELATIVE_PATH RELPATH ${ITEM_REL} ${ITEM}) - - get_filename_component(RELPATH ${RELPATH} DIRECTORY) - get_filename_component(ITEMEXT ${ITEM} LAST_EXT) - - if("${ITEMEXT}" STREQUAL ".dll" OR "${ITEMEXT}" STREQUAL ".pdb") - string(CONCAT RELPATH "") - elseif ("${ITEMEXT}" STREQUAL ".so") - file(RELATIVE_PATH RELPATH "${ITEM_REL}/winuwp" ${ITEM}) - string(REGEX REPLACE "/" "\\\\" RELPATH ${RELPATH}) - string(CONCAT RELPATH "Assets\\Data") - elseif("${ITEMEXT}" STREQUAL ".dat") - string(CONCAT RELPATH "Assets\\Data") - else() - string(REGEX REPLACE "/" "\\\\" RELPATH ${RELPATH}) - string(CONCAT RELPATH "Assets\\Data\\" ${RELPATH}) - endif() - - cmake_print_variables(${RELPATH}) - - set_property(SOURCE ${ITEM} PROPERTY VS_DEPLOYMENT_CONTENT 1) - set_property(SOURCE ${ITEM} PROPERTY VS_DEPLOYMENT_LOCATION ${RELPATH}) -endforeach() - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable (${BINARY_NAME} WIN32 - main.cpp - flutter_frameworkview.cpp - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" - ${RESOURCE_FILES} - ${INSTALL_MANIFEST_CONTENT} -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Disable Windows macros that collide with C++ standard library functions. -target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") - -# Add dependency libraries and include directories. Add any application-specific -# dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE WindowsApp flutter flutter_wrapper_app) -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") - -# Run the Flutter tool portions of the build. This must not be removed. -add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/CMakeSettings.json b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/CMakeSettings.json deleted file mode 100644 index ba63a530d744e..0000000000000 --- a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/CMakeSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - // See https://go.microsoft.com//fwlink//?linkid=834763 for more information about this file. - "configurations": [ - { - "name": "Debug", - "generator": "Visual Studio 15 2017 Win64", - "configurationType": "Debug", - "inheritEnvironments": [ "msvc_x64_x64" ], - "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", - "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - }, - { - "name": "Release", - "generator": "Visual Studio 15 2017 Win64", - "configurationType": "Release", - "inheritEnvironments": [ "msvc_x64_x64" ], - "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", - "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - } - ] -} diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Windows_TemporaryKey.pfx.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/Windows_TemporaryKey.pfx.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/appxmanifest.in b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/appxmanifest.in deleted file mode 100644 index 570d424ee8228..0000000000000 --- a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/appxmanifest.in +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - @SHORT_NAME@ - CMake Test Cert - Assets/StoreLogo.png - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/flutter_frameworkview.cpp b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/flutter_frameworkview.cpp deleted file mode 100644 index bcdc73adbf667..0000000000000 --- a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/flutter_frameworkview.cpp +++ /dev/null @@ -1,155 +0,0 @@ -#include "winrt/Windows.ApplicationModel.Core.h" -#include "winrt/Windows.Foundation.h" -#include "winrt/Windows.System.Profile.h" -#include "winrt/Windows.System.Threading.h" -#include "winrt/Windows.UI.Core.h" -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - -struct FlutterFrameworkView - : winrt::implements< - FlutterFrameworkView, - winrt::Windows::ApplicationModel::Core::IFrameworkView> { - // |winrt::Windows::ApplicationModel::Core::IFrameworkView| - void - Initialize(winrt::Windows::ApplicationModel::Core::CoreApplicationView const - &applicationView) { - - // Layout scaling must be disabled in the appinitialization phase in order - // to take effect correctly. - if (winrt::Windows::System::Profile::AnalyticsInfo::VersionInfo() - .DeviceFamily() == L"Windows.Xbox") { - - bool result = winrt::Windows::UI::ViewManagement::ApplicationViewScaling:: - TrySetDisableLayoutScaling(true); - if (!result) { - OutputDebugString(L"Couldn't disable layout scaling"); - } - } - - main_view_ = applicationView; - main_view_.Activated({this, &FlutterFrameworkView::OnActivated}); - } - - // |winrt::Windows::ApplicationModel::Core::IFrameworkView| - void Uninitialize() { - main_view_.Activated(nullptr); - main_view_ = nullptr; - } - - // |winrt::Windows::ApplicationModel::Core::IFrameworkView| - void Load(winrt::hstring const &) {} - - // |winrt::Windows::ApplicationModel::Core::IFrameworkView| - void Run() { - winrt::Windows::UI::Core::CoreWindow window = - winrt::Windows::UI::Core::CoreWindow::GetForCurrentThread(); - - winrt::Windows::UI::Core::CoreDispatcher dispatcher = window.Dispatcher(); - dispatcher.ProcessEvents( - winrt::Windows::UI::Core::CoreProcessEventsOption::ProcessUntilQuit); - } - - // |winrt::Windows::ApplicationModel::Core::IFrameworkView| - winrt::Windows::Foundation::IAsyncAction - SetWindow(winrt::Windows::UI::Core::CoreWindow const &window) { - - // Capture reference to window. - window_ = window; - - // Lay out the window's content within the region occupied by the - // CoreWindow. - auto appView = winrt::Windows::UI::ViewManagement::ApplicationView:: - GetForCurrentView(); - - appView.SetDesiredBoundsMode(winrt::Windows::UI::ViewManagement:: - ApplicationViewBoundsMode::UseCoreWindow); - - // Configure folder paths. - try { - winrt::Windows::Storage::StorageFolder folder = - winrt::Windows::ApplicationModel::Package::Current() - .InstalledLocation(); - - winrt::Windows::Storage::StorageFolder assets = - co_await folder.GetFolderAsync(L"Assets"); - winrt::Windows::Storage::StorageFolder data = - co_await assets.GetFolderAsync(L"data"); - winrt::Windows::Storage::StorageFolder flutter_assets = - co_await data.GetFolderAsync(L"flutter_assets"); - winrt::Windows::Storage::StorageFile icu_data = - co_await data.GetFileAsync(L"icudtl.dat"); - -#if NDEBUG - winrt::Windows::Storage::StorageFile aot_data = - co_await data.GetFileAsync(L"app.so"); -#endif - - std::wstring flutter_assets_path{flutter_assets.Path()}; - std::wstring icu_data_path{icu_data.Path()}; - std::wstring aot_data_path { -#if NDEBUG - aot_data.Path() -#endif - }; - - flutter::DartProject project(flutter_assets_path, icu_data_path, - aot_data_path); - - // Construct viewcontroller using the Window and project - flutter_view_controller_ = std::make_unique( - static_cast(winrt::get_abi(main_view_)), - static_cast(winrt::get_abi(launch_args_)), - project); - - // If plugins present, register them. - RegisterPlugins(flutter_view_controller_.get()->engine()); - } catch (winrt::hresult_error &err) { - winrt::Windows::UI::Popups::MessageDialog md = - winrt::Windows::UI::Popups::MessageDialog::MessageDialog( - L"There was a problem starting the engine: " + err.message()); - md.ShowAsync(); - } - } - - void OnActivated( - winrt::Windows::ApplicationModel::Core::CoreApplicationView const - &applicationView, - winrt::Windows::ApplicationModel::Activation::IActivatedEventArgs const - &args) { - // Activate the application window, making it visible and enabling it to - // receive events. - applicationView.CoreWindow().Activate(); - - // Capture launch args to later pass to Flutter. - launch_args_ = args; - } - - // Current CoreApplicationView. - winrt::Windows::ApplicationModel::Core::CoreApplicationView main_view_{ - nullptr}; - - // Current CoreWindow. - winrt::Windows::UI::Core::CoreWindow window_{nullptr}; - - // Current FlutterViewController. - std::unique_ptr flutter_view_controller_{ - nullptr}; - - // Launch args that were passed in on activation. - winrt::Windows::ApplicationModel::Activation::IActivatedEventArgs - launch_args_; -}; diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/main.cpp b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/main.cpp deleted file mode 100644 index 1ce54b1fc1203..0000000000000 --- a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/main.cpp +++ /dev/null @@ -1,30 +0,0 @@ - -#include - -#include "winrt/Windows.ApplicationModel.Core.h" -#include "winrt/Windows.Foundation.h" -#include -#include -#include - -#include - -#include "flutter_frameworkview.cpp" - -struct App - : winrt::implements< - App, winrt::Windows::ApplicationModel::Core::IFrameworkViewSource> { - App() { view_ = winrt::make_self(); } - - // |winrt::Windows::ApplicationModel::Core::IFrameworkViewSource| - winrt::Windows::ApplicationModel::Core::IFrameworkView CreateView() { - return view_.as(); - } - - winrt::com_ptr view_; -}; - -int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int) { - winrt::Windows::ApplicationModel::Core::CoreApplication::Run( - winrt::make()); -} diff --git a/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/resources.pri.img.tmpl b/packages/flutter_tools/templates/app_shared/winuwp.tmpl/runner_uwp/resources.pri.img.tmpl deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/flutter_tools/templates/template_manifest.json b/packages/flutter_tools/templates/template_manifest.json index 44ded214f1e38..fe0c148b1169a 100644 --- a/packages/flutter_tools/templates/template_manifest.json +++ b/packages/flutter_tools/templates/template_manifest.json @@ -5,7 +5,6 @@ "templates/app/lib/main.dart.tmpl", "templates/app/pubspec.yaml.tmpl", "templates/app/README.md.tmpl", - "templates/app/winuwp.tmpl/.gitignore", "templates/app_shared/.gitignore.tmpl", "templates/app_shared/.idea/libraries/Dart_SDK.xml.tmpl", @@ -139,64 +138,6 @@ "templates/app_shared/windows.tmpl/runner/utils.h", "templates/app_shared/windows.tmpl/runner/win32_window.cpp", "templates/app_shared/windows.tmpl/runner/win32_window.h", - "templates/app_shared/winuwp.tmpl/CMakeLists.txt.tmpl", - "templates/app_shared/winuwp.tmpl/flutter/CMakeLists.txt", - "templates/app_shared/winuwp.tmpl/project_version", - "templates/app_shared/winuwp.tmpl/runner_uwp/appxmanifest.in", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-100.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-125.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-150.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-200.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-400.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/LockScreenLogo.scale-200.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-100.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-125.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-150.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-200.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-400.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-100.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-125.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-150.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-200.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-400.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-100.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-125.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-150.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-200.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-400.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-16.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-256.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-32.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-48.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-100.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-125.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-150.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-200.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-400.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-16.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-256.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-32.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-48.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-100.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-125.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-150.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-200.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-400.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/Wide310x150Logo.scale-200.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-100.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-125.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-150.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-200.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-400.png.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/CMakeLists.txt.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/CMakeSettings.json", - "templates/app_shared/winuwp.tmpl/runner_uwp/flutter_frameworkview.cpp", - "templates/app_shared/winuwp.tmpl/runner_uwp/main.cpp", - "templates/app_shared/winuwp.tmpl/runner_uwp/resources.pri.img.tmpl", - "templates/app_shared/winuwp.tmpl/runner_uwp/Windows_TemporaryKey.pfx.img.tmpl", "templates/app_test_widget/test/widget_test.dart.tmpl", diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart index eec556b9c359f..db1f92c49ba82 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart @@ -10,7 +10,6 @@ import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/commands/build_windows.dart'; -import 'package:flutter_tools/src/commands/build_winuwp.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/reporting/reporting.dart'; import 'package:flutter_tools/src/windows/visual_studio.dart'; @@ -23,7 +22,6 @@ import '../../src/test_flutter_command_runner.dart'; const String flutterRoot = r'C:\flutter'; const String buildFilePath = r'C:\windows\CMakeLists.txt'; -const String buildUwpFilePath = r'C:\winuwp\CMakeLists.txt'; const String visualStudioPath = r'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community'; const String _cmakePath = visualStudioPath + r'\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe'; const String _defaultGenerator = 'Visual Studio 16 2019'; @@ -72,31 +70,19 @@ void main() { setUpMockCoreProjectFiles(); } - void setUpMockUwpFilesForBuild(int version) { - final Directory projectDirectory = (fileSystem.file(buildUwpFilePath) - ..createSync(recursive: true)) - .parent; - projectDirectory.childFile('project_version').writeAsString(version.toString()); - setUpMockCoreProjectFiles(); - } - // Returns the command matching the build_windows call to generate CMake // files. FakeCommand cmakeGenerationCommand({ void Function() onRun, - bool winuwp = false, String generator = _defaultGenerator, }) { return FakeCommand( command: [ _cmakePath, '-S', - fileSystem.path.dirname(winuwp ? buildUwpFilePath : buildFilePath), + fileSystem.path.dirname(buildFilePath), '-B', - if (winuwp) - r'build\winuwp' - else - r'build\windows', + r'build\windows', '-G', generator, ], @@ -109,20 +95,15 @@ void main() { bool verbose = false, void Function() onRun, String stdout = '', - bool winuwp = false, }) { return FakeCommand( command: [ _cmakePath, '--build', - if (winuwp) - r'build\winuwp' - else - r'build\windows', + r'build\windows', '--config', buildMode, - if (!winuwp) - ...['--target', 'INSTALL'], + ...['--target', 'INSTALL'], if (verbose) '--verbose' ], @@ -615,125 +596,6 @@ if %errorlevel% neq 0 goto :VCEnd FileSystemUtils: () => FileSystemUtils(fileSystem: fileSystem, platform: windowsPlatform), Usage: () => usage, }); - - testUsingContext('Windows UWP build fails when there is no windows project', () async { - final FakeVisualStudio fakeVisualStudio = FakeVisualStudio(); - final BuildWindowsUwpCommand command = BuildWindowsUwpCommand() - ..visualStudioOverride = fakeVisualStudio; - setUpMockCoreProjectFiles(); - - expect(createTestCommandRunner(command).run( - const ['winuwp', '--no-pub'] - ), throwsToolExit(message: 'No Windows UWP desktop project configured. See ' - 'https://docs.flutter.dev/desktop#add-desktop-support-to-an-existing-flutter-app ' - 'to learn about adding Windows support to a project.')); - }, overrides: { - Platform: () => windowsPlatform, - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.any(), - FeatureFlags: () => TestFeatureFlags(isWindowsUwpEnabled: true), - }); - - testUsingContext('Windows build fails on non windows platform', () async { - final FakeVisualStudio fakeVisualStudio = FakeVisualStudio(); - final BuildWindowsUwpCommand command = BuildWindowsUwpCommand() - ..visualStudioOverride = fakeVisualStudio; - setUpMockUwpFilesForBuild(0); - - expect(createTestCommandRunner(command).run( - const ['winuwp', '--no-pub'] - ), throwsToolExit()); - }, overrides: { - Platform: () => notWindowsPlatform, - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.any(), - FeatureFlags: () => TestFeatureFlags(isWindowsUwpEnabled: true), - }); - - testUsingContext('Windows UWP build fails on non windows platform', () async { - final FakeVisualStudio fakeVisualStudio = FakeVisualStudio(); - final BuildWindowsUwpCommand command = BuildWindowsUwpCommand() - ..visualStudioOverride = fakeVisualStudio; - setUpMockProjectFilesForBuild(); - - expect(createTestCommandRunner(command).run( - const ['winuwp', '--no-pub'] - ), throwsToolExit(message: '"build winuwp" only supported on Windows hosts.')); - }, overrides: { - Platform: () => notWindowsPlatform, - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.any(), - FeatureFlags: () => TestFeatureFlags(isWindowsUwpEnabled: true), - }); - - testUsingContext('Windows UWP build fails when the project version is out of date', () async { - final FakeVisualStudio fakeVisualStudio = FakeVisualStudio(); - final BuildWindowsUwpCommand command = BuildWindowsUwpCommand() - ..visualStudioOverride = fakeVisualStudio; - setUpMockUwpFilesForBuild(-1); - - expect(createTestCommandRunner(command).run( - const ['winuwp', '--no-pub'] - ), throwsToolExit(message: 'The Windows UWP project template and build process has changed. ' - 'In order to build you must delete the winuwp directory and re-create the project')); - }, overrides: { - Platform: () => windowsPlatform, - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.any(), - FeatureFlags: () => TestFeatureFlags(isWindowsUwpEnabled: true), - }); - - testUsingContext('Windows UWP build fails when feature is disabled', () async { - final FakeVisualStudio fakeVisualStudio = FakeVisualStudio(); - final BuildWindowsUwpCommand command = BuildWindowsUwpCommand() - ..visualStudioOverride = fakeVisualStudio; - setUpMockProjectFilesForBuild(); - - // This message should include 'To enable, run "flutter config --enable-windows-uwp-desktop"." - // once the `windowsUwpEmbedding` feature is available on all channels. - expect(createTestCommandRunner(command).run( - const ['winuwp', '--no-pub'] - ), throwsToolExit(message: RegExp(r'"build winuwp" is not currently supported\.$'))); - }, overrides: { - Platform: () => windowsPlatform, - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.any(), - FeatureFlags: () => TestFeatureFlags(), - }); - - testUsingContext('Windows UWP build completes successfully', () async { - final FakeVisualStudio fakeVisualStudio = FakeVisualStudio(); - final BuildWindowsUwpCommand command = BuildWindowsUwpCommand() - ..visualStudioOverride = fakeVisualStudio; - setUpMockUwpFilesForBuild(0); - - await createTestCommandRunner(command).run( - const ['winuwp', '--no-pub'] - ); - }, overrides: { - Platform: () => windowsPlatform, - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.list([ - const FakeCommand( - command: [ - r'C:\flutter\bin\flutter', - 'assemble', - '--no-version-check', - '--output=build', - '-dTargetPlatform=windows-uwp-x64', - '-dTrackWidgetCreation=true', - '-dBuildMode=release', - r'-dTargetFile=lib\main.dart', - '-dTreeShakeIcons="true"', - '-dDartObfuscation=false', - 'release_bundle_windows_assets_uwp' - ], - ), - cmakeGenerationCommand(winuwp: true), - buildCommand('Release', stdout: 'STDOUT STUFF', winuwp: true), - ]), - FeatureFlags: () => TestFeatureFlags(isWindowsUwpEnabled: true), - }); } class FakeVisualStudio extends Fake implements VisualStudio { diff --git a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart index 705bb44cd8b38..9fcd22515850d 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart @@ -811,7 +811,6 @@ void main() { expect(projectDir.childDirectory('macos'), isNot(exists)); expect(projectDir.childDirectory('windows'), isNot(exists)); expect(projectDir.childDirectory('web'), isNot(exists)); - expect(projectDir.childDirectory('winuwp'), isNot(exists)); }, overrides: { FeatureFlags: () => TestFeatureFlags(), }); @@ -830,42 +829,14 @@ void main() { expect(projectDir.childDirectory('macos'), isNot(exists)); expect(projectDir.childDirectory('windows'), isNot(exists)); expect(projectDir.childDirectory('web'), isNot(exists)); - expect(projectDir.childDirectory('winuwp'), isNot(exists)); expect(projectDir.childDirectory('example').childDirectory('linux'), isNot(exists)); expect(projectDir.childDirectory('example').childDirectory('macos'), isNot(exists)); expect(projectDir.childDirectory('example').childDirectory('windows'), isNot(exists)); expect(projectDir.childDirectory('example').childDirectory('web'), isNot(exists)); - expect(projectDir.childDirectory('example').childDirectory('winuwp'), isNot(exists)); }, overrides: { FeatureFlags: () => TestFeatureFlags(), }); - testUsingContext('app supports Windows UWP if requested', () async { - Cache.flutterRoot = '../..'; - - final CreateCommand command = CreateCommand(); - final CommandRunner runner = createTestCommandRunner(command); - - await runner.run([ - 'create', - '--no-pub', - '--platform=winuwp', - projectDir.path, - ]); - - expect(projectDir.childDirectory('linux'), isNot(exists)); - expect(projectDir.childDirectory('android'), isNot(exists)); - expect(projectDir.childDirectory('ios'), isNot(exists)); - expect(projectDir.childDirectory('windows'), isNot(exists)); - expect(projectDir.childDirectory('macos'), isNot(exists)); - expect(projectDir.childDirectory('web'), isNot(exists)); - expect(projectDir.childDirectory('winuwp'), exists); - expect(logger.errorText, isNot(contains(_kNoPlatformsMessage))); - }, overrides: { - FeatureFlags: () => TestFeatureFlags(isWindowsUwpEnabled: true), - Logger: () => logger, - }); - testUsingContext('app supports Linux if requested', () async { Cache.flutterRoot = '../..'; @@ -885,7 +856,6 @@ void main() { expect(projectDir.childDirectory('windows'), isNot(exists)); expect(projectDir.childDirectory('macos'), isNot(exists)); expect(projectDir.childDirectory('web'), isNot(exists)); - expect(projectDir.childDirectory('winuwp'), isNot(exists)); expect(logger.errorText, isNot(contains(_kNoPlatformsMessage))); }, overrides: { FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: true), diff --git a/packages/flutter_tools/test/general.shard/artifacts_test.dart b/packages/flutter_tools/test/general.shard/artifacts_test.dart index d906511a159e4..b4d5cab12e4de 100644 --- a/packages/flutter_tools/test/general.shard/artifacts_test.dart +++ b/packages/flutter_tools/test/general.shard/artifacts_test.dart @@ -141,18 +141,6 @@ void main() { artifacts.getArtifactPath(Artifact.flutterTester, platform: TargetPlatform.linux_arm64), fileSystem.path.join('root', 'bin', 'cache', 'artifacts', 'engine', 'linux-arm64', 'flutter_tester'), ); - expect( - artifacts.getArtifactPath(Artifact.windowsUwpDesktopPath, platform: TargetPlatform.windows_uwp_x64, mode: BuildMode.debug), - fileSystem.path.join('root', 'bin', 'cache', 'artifacts', 'engine', 'windows-uwp-x64-debug'), - ); - expect( - artifacts.getArtifactPath(Artifact.windowsUwpDesktopPath, platform: TargetPlatform.windows_uwp_x64, mode: BuildMode.profile), - fileSystem.path.join('root', 'bin', 'cache', 'artifacts', 'engine', 'windows-uwp-x64-profile'), - ); - expect( - artifacts.getArtifactPath(Artifact.windowsUwpDesktopPath, platform: TargetPlatform.windows_uwp_x64, mode: BuildMode.release), - fileSystem.path.join('root', 'bin', 'cache', 'artifacts', 'engine', 'windows-uwp-x64-release'), - ); expect( artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk), fileSystem.path.join('root', 'bin', 'cache', 'dart-sdk', 'bin', 'snapshots', 'frontend_server.dart.snapshot') @@ -358,20 +346,6 @@ void main() { expect(artifacts.getHostArtifact(HostArtifact.engineDartBinary).path, contains('.exe')); }); - testWithoutContext('Looks up windows UWP artifacts in host engine', () async { - artifacts = LocalEngineArtifacts( - fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'winuwp_debug_unopt'), - fileSystem.path.join(fileSystem.currentDirectory.path, 'out', 'winuwp_debug_unopt'), - cache: cache, - fileSystem: fileSystem, - platform: FakePlatform(operatingSystem: 'windows'), - processManager: FakeProcessManager.any(), - operatingSystemUtils: FakeOperatingSystemUtils(), - ); - - expect(artifacts.getArtifactPath(Artifact.windowsUwpDesktopPath), '/out/winuwp_debug_unopt'); - }); - testWithoutContext('Looks up dart on linux platforms', () async { expect(artifacts.getHostArtifact(HostArtifact.engineDartBinary).path, isNot(contains('.exe'))); }); diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/dart_plugin_registrant_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/dart_plugin_registrant_test.dart index 6b97b1ed411b5..9ede15b792084 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/dart_plugin_registrant_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/dart_plugin_registrant_test.dart @@ -131,7 +131,6 @@ void main() { 'linux-x64': false, 'linux-arm64': false, 'windows-x64': false, - 'windows-uwp-x64': false, 'web-javascript': true, 'ios': false, 'android': false, diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart index 978901882a096..d88647f7dd2fc 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart @@ -125,107 +125,6 @@ void main() { ])); }); - testWithoutContext('UnpackWindowsUwp copies files to the correct winuwp/ cache directory', () async { - final Artifacts artifacts = Artifacts.test(); - final FileSystem fileSystem = MemoryFileSystem.test(style: FileSystemStyle.windows); - final Environment environment = Environment.test( - fileSystem.currentDirectory, - artifacts: artifacts, - processManager: FakeProcessManager.any(), - fileSystem: fileSystem, - logger: BufferLogger.test(), - defines: { - kBuildMode: 'debug', - }, - ); - final DepfileService depfileService = DepfileService( - logger: BufferLogger.test(), - fileSystem: fileSystem, - ); - environment.buildDir.createSync(recursive: true); - - final String windowsDesktopPath = artifacts.getArtifactPath(Artifact.windowsUwpDesktopPath, platform: TargetPlatform.windows_x64, mode: BuildMode.debug); - final String windowsCppClientWrapper = artifacts.getArtifactPath(Artifact.windowsUwpCppClientWrapper, platform: TargetPlatform.windows_x64, mode: BuildMode.debug); - final String icuData = artifacts.getArtifactPath(Artifact.icuData, platform: TargetPlatform.windows_x64); - final List requiredFiles = [ - '$windowsDesktopPath\\flutter_export.h', - '$windowsDesktopPath\\flutter_messenger.h', - '$windowsDesktopPath\\flutter_windows_winuwp.dll', - '$windowsDesktopPath\\flutter_windows_winuwp.dll.exp', - '$windowsDesktopPath\\flutter_windows_winuwp.dll.lib', - '$windowsDesktopPath\\flutter_windows_winuwp.dll.pdb', - '$windowsDesktopPath\\flutter_plugin_registrar.h', - '$windowsDesktopPath\\flutter_texture_registrar.h', - '$windowsDesktopPath\\flutter_windows.h', - icuData, - '$windowsCppClientWrapper\\foo', - r'C:\packages\flutter_tools\lib\src\build_system\targets\windows.dart', - ]; - - for (final String path in requiredFiles) { - fileSystem.file(path).createSync(recursive: true); - } - fileSystem.directory('windows').createSync(); - - await const UnpackWindowsUwp().build(environment); - - // Output files are copied correctly. - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_export.h'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_messenger.h'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_windows_winuwp.dll'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_windows_winuwp.dll.exp'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_windows_winuwp.dll.lib'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_windows_winuwp.dll.pdb'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_export.h'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_messenger.h'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_plugin_registrar.h'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_texture_registrar.h'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\ephemeral\flutter_windows.h'), exists); - expect(fileSystem.file(r'C:\winuwp\flutter\flutter_windows.h'), exists); - expect(fileSystem.file('C:\\winuwp\\flutter\\ephemeral\\$icuData'), exists); - expect(fileSystem.file('C:\\winuwp\\flutter\\ephemeral\\$windowsCppClientWrapper\\foo'), exists); - - final File outputDepfile = environment.buildDir - .childFile('windows_uwp_engine_sources.d'); - - // Depfile is created correctly. - expect(outputDepfile, exists); - - final List inputPaths = depfileService.parse(outputDepfile) - .inputs.map((File file) => file.path).toList(); - final List outputPaths = depfileService.parse(outputDepfile) - .outputs.map((File file) => file.path).toList(); - - // Depfile has expected sources. - expect(inputPaths, unorderedEquals([ - '$windowsDesktopPath\\flutter_export.h', - '$windowsDesktopPath\\flutter_messenger.h', - '$windowsDesktopPath\\flutter_windows_winuwp.dll', - '$windowsDesktopPath\\flutter_windows_winuwp.dll.exp', - '$windowsDesktopPath\\flutter_windows_winuwp.dll.lib', - '$windowsDesktopPath\\flutter_windows_winuwp.dll.pdb', - '$windowsDesktopPath\\flutter_plugin_registrar.h', - '$windowsDesktopPath\\flutter_texture_registrar.h', - '$windowsDesktopPath\\flutter_windows.h', - icuData, - '$windowsCppClientWrapper\\foo', - ])); - expect(outputPaths, unorderedEquals([ - r'C:\winuwp\flutter\ephemeral\flutter_export.h', - r'C:\winuwp\flutter\ephemeral\flutter_messenger.h', - r'C:\winuwp\flutter\ephemeral\flutter_windows_winuwp.dll', - r'C:\winuwp\flutter\ephemeral\flutter_windows_winuwp.dll.exp', - r'C:\winuwp\flutter\ephemeral\flutter_windows_winuwp.dll.lib', - r'C:\winuwp\flutter\ephemeral\flutter_windows_winuwp.dll.pdb', - r'C:\winuwp\flutter\ephemeral\flutter_plugin_registrar.h', - r'C:\winuwp\flutter\ephemeral\flutter_texture_registrar.h', - r'C:\winuwp\flutter\ephemeral\flutter_windows.h', - r'C:\winuwp\flutter\flutter_windows.h', - 'C:\\winuwp\\flutter\\ephemeral\\$icuData', - 'C:\\winuwp\\flutter\\ephemeral\\$windowsCppClientWrapper\\foo', - ])); - }); - // AssetBundleFactory still uses context injection FileSystem fileSystem; @@ -288,7 +187,7 @@ void main() { environment.buildDir.childFile('app.so').createSync(recursive: true); - await const WindowsAotBundle(AotElfProfile(TargetPlatform.windows_x64), uwp: false).build(environment); + await const WindowsAotBundle(AotElfProfile(TargetPlatform.windows_x64)).build(environment); await const ProfileBundleWindowsAssets().build(environment); // Depfile is created and so is copied. @@ -301,60 +200,6 @@ void main() { ProcessManager: () => FakeProcessManager.any(), }); - testUsingContext('ReleaseBundleWindowsAssets creates correct bundle structure with UWP', () async { - final Environment environment = Environment.test( - fileSystem.currentDirectory, - artifacts: Artifacts.test(), - processManager: FakeProcessManager.any(), - fileSystem: fileSystem, - logger: BufferLogger.test(), - defines: { - kBuildMode: 'release', - } - ); - - environment.buildDir.childFile('app.so').createSync(recursive: true); - - await const WindowsAotBundle(AotElfRelease(TargetPlatform.windows_x64), uwp: true).build(environment); - await const ReleaseBundleWindowsAssets().build(environment); - - // Depfile is created and so is copied. - expect(environment.buildDir.childFile('flutter_assets.d'), exists); - expect(fileSystem.file(r'C:\winuwp\app.so'), exists); - expect(fileSystem.file(r'C:\flutter_assets\kernel_blob.bin').existsSync(), false); - expect(fileSystem.file(r'C:\flutter_assets\AssetManifest.json'), exists); - }, overrides: { - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.any(), - }); - - testUsingContext('ProfileBundleWindowsAssets creates correct bundle structure with UWP', () async { - final Environment environment = Environment.test( - fileSystem.currentDirectory, - artifacts: Artifacts.test(), - processManager: FakeProcessManager.any(), - fileSystem: fileSystem, - logger: BufferLogger.test(), - defines: { - kBuildMode: 'profile', - } - ); - - environment.buildDir.childFile('app.so').createSync(recursive: true); - - await const WindowsAotBundle(AotElfProfile(TargetPlatform.windows_x64), uwp: true).build(environment); - await const ProfileBundleWindowsAssets().build(environment); - - // Depfile is created and so is copied. - expect(environment.buildDir.childFile('flutter_assets.d'), exists); - expect(fileSystem.file(r'C:\winuwp\app.so'), exists); - expect(fileSystem.file(r'C:\flutter_assets\kernel_blob.bin').existsSync(), false); - expect(fileSystem.file(r'C:\flutter_assets\AssetManifest.json'), exists); - }, overrides: { - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.any(), - }); - testUsingContext('ReleaseBundleWindowsAssets creates correct bundle structure', () async { final Environment environment = Environment.test( fileSystem.currentDirectory, @@ -369,7 +214,7 @@ void main() { environment.buildDir.childFile('app.so').createSync(recursive: true); - await const WindowsAotBundle(AotElfRelease(TargetPlatform.windows_x64), uwp: false).build(environment); + await const WindowsAotBundle(AotElfRelease(TargetPlatform.windows_x64)).build(environment); await const ReleaseBundleWindowsAssets().build(environment); // Depfile is created and so is copied. diff --git a/packages/flutter_tools/test/general.shard/cache_test.dart b/packages/flutter_tools/test/general.shard/cache_test.dart index 283c498563c64..a21cafc1e33d3 100644 --- a/packages/flutter_tools/test/general.shard/cache_test.dart +++ b/packages/flutter_tools/test/general.shard/cache_test.dart @@ -604,20 +604,6 @@ void main() { ])); }); - testWithoutContext('Windows UWP desktop artifacts include profile, debug, and release artifacts', () { - final Cache cache = Cache.test(processManager: FakeProcessManager.any()); - final WindowsUwpEngineArtifacts artifacts = WindowsUwpEngineArtifacts( - cache, - platform: FakePlatform(operatingSystem: 'windows'), - ); - - expect(artifacts.getBinaryDirs(), containsAll([ - contains(contains('profile')), - contains(contains('release')), - contains(contains('debug')), - ])); - }); - testWithoutContext('Linux desktop artifacts ignore filtering when requested', () { fakeProcessManager.addCommand(unameCommandForX64); diff --git a/packages/flutter_tools/test/general.shard/dart_plugin_test.dart b/packages/flutter_tools/test/general.shard/dart_plugin_test.dart index 5cbea5fc0b927..0bd3de9fcc733 100644 --- a/packages/flutter_tools/test/general.shard/dart_plugin_test.dart +++ b/packages/flutter_tools/test/general.shard/dart_plugin_test.dart @@ -1054,7 +1054,4 @@ class FakeFlutterProject extends Fake implements FlutterProject { @override WindowsProject windows; - - @override - WindowsUwpProject windowsUwp; } diff --git a/packages/flutter_tools/test/general.shard/features_test.dart b/packages/flutter_tools/test/general.shard/features_test.dart index d8a460a581bf2..c7dcf5261d234 100644 --- a/packages/flutter_tools/test/general.shard/features_test.dart +++ b/packages/flutter_tools/test/general.shard/features_test.dart @@ -366,37 +366,5 @@ void main() { expect(featureFlags.isWindowsEnabled, true); }); - - // Windows UWP desktop - - testWithoutContext('Flutter Windows UWP desktop off by default on master', () { - final FeatureFlags featureFlags = createFlags('master'); - - expect(featureFlags.isWindowsUwpEnabled, false); - }); - - testWithoutContext('Flutter Windows UWP desktop enabled with config on master', () { - final FeatureFlags featureFlags = createFlags('master'); - testConfig.setValue('enable-windows-uwp-desktop', true); - - expect(featureFlags.isWindowsUwpEnabled, true); - }); - - testWithoutContext('Flutter Windows UWP desktop config includes removal warning', () { - expect(windowsUwpEmbedding.extraHelpText, contains('Windows UWP support is obsolete and will be removed')); - }); - - testWithoutContext('Flutter Windows UWP desktop off by default on stable', () { - final FeatureFlags featureFlags = createFlags('stable'); - - expect(featureFlags.isWindowsUwpEnabled, false); - }); - - testWithoutContext('Flutter Windows UWP desktop not enabled with config on stable', () { - final FeatureFlags featureFlags = createFlags('stable'); - testConfig.setValue('enable-windows-uwp-desktop', true); - - expect(featureFlags.isWindowsUwpEnabled, false); - }); }); } diff --git a/packages/flutter_tools/test/general.shard/plugin_parsing_test.dart b/packages/flutter_tools/test/general.shard/plugin_parsing_test.dart index 18950258f985d..40ea7cea7031c 100644 --- a/packages/flutter_tools/test/general.shard/plugin_parsing_test.dart +++ b/packages/flutter_tools/test/general.shard/plugin_parsing_test.dart @@ -272,8 +272,7 @@ void main() { ' windows:\n' ' pluginClass: WinSamplePlugin\n' ' supportedVariants:\n' - ' - win32\n' - ' - uwp\n'; + ' - win32\n'; final YamlMap pluginYaml = loadYaml(pluginYamlRaw) as YamlMap; final Plugin plugin = Plugin.fromYaml( @@ -288,7 +287,6 @@ void main() { final WindowsPlugin windowsPlugin = plugin.platforms[WindowsPlugin.kConfigKey]! as WindowsPlugin; expect(windowsPlugin.supportedVariants, [ PluginPlatformVariant.win32, - PluginPlatformVariant.winuwp, ]); }); @@ -322,8 +320,7 @@ void main() { ' windows:\n' ' pluginClass: WinSamplePlugin\n' ' supportedVariants:\n' - ' - not_yet_invented_variant\n' - ' - uwp\n'; + ' - not_yet_invented_variant\n'; final YamlMap pluginYaml = loadYaml(pluginYamlRaw) as YamlMap; final Plugin plugin = Plugin.fromYaml( @@ -336,9 +333,7 @@ void main() { ); final WindowsPlugin windowsPlugin = plugin.platforms[WindowsPlugin.kConfigKey]! as WindowsPlugin; - expect(windowsPlugin.supportedVariants, { - PluginPlatformVariant.winuwp, - }); + expect(windowsPlugin.supportedVariants, {}); }); testWithoutContext('Plugin parsing throws a fatal error on an empty plugin', () { diff --git a/packages/flutter_tools/test/general.shard/plugins_test.dart b/packages/flutter_tools/test/general.shard/plugins_test.dart index a51ffc89a366d..9eeadf7dea580 100644 --- a/packages/flutter_tools/test/general.shard/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/plugins_test.dart @@ -1682,9 +1682,6 @@ class FakeFlutterProject extends Fake implements FlutterProject { @override WindowsProject windows; - - @override - WindowsUwpProject windowsUwp; } class FakeMacOSProject extends Fake implements MacOSProject { diff --git a/packages/flutter_tools/test/general.shard/runner/local_engine_test.dart b/packages/flutter_tools/test/general.shard/runner/local_engine_test.dart index feff223c64319..55328826dccd6 100644 --- a/packages/flutter_tools/test/general.shard/runner/local_engine_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/local_engine_test.dart @@ -93,31 +93,6 @@ void main() { expect(logger.traceText, contains('Local engine source at /arbitrary/engine/src')); }); - testWithoutContext('treats winuwp_debug_unopt as a host engine', () async { - final FileSystem fileSystem = MemoryFileSystem.test(); - final Directory localEngine = fileSystem - .directory('$kArbitraryEngineRoot/src/out/winuwp_debug_unopt/') - ..createSync(recursive: true); - fileSystem.directory('$kArbitraryEngineRoot/src/out/winuwp_debug_unopt/').createSync(recursive: true); - - final BufferLogger logger = BufferLogger.test(); - final LocalEngineLocator localEngineLocator = LocalEngineLocator( - fileSystem: fileSystem, - flutterRoot: 'flutter/flutter', - logger: logger, - userMessages: UserMessages(), - platform: FakePlatform(environment: {}), - ); - - expect( - await localEngineLocator.findEnginePath(null, localEngine.path, null), - matchesEngineBuildPaths( - hostEngine: '/arbitrary/engine/src/out/winuwp_debug_unopt', - targetEngine: '/arbitrary/engine/src/out/winuwp_debug_unopt', - ), - ); - }); - testWithoutContext('works if --local-engine is specified and --local-engine-src-path ' 'is determined by --local-engine', () async { final FileSystem fileSystem = MemoryFileSystem.test(); diff --git a/packages/flutter_tools/test/general.shard/windows/install_manifest_test.dart b/packages/flutter_tools/test/general.shard/windows/install_manifest_test.dart deleted file mode 100644 index 2b7fdb8528226..0000000000000 --- a/packages/flutter_tools/test/general.shard/windows/install_manifest_test.dart +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// @dart = 2.8 - -import 'package:file/memory.dart'; -import 'package:file_testing/file_testing.dart'; -import 'package:flutter_tools/src/base/file_system.dart'; -import 'package:flutter_tools/src/base/logger.dart'; -import 'package:flutter_tools/src/base/platform.dart'; -import 'package:flutter_tools/src/build_info.dart'; -import 'package:flutter_tools/src/project.dart'; -import 'package:flutter_tools/src/windows/install_manifest.dart'; - -import '../../src/common.dart'; -import '../../src/context.dart'; - -final Platform platform = FakePlatform(operatingSystem: 'windows'); - -void main() { - FileSystem fileSystem; - - setUp(() { - fileSystem = MemoryFileSystem.test(style: FileSystemStyle.windows); - }); - - testUsingContext('Generates install manifest for a debug build', () async { - final Logger logger = BufferLogger.test(); - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - final Directory buildDirectory = fileSystem.currentDirectory - .childDirectory('build') - .childDirectory('winuwp'); - - await createManifest( - logger: logger, - fileSystem: fileSystem, - platform: platform, - project: flutterProject.windowsUwp, - buildDirectory: buildDirectory, - buildInfo: BuildInfo.debug, - ); - - final File manifest = flutterProject.windowsUwp.ephemeralDirectory.childFile('install_manifest'); - expect(manifest, exists); - expect(manifest.readAsLinesSync(), unorderedEquals([ - 'C:/build/flutter_assets/kernel_blob.bin', - 'C:/build/flutter_assets/AssetManifest.json', - 'C:/winuwp/flutter/ephemeral/flutter_windows_winuwp.dll', - 'C:/winuwp/flutter/ephemeral/flutter_windows_winuwp.dll.pdb', - 'C:/winuwp/flutter/ephemeral/icudtl.dat', - ])); - }, overrides: { - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.any(), - }); - - testUsingContext('Generates install manifest for a release build', () async { - final Logger logger = BufferLogger.test(); - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - final Directory buildDirectory = fileSystem.currentDirectory - .childDirectory('build') - .childDirectory('winuwp'); - - await createManifest( - logger: logger, - fileSystem: fileSystem, - platform: platform, - project: flutterProject.windowsUwp, - buildDirectory: buildDirectory, - buildInfo: BuildInfo.release, - ); - - final File manifest = flutterProject.windowsUwp.ephemeralDirectory.childFile('install_manifest'); - expect(manifest, exists); - expect(manifest.readAsLinesSync(), unorderedEquals([ - 'C:/build/winuwp/app.so', - 'C:/build/flutter_assets/AssetManifest.json', - 'C:/winuwp/flutter/ephemeral/flutter_windows_winuwp.dll', - 'C:/winuwp/flutter/ephemeral/flutter_windows_winuwp.dll.pdb', - 'C:/winuwp/flutter/ephemeral/icudtl.dat' - ])); - }, overrides: { - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.any(), - }); - - testUsingContext('Generates install manifest for a release build with assets', () async { - final BufferLogger logger = BufferLogger.test(); - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - final Directory buildDirectory = fileSystem.currentDirectory - .childDirectory('build') - .childDirectory('winuwp'); - - fileSystem.currentDirectory.childDirectory('.dart_tool').childFile('package_config.json') - ..createSync(recursive: true) - ..writeAsStringSync(''' -{ - "configVersion": 2, - "packages": [] -} - -'''); - fileSystem.currentDirectory.childFile('pubspec.yaml') - ..createSync() - ..writeAsStringSync(''' -name: foo - -flutter: - assets: - - assets/foo.png - -'''); - fileSystem.currentDirectory - .childDirectory('assets') - .childFile('foo.png') - .createSync(recursive: true); - - await createManifest( - logger: logger, - fileSystem: fileSystem, - platform: platform, - project: flutterProject.windowsUwp, - buildDirectory: buildDirectory, - buildInfo: BuildInfo.release, - ); - - final File manifest = flutterProject.windowsUwp.ephemeralDirectory.childFile('install_manifest'); - expect(manifest, exists); - expect(manifest.readAsLinesSync(), unorderedEquals([ - 'C:/build/winuwp/app.so', - 'C:/build/flutter_assets/assets/foo.png', - 'C:/build/flutter_assets/AssetManifest.json', - 'C:/build/flutter_assets/FontManifest.json', - 'C:/build/flutter_assets/NOTICES.Z', - 'C:/winuwp/flutter/ephemeral/flutter_windows_winuwp.dll', - 'C:/winuwp/flutter/ephemeral/flutter_windows_winuwp.dll.pdb', - 'C:/winuwp/flutter/ephemeral/icudtl.dat' - ])); - }, overrides: { - FileSystem: () => fileSystem, - ProcessManager: () => FakeProcessManager.any(), - }); -} diff --git a/packages/flutter_tools/test/general.shard/windows/plugins_test.dart b/packages/flutter_tools/test/general.shard/windows/plugins_test.dart index 68337306a2f48..45702779037ad 100644 --- a/packages/flutter_tools/test/general.shard/windows/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/windows/plugins_test.dart @@ -13,7 +13,6 @@ import 'package:flutter_tools/src/plugins.dart'; import 'package:flutter_tools/src/project.dart'; import '../../src/common.dart'; -import '../../src/fakes.dart'; const TemplateRenderer renderer = MustacheTemplateRenderer(); @@ -63,94 +62,8 @@ void main() { contains('#include '), ); }); - - testWithoutContext('UWP injects plugins marked as UWP-compatible', () async { - final FileSystem fileSystem = MemoryFileSystem.test(); - setUpProject(fileSystem); - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - - await writeWindowsUwpPluginFiles(flutterProject, [ - Plugin( - name: 'test', - path: 'foo', - defaultPackagePlatforms: const {}, - pluginDartClassPlatforms: const {}, - platforms: const { - WindowsPlugin.kConfigKey: WindowsPlugin( - name: 'test', - pluginClass: 'Foo', - variants: {PluginPlatformVariant.winuwp}, - )}, - dependencies: [], - isDirectDependency: true, - ), - ], renderer); - - final Directory managed = flutterProject.windowsUwp.managedDirectory; - expect(flutterProject.windowsUwp.generatedPluginCmakeFile, exists); - expect(managed.childFile('generated_plugin_registrant.h'), exists); - expect( - managed.childFile('generated_plugin_registrant.cc').readAsStringSync(), - contains('#include '), - ); - }); - - testWithoutContext('UWP does not inject Win32-only plugins', () async { - final FileSystem fileSystem = MemoryFileSystem.test(); - setUpProject(fileSystem); - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - - await writeWindowsUwpPluginFiles(flutterProject, [ - Plugin( - name: 'test', - path: 'foo', - defaultPackagePlatforms: const {}, - pluginDartClassPlatforms: const {}, - platforms: const { - WindowsPlugin.kConfigKey: WindowsPlugin( - name: 'test', - pluginClass: 'Foo', - variants: {PluginPlatformVariant.win32}, - )}, - dependencies: [], - isDirectDependency: true, - ), - ], renderer); - - final Directory managed = flutterProject.windowsUwp.managedDirectory; - expect(flutterProject.windowsUwp.generatedPluginCmakeFile, exists); - expect(managed.childFile('generated_plugin_registrant.h'), exists); - expect( - managed.childFile('generated_plugin_registrant.cc').readAsStringSync(), - isNot(contains('#include ')), - ); - }); - - testWithoutContext('Symlink injection treats UWP as Win32', () { - final FileSystem fileSystem = MemoryFileSystem.test(); - setUpProject(fileSystem); - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - flutterProject.flutterPluginsDependenciesFile.writeAsStringSync(kPluginDependencies); - - createPluginSymlinks( - flutterProject, - featureFlagsOverride: TestFeatureFlags(isWindowsUwpEnabled: true), - ); - - expect(flutterProject.windowsUwp.pluginSymlinkDirectory, exists); - - final Link link = flutterProject.windowsUwp.pluginSymlinkDirectory.listSync().single as Link; - - expect(link.path, '/winuwp/flutter/ephemeral/.plugin_symlinks/example'); - expect(link.targetSync(), r'C:\\example\\'); - }); } void setUpProject(FileSystem fileSystem) { fileSystem.file('pubspec.yaml').createSync(); - fileSystem.file('winuwp/CMakeLists.txt') - .createSync(recursive: true); - fileSystem.file('winuwp/project_version') - ..createSync(recursive: true) - ..writeAsStringSync('0'); } diff --git a/packages/flutter_tools/test/general.shard/windows/project_test.dart b/packages/flutter_tools/test/general.shard/windows/project_test.dart deleted file mode 100644 index 5a77c287c356b..0000000000000 --- a/packages/flutter_tools/test/general.shard/windows/project_test.dart +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:file/file.dart'; -import 'package:file/memory.dart'; -import 'package:flutter_tools/src/project.dart'; - -import '../../src/common.dart'; - -const String kExampleManifest = r''' - - - - - - - - @SHORT_NAME@ - CMake Test Cert - Assets/StoreLogo.png - - - - - - - - - - - - - - - - - - - - - - -'''; - -void main() { - testWithoutContext('Project can parse the app version from the appx manifest', () { - final FileSystem fileSystem = MemoryFileSystem.test(); - fileSystem.file('winuwp/runner_uwp/appxmanifest.in') - ..createSync(recursive: true) - ..writeAsStringSync(kExampleManifest); - - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - - expect(flutterProject.windowsUwp.packageVersion, '2.3.1.4'); - }); - - testWithoutContext('Project returns null if appx manifest does not exist', () { - final FileSystem fileSystem = MemoryFileSystem.test(); - - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - - expect(flutterProject.windowsUwp.packageVersion, null); - }); - - testWithoutContext('Project throws a tool exit if appxmanifest is not valid xml', () { - final FileSystem fileSystem = MemoryFileSystem.test(); - fileSystem.file('winuwp/runner_uwp/appxmanifest.in') - ..createSync(recursive: true) - ..writeAsStringSync('['); - - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - - expect(() => flutterProject.windowsUwp.packageVersion, throwsToolExit()); - }); - - testWithoutContext('Can parse the PACKAGE_GUID from the Cmake manifest', () { - final FileSystem fileSystem = MemoryFileSystem.test(); - fileSystem.file('winuwp/runner_uwp/CMakeLists.txt') - ..createSync(recursive: true) - ..writeAsStringSync(r''' -cmake_minimum_required (VERSION 3.8) -set(CMAKE_SYSTEM_NAME WindowsStore) -set(CMAKE_SYSTEM_VERSION 10.0) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED YES) - -include(CMakePrintHelpers) - -project ("TestBedUWP") - -set(APP_MANIFEST_NAME Package.appxmanifest) -set(APP_MANIFEST_TARGET_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${APP_MANIFEST_NAME}) -set(SHORT_NAME ${BINARY_NAME}) -set(PACKAGE_GUID "F941A77F-8AE1-4E3E-9611-68FBD3C62AE8") - -'''); - - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - - expect(flutterProject.windowsUwp.packageGuid, 'F941A77F-8AE1-4E3E-9611-68FBD3C62AE8'); - }); - - testWithoutContext('Returns null if the PACKAGE_GUID cannot be found in the Cmake file', () { - final FileSystem fileSystem = MemoryFileSystem.test(); - fileSystem.file('winuwp/runner_uwp/CMakeLists.txt') - ..createSync(recursive: true) - ..writeAsStringSync(r''' -cmake_minimum_required (VERSION 3.8) -set(CMAKE_SYSTEM_NAME WindowsStore) -set(CMAKE_SYSTEM_VERSION 10.0) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED YES) - -include(CMakePrintHelpers) - -project ("TestBedUWP") - -set(APP_MANIFEST_NAME Package.appxmanifest) -set(APP_MANIFEST_TARGET_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${APP_MANIFEST_NAME}) -set(SHORT_NAME ${BINARY_NAME}) -'''); - - final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory); - - expect(flutterProject.windowsUwp.packageGuid, null); - }); -} diff --git a/packages/flutter_tools/test/general.shard/windows/windows_device_test.dart b/packages/flutter_tools/test/general.shard/windows/windows_device_test.dart index 4646884aecfef..9152d8201fee3 100644 --- a/packages/flutter_tools/test/general.shard/windows/windows_device_test.dart +++ b/packages/flutter_tools/test/general.shard/windows/windows_device_test.dart @@ -9,12 +9,9 @@ import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/build_info.dart'; -import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/device.dart'; -import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/windows/application_package.dart'; -import 'package:flutter_tools/src/windows/uwptool.dart'; import 'package:flutter_tools/src/windows/windows_device.dart'; import 'package:flutter_tools/src/windows/windows_workflow.dart'; import 'package:test/fake.dart'; @@ -42,46 +39,16 @@ void main() { expect(windowsDevice.supportsRuntimeMode(BuildMode.jitRelease), false); }); - testWithoutContext('WindowsUwpDevice defaults', () async { - final FakeUwpTool uwptool = FakeUwpTool(); - final FileSystem fileSystem = MemoryFileSystem.test(); - final WindowsUWPDevice windowsDevice = setUpWindowsUwpDevice( - fileSystem: fileSystem, - uwptool: uwptool, - ); - final FakeBuildableUwpApp package = FakeBuildableUwpApp(); - - final String packagePath = fileSystem.path.join( - 'build', 'winuwp', 'runner_uwp', 'AppPackages', 'testapp', - 'testapp_1.2.3.4_x64_Debug_Test', 'testapp_1.2.3.4_x64_Debug.msix', - ); - fileSystem.file(packagePath).createSync(recursive:true); - expect(await windowsDevice.targetPlatform, TargetPlatform.windows_uwp_x64); - expect(windowsDevice.name, 'Windows (UWP)'); - expect(await windowsDevice.installApp(package), true); - expect(await windowsDevice.uninstallApp(package), true); - expect(await windowsDevice.isLatestBuildInstalled(package), false); - expect(await windowsDevice.isAppInstalled(package), false); - expect(windowsDevice.category, Category.desktop); - - expect(windowsDevice.supportsRuntimeMode(BuildMode.debug), true); - expect(windowsDevice.supportsRuntimeMode(BuildMode.profile), true); - expect(windowsDevice.supportsRuntimeMode(BuildMode.release), true); - expect(windowsDevice.supportsRuntimeMode(BuildMode.jitRelease), false); - }); - testWithoutContext('WindowsDevices does not list devices if the workflow is unsupported', () async { expect(await WindowsDevices( windowsWorkflow: WindowsWorkflow( featureFlags: TestFeatureFlags(), platform: FakePlatform(operatingSystem: 'windows'), ), - featureFlags: TestFeatureFlags(), operatingSystemUtils: FakeOperatingSystemUtils(), logger: BufferLogger.test(), processManager: FakeProcessManager.any(), fileSystem: MemoryFileSystem.test(), - uwptool: FakeUwpTool(), ).devices, []); }); @@ -95,61 +62,9 @@ void main() { logger: BufferLogger.test(), processManager: FakeProcessManager.any(), fileSystem: MemoryFileSystem.test(), - featureFlags: TestFeatureFlags(isWindowsEnabled: true), - uwptool: FakeUwpTool(), ).devices, hasLength(1)); }); - testWithoutContext('WindowsDevices lists a UWP Windows device if feature is enabled', () async { - final FeatureFlags featureFlags = TestFeatureFlags(isWindowsEnabled: true, isWindowsUwpEnabled: true); - expect(await WindowsDevices( - windowsWorkflow: WindowsWorkflow( - featureFlags: featureFlags, - platform: FakePlatform(operatingSystem: 'windows') - ), - operatingSystemUtils: FakeOperatingSystemUtils(), - logger: BufferLogger.test(), - processManager: FakeProcessManager.any(), - fileSystem: MemoryFileSystem.test(), - featureFlags: featureFlags, - uwptool: FakeUwpTool(), - ).devices, hasLength(2)); - }); - - testWithoutContext('WindowsDevices has windows and winuwp well known devices', () async { - final FeatureFlags featureFlags = TestFeatureFlags(isWindowsEnabled: true, isWindowsUwpEnabled: true); - expect(WindowsDevices( - windowsWorkflow: WindowsWorkflow( - featureFlags: featureFlags, - platform: FakePlatform(operatingSystem: 'windows') - ), - operatingSystemUtils: FakeOperatingSystemUtils(), - logger: BufferLogger.test(), - processManager: FakeProcessManager.any(), - fileSystem: MemoryFileSystem.test(), - featureFlags: featureFlags, - uwptool: FakeUwpTool(), - ).wellKnownIds, ['windows', 'winuwp']); - }); - - testWithoutContext('WindowsDevices ignores the timeout provided to discoverDevices', () async { - final WindowsDevices windowsDevices = WindowsDevices( - windowsWorkflow: WindowsWorkflow( - featureFlags: TestFeatureFlags(isWindowsEnabled: true), - platform: FakePlatform(operatingSystem: 'windows') - ), - operatingSystemUtils: FakeOperatingSystemUtils(), - logger: BufferLogger.test(), - processManager: FakeProcessManager.any(), - fileSystem: MemoryFileSystem.test(), - featureFlags: TestFeatureFlags(isWindowsEnabled: true), - uwptool: FakeUwpTool(), - ); - // Timeout ignored. - final List devices = await windowsDevices.discoverDevices(timeout: const Duration(seconds: 10)); - expect(devices, hasLength(1)); - }); - testWithoutContext('isSupportedForProject is true with editable host app', () async { final FileSystem fileSystem = MemoryFileSystem.test(); final WindowsDevice windowsDevice = setUpWindowsDevice(fileSystem: fileSystem); @@ -191,196 +106,6 @@ void main() { expect(windowsDevice.executablePathForDevice(fakeApp, BuildMode.profile), 'profile/executable'); expect(windowsDevice.executablePathForDevice(fakeApp, BuildMode.release), 'release/executable'); }); - - testWithoutContext('WinUWPDevice installs cert if not installed', () async { - Cache.flutterRoot = ''; - final FakeUwpTool uwptool = FakeUwpTool(); - final FileSystem fileSystem = MemoryFileSystem.test(); - final WindowsUWPDevice windowsDevice = setUpWindowsUwpDevice( - fileSystem: fileSystem, - uwptool: uwptool, - ); - final FakeBuildableUwpApp package = FakeBuildableUwpApp(); - - uwptool.hasValidSignature = false; - final String packagePath = fileSystem.path.join( - 'build', 'winuwp', 'runner_uwp', 'AppPackages', 'testapp', - 'testapp_1.2.3.4_x64_Debug_Test', 'testapp_1.2.3.4_x64_Debug.msix', - ); - fileSystem.file(packagePath).createSync(recursive:true); - final bool result = await windowsDevice.installApp(package); - - expect(result, isTrue); - expect(uwptool.installCertRequests, hasLength(1)); - expect(uwptool.installAppRequests, hasLength(1)); - }); - - testWithoutContext('WinUWPDevice does not install cert if not installed', () async { - Cache.flutterRoot = ''; - final FakeUwpTool uwptool = FakeUwpTool(); - final FileSystem fileSystem = MemoryFileSystem.test(); - final WindowsUWPDevice windowsDevice = setUpWindowsUwpDevice( - fileSystem: fileSystem, - uwptool: uwptool, - ); - final FakeBuildableUwpApp package = FakeBuildableUwpApp(); - - uwptool.hasValidSignature = true; - final String packagePath = fileSystem.path.join( - 'build', 'winuwp', 'runner_uwp', 'AppPackages', 'testapp', - 'testapp_1.2.3.4_x64_Debug_Test', 'testapp_1.2.3.4_x64_Debug.msix', - ); - fileSystem.file(packagePath).createSync(recursive:true); - final bool result = await windowsDevice.installApp(package); - - expect(result, isTrue); - expect(uwptool.installCertRequests, isEmpty); - expect(uwptool.installAppRequests, hasLength(1)); - }); - - testWithoutContext('WinUWPDevice prefers installing multi-arch binaries', () async { - Cache.flutterRoot = ''; - final FakeUwpTool uwptool = FakeUwpTool(); - final FileSystem fileSystem = MemoryFileSystem.test(); - final WindowsUWPDevice windowsDevice = setUpWindowsUwpDevice( - fileSystem: fileSystem, - uwptool: uwptool, - ); - final FakeBuildableUwpApp package = FakeBuildableUwpApp(); - - final String singleArchPath = fileSystem.path.absolute(fileSystem.path.join( - 'build', 'winuwp', 'runner_uwp', 'AppPackages', 'testapp', - 'testapp_1.2.3.4_x64_Debug_Test', 'testapp_1.2.3.4_x64_Debug.msix', - )); - fileSystem.file(singleArchPath).createSync(recursive:true); - final String multiArchPath = fileSystem.path.absolute(fileSystem.path.join( - 'build', 'winuwp', 'runner_uwp', 'AppPackages', 'testapp', - 'testapp_1.2.3.4_Debug_Test', 'testapp_1.2.3.4_Debug.msix', - )); - fileSystem.file(multiArchPath).createSync(recursive:true); - final bool result = await windowsDevice.installApp(package); - - expect(result, isTrue); - expect(uwptool.installAppRequests.single.packageUri, Uri.file(multiArchPath).toString()); - }); - - testWithoutContext('WinUWPDevice falls back to installing single-arch binaries', () async { - Cache.flutterRoot = ''; - final FakeUwpTool uwptool = FakeUwpTool(); - final FileSystem fileSystem = MemoryFileSystem.test(); - final WindowsUWPDevice windowsDevice = setUpWindowsUwpDevice( - fileSystem: fileSystem, - uwptool: uwptool, - ); - final FakeBuildableUwpApp package = FakeBuildableUwpApp(); - - final String singleArchPath = fileSystem.path.absolute(fileSystem.path.join( - 'build', 'winuwp', 'runner_uwp', 'AppPackages', 'testapp', - 'testapp_1.2.3.4_x64_Debug_Test', 'testapp_1.2.3.4_x64_Debug.msix', - )); - fileSystem.file(singleArchPath).createSync(recursive:true); - final bool result = await windowsDevice.installApp(package); - - expect(result, isTrue); - expect(uwptool.installAppRequests.single.packageUri, Uri.file(singleArchPath).toString()); - }); - - testWithoutContext('WinUWPDevice can launch application if cert is installed', () async { - Cache.flutterRoot = ''; - final FakeUwpTool uwptool = FakeUwpTool(); - final FileSystem fileSystem = MemoryFileSystem.test(); - final WindowsUWPDevice windowsDevice = setUpWindowsUwpDevice( - fileSystem: fileSystem, - uwptool: uwptool, - ); - final FakeBuildableUwpApp package = FakeBuildableUwpApp(); - - uwptool.hasValidSignature = true; - final String packagePath = fileSystem.path.join( - 'build', 'winuwp', 'runner_uwp', 'AppPackages', 'testapp', - 'testapp_1.2.3.4_x64_Debug_Test', 'testapp_1.2.3.4_x64_Debug.msix', - ); - fileSystem.file(packagePath).createSync(recursive:true); - final LaunchResult result = await windowsDevice.startApp( - package, - debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug), - prebuiltApplication: true, - platformArgs: {}, - ); - - expect(result.started, true); - expect(uwptool.installCertRequests, isEmpty); - expect(uwptool.launchAppRequests.single.packageFamily, 'PACKAGE-ID_publisher'); - expect(uwptool.launchAppRequests.single.args, [ - '--observatory-port=12345', - '--disable-service-auth-codes', - '--enable-dart-profiling', - '--enable-checked-mode', - '--verify-entry-points', - ]); - }); - - testWithoutContext('WinUWPDevice installs cert and can launch application if cert not installed', () async { - Cache.flutterRoot = ''; - final FakeUwpTool uwptool = FakeUwpTool(); - final FileSystem fileSystem = MemoryFileSystem.test(); - final WindowsUWPDevice windowsDevice = setUpWindowsUwpDevice( - fileSystem: fileSystem, - uwptool: uwptool, - ); - final FakeBuildableUwpApp package = FakeBuildableUwpApp(); - - uwptool.hasValidSignature = false; - final String packagePath = fileSystem.path.join( - 'build', 'winuwp', 'runner_uwp', 'AppPackages', 'testapp', - 'testapp_1.2.3.4_x64_Debug_Test', 'testapp_1.2.3.4_x64_Debug.msix', - ); - fileSystem.file(packagePath).createSync(recursive:true); - final LaunchResult result = await windowsDevice.startApp( - package, - debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug), - prebuiltApplication: true, - platformArgs: {}, - ); - - expect(result.started, true); - expect(uwptool.installCertRequests, isNotEmpty); - expect(uwptool.launchAppRequests.single.packageFamily, 'PACKAGE-ID_publisher'); - expect(uwptool.launchAppRequests.single.args, [ - '--observatory-port=12345', - '--disable-service-auth-codes', - '--enable-dart-profiling', - '--enable-checked-mode', - '--verify-entry-points', - ]); - }); - - testWithoutContext('WinUWPDevice can launch application in release mode', () async { - Cache.flutterRoot = ''; - final FakeUwpTool uwptool = FakeUwpTool(); - final FileSystem fileSystem = MemoryFileSystem.test(); - final WindowsUWPDevice windowsDevice = setUpWindowsUwpDevice( - fileSystem: fileSystem, - uwptool: uwptool, - ); - final FakeBuildableUwpApp package = FakeBuildableUwpApp(); - - final String packagePath = fileSystem.path.join( - 'build', 'winuwp', 'runner_uwp', 'AppPackages', 'testapp', - 'testapp_1.2.3.4_x64_Release_Test', 'testapp_1.2.3.4_x64_Release.msix', - ); - fileSystem.file(packagePath).createSync(recursive:true); - final LaunchResult result = await windowsDevice.startApp( - package, - debuggingOptions: DebuggingOptions.enabled(BuildInfo.release), - prebuiltApplication: true, - platformArgs: {}, - ); - - expect(result.started, true); - expect(uwptool.launchAppRequests.single.packageFamily, 'PACKAGE-ID_publisher'); - expect(uwptool.launchAppRequests.single.args, []); - }); } FlutterProject setUpFlutterProject(Directory directory) { @@ -404,119 +129,7 @@ WindowsDevice setUpWindowsDevice({ ); } -WindowsUWPDevice setUpWindowsUwpDevice({ - FileSystem fileSystem, - Logger logger, - ProcessManager processManager, - UwpTool uwptool, -}) { - return WindowsUWPDevice( - fileSystem: fileSystem ?? MemoryFileSystem.test(), - logger: logger ?? BufferLogger.test(), - processManager: processManager ?? FakeProcessManager.any(), - operatingSystemUtils: FakeOperatingSystemUtils(), - uwptool: uwptool ?? FakeUwpTool(), - ); -} - class FakeWindowsApp extends Fake implements WindowsApp { @override String executable(BuildMode buildMode) => '${buildMode.name}/executable'; } - -class FakeBuildableUwpApp extends Fake implements BuildableUwpApp { - @override - String get id => 'PACKAGE-ID'; - @override - String get name => 'testapp'; - @override - String get projectVersion => '1.2.3.4'; - - // Test helper to get the expected package family. - static const String packageFamily = 'PACKAGE-ID_publisher'; -} - -class FakeUwpTool implements UwpTool { - bool isInstalled = false; - bool hasValidSignature = false; - final List<_GetPackageFamilyRequest> getPackageFamilyRequests = <_GetPackageFamilyRequest>[]; - final List<_LaunchAppRequest> launchAppRequests = <_LaunchAppRequest>[]; - final List<_InstallCertRequest> installCertRequests = <_InstallCertRequest>[]; - final List<_InstallAppRequest> installAppRequests = <_InstallAppRequest>[]; - final List<_UninstallAppRequest> uninstallAppRequests = <_UninstallAppRequest>[]; - - @override - Future> listApps() async { - return isInstalled ? [FakeBuildableUwpApp.packageFamily] : []; - } - - @override - Future getPackageFamilyName(String packageName) async { - getPackageFamilyRequests.add(_GetPackageFamilyRequest(packageName)); - return isInstalled ? FakeBuildableUwpApp.packageFamily : null; - } - - @override - Future launchApp(String packageFamily, List args) async { - launchAppRequests.add(_LaunchAppRequest(packageFamily, args)); - return 42; - } - - @override - Future isSignatureValid(String packagePath) async { - return hasValidSignature; - } - - @override - Future installCertificate(String certificatePath) async { - installCertRequests.add(_InstallCertRequest(certificatePath)); - return true; - } - - @override - Future installApp(String packageUri, List dependencyUris) async { - installAppRequests.add(_InstallAppRequest(packageUri, dependencyUris)); - isInstalled = true; - return true; - } - - @override - Future uninstallApp(String packageFamily) async { - uninstallAppRequests.add(_UninstallAppRequest(packageFamily)); - isInstalled = false; - return true; - } -} - -class _GetPackageFamilyRequest { - const _GetPackageFamilyRequest(this.packageId); - - final String packageId; -} - -class _LaunchAppRequest { - const _LaunchAppRequest(this.packageFamily, this.args); - - final String packageFamily; - final List args; -} - -class _InstallCertRequest { - const _InstallCertRequest(this.certificatePath); - - final String certificatePath; -} - - -class _InstallAppRequest { - const _InstallAppRequest(this.packageUri, this.dependencyUris); - - final String packageUri; - final List dependencyUris; -} - -class _UninstallAppRequest { - const _UninstallAppRequest(this.packageFamily); - - final String packageFamily; -} diff --git a/packages/flutter_tools/test/src/fakes.dart b/packages/flutter_tools/test/src/fakes.dart index 8ace19f6ade14..230c0302c7d2a 100644 --- a/packages/flutter_tools/test/src/fakes.dart +++ b/packages/flutter_tools/test/src/fakes.dart @@ -425,7 +425,6 @@ class TestFeatureFlags implements FeatureFlags { this.isIOSEnabled = true, this.isFuchsiaEnabled = false, this.areCustomDevicesEnabled = false, - this.isWindowsUwpEnabled = false, }); @override @@ -455,9 +454,6 @@ class TestFeatureFlags implements FeatureFlags { @override final bool areCustomDevicesEnabled; - @override - final bool isWindowsUwpEnabled; - @override bool isEnabled(Feature feature) { switch (feature) { @@ -479,8 +475,6 @@ class TestFeatureFlags implements FeatureFlags { return isFuchsiaEnabled; case flutterCustomDevicesFeature: return areCustomDevicesEnabled; - case windowsUwpEmbedding: - return isWindowsUwpEnabled; } return false; } From e1d21cf2565e1f81b08e9b7e0dcf92ce25a02d63 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 14:29:07 -0400 Subject: [PATCH 090/141] Roll Engine from d5b381c2e56d to 3f27923c7e6c (2 revisions) (#102588) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 0fd5076e42244..7b02b7bf9f556 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -d5b381c2e56d76ff56f4fcd4d53c84325c186182 +3f27923c7e6c06624fceefa59f8acfa749584847 diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index 1bcedb32f599e..fadb71ff11095 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -Jki3kG8_PI7MxcaiJMq3S_hlIs_wVuqBMOWOnuEHaw0C +V9WZPjuRB6MuqnFOtwwCpQ836OCACOlommBDJRphsswC From 3d4a1723e30ba9d9da51d85b482b1f6cfe07ec16 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Tue, 26 Apr 2022 12:44:08 -0700 Subject: [PATCH 091/141] [framework] Reland: use ImageFilter for zoom page transition (#102552) --- .../src/material/page_transitions_theme.dart | 12 +++- .../material/page_transitions_theme_test.dart | 58 +++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/material/page_transitions_theme.dart b/packages/flutter/lib/src/material/page_transitions_theme.dart index be8e5bb07d302..60e54894d3bdf 100644 --- a/packages/flutter/lib/src/material/page_transitions_theme.dart +++ b/packages/flutter/lib/src/material/page_transitions_theme.dart @@ -318,7 +318,11 @@ class _ZoomEnterTransition extends StatelessWidget { }, child: FadeTransition( opacity: fadeTransition, - child: ScaleTransition(scale: scaleTransition, child: child), + child: ScaleTransition( + scale: scaleTransition, + filterQuality: FilterQuality.low, + child: child, + ), ), ); } @@ -363,7 +367,11 @@ class _ZoomExitTransition extends StatelessWidget { return FadeTransition( opacity: fadeTransition, - child: ScaleTransition(scale: scaleTransition, child: child), + child: ScaleTransition( + scale: scaleTransition, + filterQuality: FilterQuality.low, + child: child, + ), ); } } diff --git a/packages/flutter/test/material/page_transitions_theme_test.dart b/packages/flutter/test/material/page_transitions_theme_test.dart index 749588c6f5155..4899c835aa799 100644 --- a/packages/flutter/test/material/page_transitions_theme_test.dart +++ b/packages/flutter/test/material/page_transitions_theme_test.dart @@ -5,6 +5,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { @@ -220,4 +221,61 @@ void main() { await tester.pumpAndSettle(); expect(builtCount, 1); }, variant: TargetPlatformVariant.only(TargetPlatform.android)); + + testWidgets('_ZoomPageTransition uses a FilterQuality while animating', (WidgetTester tester) async { + final Map routes = { + '/': (BuildContext context) => Material( + child: TextButton( + child: const Text('push'), + onPressed: () { Navigator.of(context).pushNamed('/b'); }, + ), + ), + '/b': (BuildContext context) => StatefulBuilder( + builder: (BuildContext context, StateSetter setState) { + return TextButton( + child: const Text('pop'), + onPressed: () { Navigator.pop(context); }, + ); + }, + ), + }; + + await tester.pumpWidget( + MaterialApp( + theme: ThemeData( + pageTransitionsTheme: const PageTransitionsTheme( + builders: { + TargetPlatform.android: ZoomPageTransitionsBuilder(), // creates a _ZoomPageTransition + }, + ), + ), + routes: routes, + ), + ); + + expect(tester.layers, isNot(contains(isA()))); + + await tester.tap(find.text('push')); + await tester.pump(); + await tester.pump(); + + expect(tester.layers, contains(isA())); + expect(tester.layers.whereType(), hasLength(1)); + + await tester.pumpAndSettle(); + + expect(tester.layers, isNot(contains(isA()))); + + await tester.tap(find.text('pop')); + await tester.pump(); + await tester.pump(); + + expect(tester.layers, contains(isA())); + // exiting requires two different zooms. + expect(tester.layers.whereType(), hasLength(2)); + + await tester.pumpAndSettle(); + + expect(tester.layers, isNot(contains(isA()))); + }, variant: TargetPlatformVariant.only(TargetPlatform.android)); } From 79d4bdd1595dbeeaaf1a94789177860fc9072133 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 15:54:07 -0400 Subject: [PATCH 092/141] Roll Engine from 3f27923c7e6c to b30b65a74554 (1 revision) (#102594) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 7b02b7bf9f556..d5c65d74c3136 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -3f27923c7e6c06624fceefa59f8acfa749584847 +b30b65a74554945a19b31f66a10a3372a10d0e85 From dacab7de3a1b81d263aee87a2529a9db0d5e2da2 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Tue, 26 Apr 2022 13:29:08 -0700 Subject: [PATCH 093/141] Improve efficiency of copying the animation ObserverList in notifyListeners (#102536) --- packages/flutter/lib/src/animation/listener_helpers.dart | 4 ++-- packages/flutter/lib/src/foundation/observer_list.dart | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/animation/listener_helpers.dart b/packages/flutter/lib/src/animation/listener_helpers.dart index ebf2943bd99a5..55cbd048e467b 100644 --- a/packages/flutter/lib/src/animation/listener_helpers.dart +++ b/packages/flutter/lib/src/animation/listener_helpers.dart @@ -137,7 +137,7 @@ mixin AnimationLocalListenersMixin { @protected @pragma('vm:notify-debugger-on-exception') void notifyListeners() { - final List localListeners = List.of(_listeners); + final List localListeners = _listeners.toList(growable: false); for (final VoidCallback listener in localListeners) { InformationCollector? collector; assert(() { @@ -226,7 +226,7 @@ mixin AnimationLocalStatusListenersMixin { @protected @pragma('vm:notify-debugger-on-exception') void notifyStatusListeners(AnimationStatus status) { - final List localListeners = List.of(_statusListeners); + final List localListeners = _statusListeners.toList(growable: false); for (final AnimationStatusListener listener in localListeners) { try { if (_statusListeners.contains(listener)) diff --git a/packages/flutter/lib/src/foundation/observer_list.dart b/packages/flutter/lib/src/foundation/observer_list.dart index c4683a09ed466..22c2389cebeb3 100644 --- a/packages/flutter/lib/src/foundation/observer_list.dart +++ b/packages/flutter/lib/src/foundation/observer_list.dart @@ -76,6 +76,11 @@ class ObserverList extends Iterable { @override bool get isNotEmpty => _list.isNotEmpty; + + @override + List toList({bool growable = true}) { + return _list.toList(growable: growable); + } } /// A list optimized for the observer pattern, but for larger numbers of observers. From 4a2ed00231bc5f1a11cf3e1723cf29e36efdef15 Mon Sep 17 00:00:00 2001 From: Zachary Anderson Date: Tue, 26 Apr 2022 13:30:45 -0700 Subject: [PATCH 094/141] [flutter_tools] Add entries to HostArtifacts for impellerc, libtessellator (#102593) --- packages/flutter_tools/lib/src/artifacts.dart | 93 ++++++++++++------- .../test/general.shard/artifacts_test.dart | 8 ++ 2 files changed, 67 insertions(+), 34 deletions(-) diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart index b53bca9ca5860..bf7635aeecb77 100644 --- a/packages/flutter_tools/lib/src/artifacts.dart +++ b/packages/flutter_tools/lib/src/artifacts.dart @@ -92,8 +92,14 @@ enum HostArtifact { idevicesyslog, idevicescreenshot, iproxy, + /// The root of the sky_engine package. skyEnginePath, + + // The Impeller shader compiler. + impellerc, + // Impeller's tessellation library. + libtessellator, } // TODO(knopp): Remove once darwin artifacts are universal and moved out of darwin-x64 @@ -202,8 +208,14 @@ String? _artifactToFileName(Artifact artifact, [ TargetPlatform? platform, Build } } -String _hostArtifactToFileName(HostArtifact artifact, bool windows) { - final String exe = windows ? '.exe' : ''; +String _hostArtifactToFileName(HostArtifact artifact, Platform platform) { + final String exe = platform.isWindows ? '.exe' : ''; + String dll = '.so'; + if (platform.isWindows) { + dll = '.dll'; + } else if (platform.isMacOS) { + dll = '.dylib'; + } switch (artifact) { case HostArtifact.flutterWebSdk: return ''; @@ -247,6 +259,10 @@ String _hostArtifactToFileName(HostArtifact artifact, bool windows) { case HostArtifact.webPrecompiledCanvaskitSoundSdkSourcemaps: case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps: return 'dart_sdk.js.map'; + case HostArtifact.impellerc: + return 'impellerc$exe'; + case HostArtifact.libtessellator: + return 'libtessellator$dll'; } } @@ -337,63 +353,68 @@ class CachedArtifacts implements Artifacts { final String path = _dartSdkPath(_cache); return _fileSystem.directory(path); case HostArtifact.engineDartBinary: - final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.flutterWebSdk: final String path = _getFlutterWebSdkPath(); return _fileSystem.directory(path); case HostArtifact.flutterWebLibrariesJson: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPlatformKernelDill: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPlatformSoundKernelDill: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledSdk: case HostArtifact.webPrecompiledSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledCanvaskitSdk: case HostArtifact.webPrecompiledCanvaskitSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledCanvaskitAndHtmlSdk: case HostArtifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledSoundSdk: case HostArtifact.webPrecompiledSoundSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-sound', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-sound', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledCanvaskitSoundSdk: case HostArtifact.webPrecompiledCanvaskitSoundSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-sound', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-sound', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdk: case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html-sound', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html-sound', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.idevicesyslog: case HostArtifact.idevicescreenshot: - final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows); + final String artifactFileName = _hostArtifactToFileName(artifact, _platform); return _cache.getArtifactDirectory('libimobiledevice').childFile(artifactFileName); case HostArtifact.skyEnginePath: final Directory dartPackageDirectory = _cache.getCacheDir('pkg'); - final String path = _fileSystem.path.join(dartPackageDirectory.path, _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(dartPackageDirectory.path, _hostArtifactToFileName(artifact, _platform)); return _fileSystem.directory(path); case HostArtifact.dart2jsSnapshot: case HostArtifact.dartdevcSnapshot: case HostArtifact.kernelWorkerSnapshot: - final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.iosDeploy: - final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows); + final String artifactFileName = _hostArtifactToFileName(artifact, _platform); return _cache.getArtifactDirectory('ios-deploy').childFile(artifactFileName); case HostArtifact.iproxy: - final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows); + final String artifactFileName = _hostArtifactToFileName(artifact, _platform); return _cache.getArtifactDirectory('usbmuxd').childFile(artifactFileName); + case HostArtifact.impellerc: + case HostArtifact.libtessellator: + final String artifactFileName = _hostArtifactToFileName(artifact, _platform); + final String engineDir = _getEngineArtifactsPath(_currentHostPlatform(_platform, _operatingSystemUtils))!; + return _fileSystem.file(_fileSystem.path.join(engineDir, artifactFileName)); } } @@ -757,67 +778,71 @@ class CachedLocalEngineArtifacts implements LocalEngineArtifacts { final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk'); return _fileSystem.directory(path); case HostArtifact.engineDartBinary: - final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.dart2jsSnapshot: - final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.dartdevcSnapshot: - final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.kernelWorkerSnapshot: - final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.flutterWebSdk: final String path = _getFlutterWebSdkPath(); return _fileSystem.directory(path); case HostArtifact.flutterWebLibrariesJson: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPlatformKernelDill: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPlatformSoundKernelDill: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledSdk: case HostArtifact.webPrecompiledSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledCanvaskitSdk: case HostArtifact.webPrecompiledCanvaskitSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledCanvaskitAndHtmlSdk: case HostArtifact.webPrecompiledCanvaskitAndHtmlSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledSoundSdk: case HostArtifact.webPrecompiledSoundSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-sound', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-sound', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledCanvaskitSoundSdk: case HostArtifact.webPrecompiledCanvaskitSoundSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-sound', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-sound', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdk: case HostArtifact.webPrecompiledCanvaskitAndHtmlSoundSdkSourcemaps: - final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html-sound', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', 'amd-canvaskit-html-sound', _hostArtifactToFileName(artifact, _platform)); return _fileSystem.file(path); case HostArtifact.idevicesyslog: case HostArtifact.idevicescreenshot: - final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows); + final String artifactFileName = _hostArtifactToFileName(artifact, _platform); return _cache.getArtifactDirectory('libimobiledevice').childFile(artifactFileName); case HostArtifact.skyEnginePath: final Directory dartPackageDirectory = _cache.getCacheDir('pkg'); - final String path = _fileSystem.path.join(dartPackageDirectory.path, _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(dartPackageDirectory.path, _hostArtifactToFileName(artifact, _platform)); return _fileSystem.directory(path); case HostArtifact.iosDeploy: - final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows); + final String artifactFileName = _hostArtifactToFileName(artifact, _platform); return _cache.getArtifactDirectory('ios-deploy').childFile(artifactFileName); case HostArtifact.iproxy: - final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows); + final String artifactFileName = _hostArtifactToFileName(artifact, _platform); return _cache.getArtifactDirectory('usbmuxd').childFile(artifactFileName); + case HostArtifact.impellerc: + case HostArtifact.libtessellator: + final String artifactFileName = _hostArtifactToFileName(artifact, _platform); + return _fileSystem.file(_fileSystem.path.join(_hostEngineOutPath, artifactFileName)); } } diff --git a/packages/flutter_tools/test/general.shard/artifacts_test.dart b/packages/flutter_tools/test/general.shard/artifacts_test.dart index b4d5cab12e4de..aed3eb9285104 100644 --- a/packages/flutter_tools/test/general.shard/artifacts_test.dart +++ b/packages/flutter_tools/test/general.shard/artifacts_test.dart @@ -315,6 +315,14 @@ void main() { fileSystem.path.join('/out', 'host_debug_unopt', 'dart-sdk', 'bin', 'snapshots', 'frontend_server.dart.snapshot') ); + expect( + artifacts.getHostArtifact(HostArtifact.impellerc).path, + fileSystem.path.join('/out', 'host_debug_unopt', 'impellerc'), + ); + expect( + artifacts.getHostArtifact(HostArtifact.libtessellator).path, + fileSystem.path.join('/out', 'host_debug_unopt', 'libtessellator.so'), + ); }); testWithoutContext('getEngineType', () { From d69816163ef6d48dcb20f0cdeddf2d7894db7108 Mon Sep 17 00:00:00 2001 From: keyonghan <54558023+keyonghan@users.noreply.github.com> Date: Tue, 26 Apr 2022 13:34:06 -0700 Subject: [PATCH 095/141] Enable Mac/android arm64 tests as `bringup: true` (#102589) --- .ci.yaml | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/.ci.yaml b/.ci.yaml index 8322c8c8b45d2..33a869f0de3ee 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -108,6 +108,25 @@ platform_properties: os: Mac-12 cpu: x86 device_os: N + mac_arm64_android: + properties: + caches: >- + [ + {"name":"builder_mac_devicelab","path":"builder"}, + {"name":"android_sdk","path":"android"}, + {"name":"flutter_sdk","path":"flutter sdk"}, + {"name":"gradle","path":"gradle"}, + {"name":"openjdk_11","path":"java"}, + {"name":"pub_cache","path":".pub-cache"} + ] + dependencies: >- + [ + {"dependency": "android_sdk", "version": "version:31v8"}, + {"dependency": "open_jdk", "version": "11"} + ] + os: Mac-12 + cpu: arm64 + device_os: N mac_ios: properties: caches: >- @@ -3110,6 +3129,17 @@ targets: task_name: hello_world_android__compile scheduler: luci + - name: Mac_arm64_android hello_world_android__compile + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # Flaky: https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","android","mac","arm64"] + task_name: hello_world_android__compile + scheduler: luci + - name: Mac_android hot_mode_dev_cycle__benchmark recipe: devicelab/devicelab_drone presubmit: false @@ -3130,6 +3160,17 @@ targets: task_name: integration_test_test scheduler: luci + - name: Mac_arm64_android integration_test_test + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # Flaky: https://github.com/flutter/flutter/issues/87508 + timeout: 60 + properties: + tags: > + ["devicelab","android","mac","arm64"] + task_name: integration_test_test + scheduler: luci + - name: Mac_android integration_ui_frame_number recipe: devicelab/devicelab_drone presubmit: false @@ -3161,6 +3202,19 @@ targets: task_name: run_release_test scheduler: luci + - name: Mac_arm64_android run_release_test + recipe: devicelab/devicelab_drone + presubmit: false + bringup: true # Flaky: https://github.com/flutter/flutter/issues/87508 + runIf: + - dev/** + timeout: 60 + properties: + tags: > + ["devicelab","android","mac","arm64"] + task_name: run_release_test + scheduler: luci + - name: Mac_android flutter_gallery_mac__start_up recipe: devicelab/devicelab_drone presubmit: false From c6af38c7f74cda9dfd164ecd6142c6120622173a Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Tue, 26 Apr 2022 14:24:09 -0700 Subject: [PATCH 096/141] Fix docs re: return value of Navigator's restorable methods (#102595) --- .../flutter/lib/src/widgets/navigator.dart | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/packages/flutter/lib/src/widgets/navigator.dart b/packages/flutter/lib/src/widgets/navigator.dart index 93d0bc5f21839..c64eac58cc678 100644 --- a/packages/flutter/lib/src/widgets/navigator.dart +++ b/packages/flutter/lib/src/widgets/navigator.dart @@ -1531,15 +1531,17 @@ class Navigator extends StatefulWidget { /// Ongoing gestures within the current route are canceled when a new route is /// pushed. /// - /// Returns a [Future] that completes to the `result` value passed to [pop] - /// when the pushed route is popped off the navigator. - /// /// The `T` type argument is the type of the return value of the route. /// /// To use [pushNamed], an [Navigator.onGenerateRoute] callback must be /// provided, /// {@endtemplate} /// + /// {@template flutter.widgets.navigator.pushNamed.returnValue} + /// Returns a [Future] that completes to the `result` value passed to [pop] + /// when the pushed route is popped off the navigator. + /// {@endtemplate} + /// /// {@template flutter.widgets.Navigator.pushNamed} /// The provided `arguments` are passed to the pushed route via /// [RouteSettings.arguments]. Any object can be passed as `arguments` (e.g. a @@ -1699,9 +1701,6 @@ class Navigator extends StatefulWidget { /// Ongoing gestures within the current route are canceled when a new route is /// pushed. /// - /// Returns a [Future] that completes to the `result` value passed to [pop] - /// when the pushed route is popped off the navigator. - /// /// The `T` type argument is the type of the return value of the new route, /// and `TO` is the type of the return value of the old route. /// @@ -1709,6 +1708,8 @@ class Navigator extends StatefulWidget { /// be provided. /// {@endtemplate} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@macro flutter.widgets.Navigator.pushNamed} /// /// {@tool snippet} @@ -1793,16 +1794,14 @@ class Navigator extends StatefulWidget { /// Ongoing gestures within the current route are canceled when a new route is /// pushed. /// - /// Returns a [Future] that completes to the `result` value passed to [pop] - /// when the pushed route is popped off the navigator. - /// /// The `T` type argument is the type of the return value of the new route, /// and `TO` is the return value type of the old route. /// /// To use [popAndPushNamed], a [Navigator.onGenerateRoute] callback must be provided. - /// /// {@endtemplate} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@macro flutter.widgets.Navigator.pushNamed} /// /// {@tool snippet} @@ -1898,15 +1897,14 @@ class Navigator extends StatefulWidget { /// Ongoing gestures within the current route are canceled when a new route is /// pushed. /// - /// Returns a [Future] that completes to the `result` value passed to [pop] - /// when the pushed route is popped off the navigator. - /// /// The `T` type argument is the type of the return value of the new route. /// /// To use [pushNamedAndRemoveUntil], an [Navigator.onGenerateRoute] callback /// must be provided. /// {@endtemplate} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@macro flutter.widgets.Navigator.pushNamed} /// /// {@tool snippet} @@ -1982,12 +1980,11 @@ class Navigator extends StatefulWidget { /// Ongoing gestures within the current route are canceled when a new route is /// pushed. /// - /// Returns a [Future] that completes to the `result` value passed to [pop] - /// when the pushed route is popped off the navigator. - /// /// The `T` type argument is the type of the return value of the route. /// {@endtemplate} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@tool snippet} /// /// Typical usage is as follows: @@ -2068,13 +2065,12 @@ class Navigator extends StatefulWidget { /// Ongoing gestures within the current route are canceled when a new route is /// pushed. /// - /// Returns a [Future] that completes to the `result` value passed to [pop] - /// when the pushed route is popped off the navigator. - /// /// The `T` type argument is the type of the return value of the new route, /// and `TO` is the type of the return value of the old route. /// {@endtemplate} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@tool snippet} /// /// Typical usage is as follows: @@ -2155,12 +2151,11 @@ class Navigator extends StatefulWidget { /// Ongoing gestures within the current route are canceled when a new route is /// pushed. /// - /// Returns a [Future] that completes to the `result` value passed to [pop] - /// when the pushed route is popped off the navigator. - /// /// The `T` type argument is the type of the return value of the new route. /// {@endtemplate} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@tool snippet} /// /// Typical usage is as follows: @@ -4078,6 +4073,8 @@ class NavigatorState extends State with TickerProviderStateMixin, Res /// /// {@macro flutter.widgets.navigator.pushNamed} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@macro flutter.widgets.Navigator.pushNamed} /// /// {@tool snippet} @@ -4145,6 +4142,8 @@ class NavigatorState extends State with TickerProviderStateMixin, Res /// /// {@macro flutter.widgets.navigator.pushReplacementNamed} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@macro flutter.widgets.Navigator.pushNamed} /// /// {@tool snippet} @@ -4215,6 +4214,8 @@ class NavigatorState extends State with TickerProviderStateMixin, Res /// /// {@macro flutter.widgets.navigator.popAndPushNamed} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@macro flutter.widgets.Navigator.pushNamed} /// /// {@tool snippet} @@ -4278,6 +4279,8 @@ class NavigatorState extends State with TickerProviderStateMixin, Res /// /// {@macro flutter.widgets.navigator.pushNamedAndRemoveUntil} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@macro flutter.widgets.Navigator.pushNamed} /// /// {@tool snippet} @@ -4346,6 +4349,8 @@ class NavigatorState extends State with TickerProviderStateMixin, Res /// /// {@macro flutter.widgets.navigator.push} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@tool snippet} /// /// Typical usage is as follows: @@ -4493,6 +4498,8 @@ class NavigatorState extends State with TickerProviderStateMixin, Res /// /// {@macro flutter.widgets.navigator.pushReplacement} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@tool snippet} /// /// Typical usage is as follows: @@ -4578,6 +4585,8 @@ class NavigatorState extends State with TickerProviderStateMixin, Res /// /// {@macro flutter.widgets.navigator.pushAndRemoveUntil} /// + /// {@macro flutter.widgets.navigator.pushNamed.returnValue} + /// /// {@tool snippet} /// /// Typical usage is as follows: From 2032de4b314d5c44e88b4d54c5eee86d01916204 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 17:29:05 -0400 Subject: [PATCH 097/141] Roll Engine from b30b65a74554 to 545a0b4ad107 (4 revisions) (#102599) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index d5c65d74c3136..bd7b40ca50f36 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -b30b65a74554945a19b31f66a10a3372a10d0e85 +545a0b4ad107425c6a7fa7cd6c57314672d83130 From e493d5ce73b39402a82ba8c8b800a0f1e1fd6377 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 18:39:03 -0400 Subject: [PATCH 098/141] Roll Engine from 545a0b4ad107 to 07584c64bb7b (3 revisions) (#102603) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index bd7b40ca50f36..62e6786a530c2 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -545a0b4ad107425c6a7fa7cd6c57314672d83130 +07584c64bb7ba8d9e79214c3667cdb16cfa67923 From fba9214d11ee73e235a9d995557478b03efefe87 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Tue, 26 Apr 2022 16:14:04 -0700 Subject: [PATCH 099/141] [framework] remove usage and deprecate physical model layer (#102274) --- packages/flutter/lib/src/rendering/flex.dart | 22 +- packages/flutter/lib/src/rendering/flow.dart | 21 +- packages/flutter/lib/src/rendering/layer.dart | 8 + .../flutter/lib/src/rendering/object.dart | 12 + .../flutter/lib/src/rendering/proxy_box.dart | 219 ++++++++++++------ .../lib/src/rendering/shifted_box.dart | 23 +- .../test/material/chip_filter_test.dart | 2 + .../test/material/chip_input_test.dart | 2 + .../test/material/outlined_button_test.dart | 45 ---- .../test/material/range_slider_test.dart | 4 +- .../flutter/test/material/slider_test.dart | 5 +- .../test/material/slider_theme_test.dart | 2 + .../test/material/toggle_buttons_test.dart | 26 +++ .../material/toggle_buttons_theme_test.dart | 6 + .../flutter/test/rendering/debug_test.dart | 2 +- .../test/rendering/proxy_box_test.dart | 99 +++----- .../test/widgets/mouse_region_test.dart | 2 +- .../test/widgets/nested_scroll_view_test.dart | 39 ++-- .../test/widgets/physical_model_test.dart | 24 -- .../flutter/test/widgets/transform_test.dart | 9 +- 20 files changed, 279 insertions(+), 293 deletions(-) diff --git a/packages/flutter/lib/src/rendering/flex.dart b/packages/flutter/lib/src/rendering/flex.dart index 99107df196b26..04043d0d11b74 100644 --- a/packages/flutter/lib/src/rendering/flex.dart +++ b/packages/flutter/lib/src/rendering/flex.dart @@ -1083,20 +1083,14 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin _clipRectLayer = LayerHandle(); diff --git a/packages/flutter/lib/src/rendering/layer.dart b/packages/flutter/lib/src/rendering/layer.dart index 4644180ddfbc3..b7f468acfaf14 100644 --- a/packages/flutter/lib/src/rendering/layer.dart +++ b/packages/flutter/lib/src/rendering/layer.dart @@ -1972,12 +1972,20 @@ class BackdropFilterLayer extends ContainerLayer { /// When debugging, setting [debugDisablePhysicalShapeLayers] to true will cause this /// layer to be skipped (directly replaced by its children). This can be helpful /// to track down the cause of performance problems. +@Deprecated( + 'Use a clip and canvas operations directly (See RenderPhysicalModel). ' + 'This feature was deprecated after v2.13.0-0.0.pre.', +) class PhysicalModelLayer extends ContainerLayer { /// Creates a composited layer that uses a physical model to producing /// lighting effects. /// /// The [clipPath], [clipBehavior], [elevation], [color], and [shadowColor] /// arguments must be non-null before the compositing phase of the pipeline. + @Deprecated( + 'Use a clip and canvas operations directly (See RenderPhysicalModel). ' + 'This feature was deprecated after v2.13.0-0.0.pre.', + ) PhysicalModelLayer({ Path? clipPath, Clip clipBehavior = Clip.none, diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart index c517ae1a64c61..73648a23de8c4 100644 --- a/packages/flutter/lib/src/rendering/object.dart +++ b/packages/flutter/lib/src/rendering/object.dart @@ -491,6 +491,10 @@ class PaintingContext extends ClipContext { /// (e.g. from opacity layer to a clip rect layer). /// {@endtemplate} ClipRectLayer? pushClipRect(bool needsCompositing, Offset offset, Rect clipRect, PaintingContextCallback painter, { Clip clipBehavior = Clip.hardEdge, ClipRectLayer? oldLayer }) { + if (clipBehavior == Clip.none) { + painter(this, offset); + return null; + } final Rect offsetClipRect = clipRect.shift(offset); if (needsCompositing) { final ClipRectLayer layer = oldLayer ?? ClipRectLayer(); @@ -526,6 +530,10 @@ class PaintingContext extends ClipContext { /// {@macro flutter.rendering.PaintingContext.pushClipRect.oldLayer} ClipRRectLayer? pushClipRRect(bool needsCompositing, Offset offset, Rect bounds, RRect clipRRect, PaintingContextCallback painter, { Clip clipBehavior = Clip.antiAlias, ClipRRectLayer? oldLayer }) { assert(clipBehavior != null); + if (clipBehavior == Clip.none) { + painter(this, offset); + return null; + } final Rect offsetBounds = bounds.shift(offset); final RRect offsetClipRRect = clipRRect.shift(offset); if (needsCompositing) { @@ -562,6 +570,10 @@ class PaintingContext extends ClipContext { /// {@macro flutter.rendering.PaintingContext.pushClipRect.oldLayer} ClipPathLayer? pushClipPath(bool needsCompositing, Offset offset, Rect bounds, Path clipPath, PaintingContextCallback painter, { Clip clipBehavior = Clip.antiAlias, ClipPathLayer? oldLayer }) { assert(clipBehavior != null); + if (clipBehavior == Clip.none) { + painter(this, offset); + return null; + } final Rect offsetBounds = bounds.shift(offset); final Path offsetClipPath = clipPath.shift(offset); if (needsCompositing) { diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart index 7e45a9d82d606..28b5990eff91b 100644 --- a/packages/flutter/lib/src/rendering/proxy_box.dart +++ b/packages/flutter/lib/src/rendering/proxy_box.dart @@ -1827,9 +1827,6 @@ abstract class _RenderPhysicalModelBase extends _RenderCustomClip { markNeedsPaint(); } - @override - bool get alwaysNeedsCompositing => true; - @override void describeSemanticsConfiguration(SemanticsConfiguration config) { super.describeSemanticsConfiguration(config); @@ -1845,6 +1842,8 @@ abstract class _RenderPhysicalModelBase extends _RenderCustomClip { } } +final Paint _transparentPaint = Paint()..color = const Color(0x00000000); + /// Creates a physical model layer that clips its child to a rounded /// rectangle. /// @@ -1873,9 +1872,6 @@ class RenderPhysicalModel extends _RenderPhysicalModelBase { _shape = shape, _borderRadius = borderRadius; - @override - PhysicalModelLayer? get layer => super.layer as PhysicalModelLayer?; - /// The shape of the layer. /// /// Defaults to [BoxShape.rectangle]. The [borderRadius] affects the corners @@ -1933,42 +1929,79 @@ class RenderPhysicalModel extends _RenderPhysicalModelBase { @override void paint(PaintingContext context, Offset offset) { - if (child != null) { - _updateClip(); - final RRect offsetRRect = _clip!.shift(offset); - final Rect offsetBounds = offsetRRect.outerRect; - final Path offsetRRectAsPath = Path()..addRRect(offsetRRect); - bool paintShadows = true; - assert(() { - if (debugDisableShadows) { - if (elevation > 0.0) { - context.canvas.drawRRect( - offsetRRect, - Paint() - ..color = shadowColor - ..style = PaintingStyle.stroke - ..strokeWidth = elevation * 2.0, - ); - } - paintShadows = false; - } - return true; - }()); - layer ??= PhysicalModelLayer(); - layer! - ..clipPath = offsetRRectAsPath - ..clipBehavior = clipBehavior - ..elevation = paintShadows ? elevation : 0.0 - ..color = color - ..shadowColor = shadowColor; - context.pushLayer(layer!, super.paint, offset, childPaintBounds: offsetBounds); - assert(() { - layer!.debugCreator = debugCreator; - return true; - }()); - } else { + if (child == null) { layer = null; + return; } + + _updateClip(); + final RRect offsetRRect = _clip!.shift(offset); + final Rect offsetBounds = offsetRRect.outerRect; + final Path offsetRRectAsPath = Path()..addRRect(offsetRRect); + bool paintShadows = true; + assert(() { + if (debugDisableShadows) { + if (elevation > 0.0) { + context.canvas.drawRRect( + offsetRRect, + Paint() + ..color = shadowColor + ..style = PaintingStyle.stroke + ..strokeWidth = elevation * 2.0, + ); + } + paintShadows = false; + } + return true; + }()); + + final Canvas canvas = context.canvas; + if (elevation != 0.0 && paintShadows) { + // The drawShadow call doesn't add the region of the shadow to the + // picture's bounds, so we draw a hardcoded amount of extra space to + // account for the maximum potential area of the shadow. + // TODO(jsimmons): remove this when Skia does it for us. + canvas.drawRect( + offsetBounds.inflate(20.0), + _transparentPaint, + ); + canvas.drawShadow( + offsetRRectAsPath, + shadowColor, + elevation, + color.alpha != 0xFF, + ); + } + final bool usesSaveLayer = clipBehavior == Clip.antiAliasWithSaveLayer; + if (!usesSaveLayer) { + canvas.drawRRect( + offsetRRect, + Paint()..color = color + ); + } + layer = context.pushClipRRect( + needsCompositing, + offset, + Offset.zero & size, + _clip!, + (PaintingContext context, Offset offset) { + if (usesSaveLayer) { + // If we want to avoid the bleeding edge artifact + // (https://github.com/flutter/flutter/issues/18057#issue-328003931) + // using saveLayer, we have to call drawPaint instead of drawPath as + // anti-aliased drawPath will always have such artifacts. + context.canvas.drawPaint( Paint()..color = color); + } + super.paint(context, offset); + }, + oldLayer: layer as ClipRRectLayer?, + clipBehavior: clipBehavior, + ); + + assert(() { + layer?.debugCreator = debugCreator; + return true; + }()); } @override @@ -2006,9 +2039,6 @@ class RenderPhysicalShape extends _RenderPhysicalModelBase { assert(color != null), assert(shadowColor != null); - @override - PhysicalModelLayer? get layer => super.layer as PhysicalModelLayer?; - @override Path get _defaultClip => Path()..addRect(Offset.zero & size); @@ -2025,41 +2055,78 @@ class RenderPhysicalShape extends _RenderPhysicalModelBase { @override void paint(PaintingContext context, Offset offset) { - if (child != null) { - _updateClip(); - final Rect offsetBounds = offset & size; - final Path offsetPath = _clip!.shift(offset); - bool paintShadows = true; - assert(() { - if (debugDisableShadows) { - if (elevation > 0.0) { - context.canvas.drawPath( - offsetPath, - Paint() - ..color = shadowColor - ..style = PaintingStyle.stroke - ..strokeWidth = elevation * 2.0, - ); - } - paintShadows = false; - } - return true; - }()); - layer ??= PhysicalModelLayer(); - layer! - ..clipPath = offsetPath - ..clipBehavior = clipBehavior - ..elevation = paintShadows ? elevation : 0.0 - ..color = color - ..shadowColor = shadowColor; - context.pushLayer(layer!, super.paint, offset, childPaintBounds: offsetBounds); - assert(() { - layer!.debugCreator = debugCreator; - return true; - }()); - } else { + if (child == null) { layer = null; + return; } + + _updateClip(); + final Rect offsetBounds = offset & size; + final Path offsetPath = _clip!.shift(offset); + bool paintShadows = true; + assert(() { + if (debugDisableShadows) { + if (elevation > 0.0) { + context.canvas.drawPath( + offsetPath, + Paint() + ..color = shadowColor + ..style = PaintingStyle.stroke + ..strokeWidth = elevation * 2.0, + ); + } + paintShadows = false; + } + return true; + }()); + + final Canvas canvas = context.canvas; + if (elevation != 0.0 && paintShadows) { + // The drawShadow call doesn't add the region of the shadow to the + // picture's bounds, so we draw a hardcoded amount of extra space to + // account for the maximum potential area of the shadow. + // TODO(jsimmons): remove this when Skia does it for us. + canvas.drawRect( + offsetBounds.inflate(20.0), + _transparentPaint, + ); + canvas.drawShadow( + offsetPath, + shadowColor, + elevation, + color.alpha != 0xFF, + ); + } + final bool usesSaveLayer = clipBehavior == Clip.antiAliasWithSaveLayer; + if (!usesSaveLayer) { + canvas.drawPath( + offsetPath, + Paint()..color = color + ); + } + layer = context.pushClipPath( + needsCompositing, + offset, + Offset.zero & size, + _clip!, + (PaintingContext context, Offset offset) { + if (usesSaveLayer) { + // If we want to avoid the bleeding edge artifact + // (https://github.com/flutter/flutter/issues/18057#issue-328003931) + // using saveLayer, we have to call drawPaint instead of drawPath as + // anti-aliased drawPath will always have such artifacts. + context.canvas.drawPaint( Paint()..color = color); + } + super.paint(context, offset); + }, + oldLayer: layer as ClipPathLayer?, + clipBehavior: clipBehavior, + ); + + assert(() { + layer?.debugCreator = debugCreator; + return true; + }()); } @override diff --git a/packages/flutter/lib/src/rendering/shifted_box.dart b/packages/flutter/lib/src/rendering/shifted_box.dart index 7ecdbb2b21ac3..1d989ad322eb2 100644 --- a/packages/flutter/lib/src/rendering/shifted_box.dart +++ b/packages/flutter/lib/src/rendering/shifted_box.dart @@ -799,20 +799,15 @@ class RenderConstraintsTransformBox extends RenderAligningShiftedBox with DebugO return; } - if (clipBehavior == Clip.none) { - _clipRectLayer.layer = null; - super.paint(context, offset); - } else { - // We have overflow and the clipBehavior isn't none. Clip it. - _clipRectLayer.layer = context.pushClipRect( - needsCompositing, - offset, - Offset.zero & size, - super.paint, - clipBehavior: clipBehavior, - oldLayer: _clipRectLayer.layer, - ); - } + // We have overflow and the clipBehavior isn't none. Clip it. + _clipRectLayer.layer = context.pushClipRect( + needsCompositing, + offset, + Offset.zero & size, + super.paint, + clipBehavior: clipBehavior, + oldLayer: _clipRectLayer.layer, + ); // Display the overflow indicator. assert(() { diff --git a/packages/flutter/test/material/chip_filter_test.dart b/packages/flutter/test/material/chip_filter_test.dart index 3405f3b6fc262..773aadae18770 100644 --- a/packages/flutter/test/material/chip_filter_test.dart +++ b/packages/flutter/test/material/chip_filter_test.dart @@ -64,6 +64,8 @@ void expectCheckmarkColor(Finder finder, Color color) { expect( finder, paints + // Physical model path + ..path() // The first path that is painted is the selection overlay. We do not care // how it is painted but it has to be added it to this pattern so that the // check mark can be checked next. diff --git a/packages/flutter/test/material/chip_input_test.dart b/packages/flutter/test/material/chip_input_test.dart index 84929d3eaeb9e..6c6ca97bf0bb2 100644 --- a/packages/flutter/test/material/chip_input_test.dart +++ b/packages/flutter/test/material/chip_input_test.dart @@ -64,6 +64,8 @@ void expectCheckmarkColor(Finder finder, Color color) { expect( finder, paints + // Physical model layer path + ..path() // The first path that is painted is the selection overlay. We do not care // how it is painted but it has to be added it to this pattern so that the // check mark can be checked next. diff --git a/packages/flutter/test/material/outlined_button_test.dart b/packages/flutter/test/material/outlined_button_test.dart index ecbf00c3cd514..d899247065c99 100644 --- a/packages/flutter/test/material/outlined_button_test.dart +++ b/packages/flutter/test/material/outlined_button_test.dart @@ -852,10 +852,6 @@ void main() { ), ); } - - // 116 = 16 + 'button'.length * 14 + 16, horizontal padding = 16 - const Rect clipRect = Rect.fromLTRB(0.0, 0.0, 116.0, 36.0); - final Path clipPath = Path()..addRect(clipRect); final Finder outlinedButton = find.byType(OutlinedButton); BorderSide getBorderSide() { @@ -873,12 +869,6 @@ void main() { // Expect that the button is disabled and painted with the disabled border color. expect(tester.widget(outlinedButton).enabled, false); expect(getBorderSide(), disabledBorderSide); - _checkPhysicalLayer( - tester.element(outlinedButton), - fillColor, - clipPath: clipPath, - clipRect: clipRect, - ); // Pump a new button with a no-op onPressed callback to make it enabled. await tester.pumpWidget( @@ -896,23 +886,11 @@ void main() { // Wait for the border's color to change to pressed await tester.pump(const Duration(milliseconds: 200)); expect(getBorderSide(), pressedBorderSide); - _checkPhysicalLayer( - tester.element(outlinedButton), - fillColor, - clipPath: clipPath, - clipRect: clipRect, - ); // Tap gesture completes, button returns to its initial configuration. await gesture.up(); await tester.pumpAndSettle(); expect(getBorderSide(), enabledBorderSide); - _checkPhysicalLayer( - tester.element(outlinedButton), - fillColor, - clipPath: clipPath, - clipRect: clipRect, - ); }); testWidgets('OutlinedButton has no clip by default', (WidgetTester tester) async { @@ -1748,29 +1726,6 @@ void main() { }); } -PhysicalModelLayer _findPhysicalLayer(Element element) { - expect(element, isNotNull); - RenderObject? object = element.renderObject; - while (object != null && object is! RenderRepaintBoundary && object is! RenderView) { - object = object.parent as RenderObject?; - } - expect(object!.debugLayer, isNotNull); - expect(object.debugLayer!.firstChild, isA()); - final PhysicalModelLayer layer = object.debugLayer!.firstChild! as PhysicalModelLayer; - final Layer child = layer.firstChild!; - return child is PhysicalModelLayer ? child : layer; -} - -void _checkPhysicalLayer(Element element, Color expectedColor, { Path? clipPath, Rect? clipRect }) { - final PhysicalModelLayer expectedLayer = _findPhysicalLayer(element); - expect(expectedLayer.elevation, 0.0); - expect(expectedLayer.color, expectedColor); - if (clipPath != null) { - expect(clipRect, isNotNull); - expect(expectedLayer.clipPath, coversSameAreaAs(clipPath, areaToCompare: clipRect!.inflate(10.0))); - } -} - TextStyle _iconStyle(WidgetTester tester, IconData icon) { final RichText iconRichText = tester.widget( find.descendant(of: find.byIcon(icon), matching: find.byType(RichText)), diff --git a/packages/flutter/test/material/range_slider_test.dart b/packages/flutter/test/material/range_slider_test.dart index 6e8595bf0d87e..c3d0b6989b214 100644 --- a/packages/flutter/test/material/range_slider_test.dart +++ b/packages/flutter/test/material/range_slider_test.dart @@ -1360,7 +1360,7 @@ void main() { ); // Represents the Raised Button and Range Slider. - expect(valueIndicatorBox, paintsExactlyCountTimes(#drawPath, 3)); + expect(valueIndicatorBox, paintsExactlyCountTimes(#drawPath, 4)); expect(valueIndicatorBox, paintsExactlyCountTimes(#drawParagraph, 3)); await tester.tap(find.text('Next')); @@ -1379,7 +1379,7 @@ void main() { ); // Represents the raised button with inner page text. - expect(valueIndicatorBox, paintsExactlyCountTimes(#drawPath, 1)); + expect(valueIndicatorBox, paintsExactlyCountTimes(#drawPath, 2)); expect(valueIndicatorBox, paintsExactlyCountTimes(#drawParagraph, 1)); // Don't stop holding the value indicator. diff --git a/packages/flutter/test/material/slider_test.dart b/packages/flutter/test/material/slider_test.dart index 543831055c32f..c2c8b6d4a5af0 100644 --- a/packages/flutter/test/material/slider_test.dart +++ b/packages/flutter/test/material/slider_test.dart @@ -784,6 +784,7 @@ void main() { expect( valueIndicatorBox, paints + ..rrect(color: const Color(0xfffafafa)) ..rrect(color: customColor1) // active track ..rrect(color: customColor2) // inactive track ..circle(color: customColor1.withOpacity(0.12)) // overlay @@ -2415,7 +2416,7 @@ void main() { ..paragraph(), ); - expect(valueIndicatorBox, paintsExactlyCountTimes(#drawPath, 2)); + expect(valueIndicatorBox, paintsExactlyCountTimes(#drawPath, 3)); expect(valueIndicatorBox, paintsExactlyCountTimes(#drawParagraph, 2)); await tester.tap(find.text('Next')); @@ -2432,7 +2433,7 @@ void main() { ); // Represents the ElevatedButton with inner Text, inner page. - expect(valueIndicatorBox, paintsExactlyCountTimes(#drawPath, 1)); + expect(valueIndicatorBox, paintsExactlyCountTimes(#drawPath, 2)); expect(valueIndicatorBox, paintsExactlyCountTimes(#drawParagraph, 1)); // Don't stop holding the value indicator. diff --git a/packages/flutter/test/material/slider_theme_test.dart b/packages/flutter/test/material/slider_theme_test.dart index 93e607ca6e10d..e890fdd064dc2 100644 --- a/packages/flutter/test/material/slider_theme_test.dart +++ b/packages/flutter/test/material/slider_theme_test.dart @@ -1134,6 +1134,8 @@ void main() { expect( valueIndicatorBox, paints + // physical model + ..rrect() ..rrect(rrect: RRect.fromLTRBAndCorners( 24.0, 298.0, 24.0, 302.0, topLeft: const Radius.circular(2.0), diff --git a/packages/flutter/test/material/toggle_buttons_test.dart b/packages/flutter/test/material/toggle_buttons_test.dart index 7937117d917a9..55ddfa378f67d 100644 --- a/packages/flutter/test/material/toggle_buttons_test.dart +++ b/packages/flutter/test/material/toggle_buttons_test.dart @@ -1015,6 +1015,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: theme.colorScheme.onSurface.withOpacity(0.12), @@ -1042,6 +1044,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: theme.colorScheme.onSurface.withOpacity(0.12), @@ -1068,6 +1072,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: theme.colorScheme.onSurface.withOpacity(0.12), @@ -1108,6 +1114,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: borderColor, @@ -1137,6 +1145,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: selectedBorderColor, @@ -1165,6 +1175,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: disabledBorderColor, @@ -1432,6 +1444,8 @@ void main() { expect( toggleButtonRenderObject[0], paints + // physical model + ..path() // leading side, top and bottom - enabled ..path( style: PaintingStyle.stroke, @@ -1445,6 +1459,8 @@ void main() { expect( toggleButtonRenderObject[1], paints + // physical model + ..path() // leading side - selected ..path( style: PaintingStyle.stroke, @@ -1464,6 +1480,8 @@ void main() { expect( toggleButtonRenderObject[2], paints + // physical model + ..path() // leading side - selected, since previous button is selected ..path( style: PaintingStyle.stroke, @@ -1515,6 +1533,8 @@ void main() { expect( toggleButtonRenderObject[0], paints + // physical model + ..path() // left side, top and right - enabled. ..path( style: PaintingStyle.stroke, @@ -1528,6 +1548,8 @@ void main() { expect( toggleButtonRenderObject[1], paints + // physical model + ..path() // top side - selected. ..path( style: PaintingStyle.stroke, @@ -1547,6 +1569,8 @@ void main() { expect( toggleButtonRenderObject[2], paints + // physical model + ..path() // top side - selected, since previous button is selected. ..path( style: PaintingStyle.stroke, @@ -1712,6 +1736,8 @@ void main() { expect( toggleButtonRenderObject[0], paints + // physical model paints + ..path() // left side, top and right - enabled. ..path( style: PaintingStyle.stroke, diff --git a/packages/flutter/test/material/toggle_buttons_theme_test.dart b/packages/flutter/test/material/toggle_buttons_theme_test.dart index cd8246ec5ddf7..5d26f85065166 100644 --- a/packages/flutter/test/material/toggle_buttons_theme_test.dart +++ b/packages/flutter/test/material/toggle_buttons_theme_test.dart @@ -543,6 +543,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model layer paint + ..path() ..path( style: PaintingStyle.stroke, color: borderColor, @@ -576,6 +578,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model layer paint + ..path() ..path( style: PaintingStyle.stroke, color: selectedBorderColor, @@ -608,6 +612,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model layer paint + ..path() ..path( style: PaintingStyle.stroke, color: disabledBorderColor, diff --git a/packages/flutter/test/rendering/debug_test.dart b/packages/flutter/test/rendering/debug_test.dart index b31703e6c5e0f..74d80e4436cad 100644 --- a/packages/flutter/test/rendering/debug_test.dart +++ b/packages/flutter/test/rendering/debug_test.dart @@ -222,7 +222,7 @@ void main() { ); final RenderOpacity root = RenderOpacity( opacity: .5, - child: blackBox, + child: RenderRepaintBoundary(child: blackBox), ); layout(root, phase: EnginePhase.compositingBits); diff --git a/packages/flutter/test/rendering/proxy_box_test.dart b/packages/flutter/test/rendering/proxy_box_test.dart index 70dfff9df4cff..4957f2f0c63ba 100644 --- a/packages/flutter/test/rendering/proxy_box_test.dart +++ b/packages/flutter/test/rendering/proxy_box_test.dart @@ -5,9 +5,8 @@ import 'dart:typed_data'; import 'dart:ui' as ui show Gradient, Image, ImageFilter; -import 'package:flutter/animation.dart'; import 'package:flutter/foundation.dart'; -import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -15,7 +14,6 @@ import 'rendering_tester.dart'; void main() { TestRenderingFlutterBinding.ensureInitialized(); - test('RenderFittedBox handles applying paint transform and hit-testing with empty size', () { final RenderFittedBox fittedBox = RenderFittedBox( child: RenderCustomPaint( @@ -61,47 +59,20 @@ void main() { expect(painted, equals(false)); }); - test('RenderPhysicalModel compositing on Fuchsia', () { - debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia; - + test('RenderPhysicalModel compositing', () { final RenderPhysicalModel root = RenderPhysicalModel(color: const Color(0xffff00ff)); layout(root, phase: EnginePhase.composite); - expect(root.needsCompositing, isTrue); + expect(root.needsCompositing, isFalse); // On Fuchsia, the system compositor is responsible for drawing shadows // for physical model layers with non-zero elevation. root.elevation = 1.0; pumpFrame(phase: EnginePhase.composite); - expect(root.needsCompositing, isTrue); + expect(root.needsCompositing, isFalse); root.elevation = 0.0; pumpFrame(phase: EnginePhase.composite); - expect(root.needsCompositing, isTrue); - - debugDefaultTargetPlatformOverride = null; - }); - - test('RenderPhysicalModel compositing on non-Fuchsia', () { - for (final TargetPlatform platform in TargetPlatform.values) { - if (platform == TargetPlatform.fuchsia) { - continue; - } - debugDefaultTargetPlatformOverride = platform; - - final RenderPhysicalModel root = RenderPhysicalModel(color: const Color(0xffff00ff)); - layout(root, phase: EnginePhase.composite); - expect(root.needsCompositing, isTrue); - - // Flutter now composites physical shapes on all platforms. - root.elevation = 1.0; - pumpFrame(phase: EnginePhase.composite); - expect(root.needsCompositing, isTrue); - - root.elevation = 0.0; - pumpFrame(phase: EnginePhase.composite); - expect(root.needsCompositing, isTrue); - } - debugDefaultTargetPlatformOverride = null; + expect(root.needsCompositing, isFalse); }); test('RenderSemanticsGestureHandler adds/removes correct semantic actions', () { @@ -128,9 +99,6 @@ void main() { group('RenderPhysicalShape', () { test('shape change triggers repaint', () { for (final TargetPlatform platform in TargetPlatform.values) { - if (platform == TargetPlatform.fuchsia) { - continue; - } debugDefaultTargetPlatformOverride = platform; final RenderPhysicalShape root = RenderPhysicalShape( @@ -151,27 +119,24 @@ void main() { debugDefaultTargetPlatformOverride = null; }); - test('compositing on non-Fuchsia', () { + test('compositing', () { for (final TargetPlatform platform in TargetPlatform.values) { - if (platform == TargetPlatform.fuchsia) { - continue; - } debugDefaultTargetPlatformOverride = platform; final RenderPhysicalShape root = RenderPhysicalShape( color: const Color(0xffff00ff), clipper: const ShapeBorderClipper(shape: CircleBorder()), ); layout(root, phase: EnginePhase.composite); - expect(root.needsCompositing, isTrue); + expect(root.needsCompositing, isFalse); // On non-Fuchsia platforms, we composite physical shape layers root.elevation = 1.0; pumpFrame(phase: EnginePhase.composite); - expect(root.needsCompositing, isTrue); + expect(root.needsCompositing, isFalse); root.elevation = 0.0; pumpFrame(phase: EnginePhase.composite); - expect(root.needsCompositing, isTrue); + expect(root.needsCompositing, isFalse); } debugDefaultTargetPlatformOverride = null; }); @@ -287,7 +252,9 @@ void main() { test('RenderOpacity reuses its layer', () { _testLayerReuse(RenderOpacity( opacity: 0.5, // must not be 0 or 1.0. Otherwise, it won't create a layer - child: RenderSizedBox(const Size(1.0, 1.0)), // size doesn't matter + child: RenderRepaintBoundary( + child: RenderSizedBox(const Size(1.0, 1.0)), + ), // size doesn't matter )); }); @@ -353,9 +320,7 @@ void main() { test('RenderClipRect reuses its layer', () { _testLayerReuse(RenderClipRect( clipper: _TestRectClipper(), - // Inject opacity under the clip to force compositing. - child: RenderOpacity( - opacity: 0.5, + child: RenderRepaintBoundary( child: RenderSizedBox(const Size(1.0, 1.0)), ), // size doesn't matter )); @@ -364,9 +329,7 @@ void main() { test('RenderClipRRect reuses its layer', () { _testLayerReuse(RenderClipRRect( clipper: _TestRRectClipper(), - // Inject opacity under the clip to force compositing. - child: RenderOpacity( - opacity: 0.5, + child: RenderRepaintBoundary( child: RenderSizedBox(const Size(1.0, 1.0)), ), // size doesn't matter )); @@ -375,9 +338,7 @@ void main() { test('RenderClipOval reuses its layer', () { _testLayerReuse(RenderClipOval( clipper: _TestRectClipper(), - // Inject opacity under the clip to force compositing. - child: RenderOpacity( - opacity: 0.5, + child: RenderRepaintBoundary( child: RenderSizedBox(const Size(1.0, 1.0)), ), // size doesn't matter )); @@ -386,32 +347,28 @@ void main() { test('RenderClipPath reuses its layer', () { _testLayerReuse(RenderClipPath( clipper: _TestPathClipper(), - // Inject opacity under the clip to force compositing. - child: RenderOpacity( - opacity: 0.5, + child: RenderRepaintBoundary( child: RenderSizedBox(const Size(1.0, 1.0)), ), // size doesn't matter )); }); test('RenderPhysicalModel reuses its layer', () { - _testLayerReuse(RenderPhysicalModel( + _testLayerReuse(RenderPhysicalModel( + clipBehavior: Clip.hardEdge, color: const Color.fromRGBO(0, 0, 0, 1.0), - // Inject opacity under the clip to force compositing. - child: RenderOpacity( - opacity: 0.5, + child: RenderRepaintBoundary( child: RenderSizedBox(const Size(1.0, 1.0)), ), // size doesn't matter )); }); test('RenderPhysicalShape reuses its layer', () { - _testLayerReuse(RenderPhysicalShape( + _testLayerReuse(RenderPhysicalShape( clipper: _TestPathClipper(), + clipBehavior: Clip.hardEdge, color: const Color.fromRGBO(0, 0, 0, 1.0), - // Inject opacity under the clip to force compositing. - child: RenderOpacity( - opacity: 0.5, + child: RenderRepaintBoundary( child: RenderSizedBox(const Size(1.0, 1.0)), ), // size doesn't matter )); @@ -421,9 +378,7 @@ void main() { _testLayerReuse(RenderTransform( // Use a 3D transform to force compositing. transform: Matrix4.rotationX(0.1), - // Inject opacity under the clip to force compositing. - child: RenderOpacity( - opacity: 0.5, + child: RenderRepaintBoundary( child: RenderSizedBox(const Size(1.0, 1.0)), ), // size doesn't matter )); @@ -434,8 +389,7 @@ void main() { fit: BoxFit.cover, clipBehavior: Clip.hardEdge, // Inject opacity under the clip to force compositing. - child: RenderOpacity( - opacity: 0.5, + child: RenderRepaintBoundary( child: RenderSizedBox(const Size(100.0, 200.0)), ), // size doesn't matter )); @@ -445,8 +399,7 @@ void main() { _testLayerReuse(RenderFittedBox( fit: BoxFit.fill, // Inject opacity under the clip to force compositing. - child: RenderOpacity( - opacity: 0.5, + child: RenderRepaintBoundary( child: RenderSizedBox(const Size(1, 1)), ), // size doesn't matter )); @@ -768,7 +721,7 @@ void _testLayerReuse(RenderBox renderObject) { expect(L, isNot(Layer)); expect(renderObject.debugLayer, null); layout(renderObject, phase: EnginePhase.paint, constraints: BoxConstraints.tight(const Size(10, 10))); - final Layer layer = renderObject.debugLayer!; + final Layer? layer = renderObject.debugLayer; expect(layer, isA()); expect(layer, isNotNull); diff --git a/packages/flutter/test/widgets/mouse_region_test.dart b/packages/flutter/test/widgets/mouse_region_test.dart index 7da940729dfaa..929fe1b0e9ff2 100644 --- a/packages/flutter/test/widgets/mouse_region_test.dart +++ b/packages/flutter/test/widgets/mouse_region_test.dart @@ -793,7 +793,7 @@ void main() { await tester.pumpWidget( MouseRegion( onEnter: (PointerEnterEvent _) {}, - child: const Opacity(opacity: 0.5, child: Placeholder()), + child: const RepaintBoundary(child: Placeholder()), ), ); diff --git a/packages/flutter/test/widgets/nested_scroll_view_test.dart b/packages/flutter/test/widgets/nested_scroll_view_test.dart index 62a257e38d59a..b29488d9c124b 100644 --- a/packages/flutter/test/widgets/nested_scroll_view_test.dart +++ b/packages/flutter/test/widgets/nested_scroll_view_test.dart @@ -591,35 +591,28 @@ void main() { )), ); - PhysicalModelLayer? _dfsFindPhysicalLayer(ContainerLayer layer) { - expect(layer, isNotNull); - Layer? child = layer.firstChild; - while (child != null) { - if (child is PhysicalModelLayer) { - return child; - } - if (child is ContainerLayer) { - Layer? innerChild = child.firstChild; - while (innerChild != null) { - if (innerChild is ContainerLayer) { - final PhysicalModelLayer? candidate = _dfsFindPhysicalLayer(innerChild); - if (candidate != null) { - return candidate; - } - } - innerChild = innerChild.nextSibling; - } + Object? _dfsFindPhysicalLayer(RenderObject object) { + expect(object, isNotNull); + if (object is RenderPhysicalModel || object is RenderPhysicalShape) { + return object; + } + final List children = []; + object.visitChildren(children.add); + for (final RenderObject child in children) { + final Object? result = _dfsFindPhysicalLayer(child); + if (result != null) { + return result; } - child = child.nextSibling; } return null; } - final ContainerLayer nestedScrollViewLayer = find.byType(NestedScrollView).evaluate().first.renderObject!.debugLayer!; + final RenderObject nestedScrollViewLayer = find.byType(NestedScrollView).evaluate().first.renderObject!; void _checkPhysicalLayer({required double elevation}) { - final PhysicalModelLayer? layer = _dfsFindPhysicalLayer(nestedScrollViewLayer); - expect(layer, isNotNull); - expect(layer!.elevation, equals(elevation)); + final dynamic physicalModel = _dfsFindPhysicalLayer(nestedScrollViewLayer); + expect(physicalModel, isNotNull); + // ignore: avoid_dynamic_calls + expect(physicalModel.elevation, equals(elevation)); } int expectedBuildCount = 0; diff --git a/packages/flutter/test/widgets/physical_model_test.dart b/packages/flutter/test/widgets/physical_model_test.dart index ccd8698b1c539..4591603ee31d2 100644 --- a/packages/flutter/test/widgets/physical_model_test.dart +++ b/packages/flutter/test/widgets/physical_model_test.dart @@ -43,30 +43,6 @@ void main() { expect(renderPhysicalShape.clipBehavior, equals(Clip.antiAlias)); }); - testWidgets('PhysicalModel - creates a physical model layer when it needs compositing', (WidgetTester tester) async { - debugDisableShadows = false; - await tester.pumpWidget( - MaterialApp( - home: PhysicalModel( - color: Colors.grey, - shadowColor: Colors.red, - elevation: 1.0, - child: Material(child: TextField(controller: TextEditingController())), - ), - ), - ); - await tester.pump(); - - final RenderPhysicalModel renderPhysicalModel = tester.allRenderObjects.whereType().first; - expect(renderPhysicalModel.needsCompositing, true); - - final PhysicalModelLayer physicalModelLayer = tester.layers.whereType().first; - expect(physicalModelLayer.shadowColor, Colors.red); - expect(physicalModelLayer.color, Colors.grey); - expect(physicalModelLayer.elevation, 1.0); - debugDisableShadows = true; - }); - testWidgets('PhysicalModel - clips when overflows and elevation is 0', (WidgetTester tester) async { const Key key = Key('test'); await tester.pumpWidget( diff --git a/packages/flutter/test/widgets/transform_test.dart b/packages/flutter/test/widgets/transform_test.dart index 621a4ee77f3ce..a21056e86a86b 100644 --- a/packages/flutter/test/widgets/transform_test.dart +++ b/packages/flutter/test/widgets/transform_test.dart @@ -240,8 +240,7 @@ void main() { child: ClipRect( child: Transform( transform: Matrix4.diagonal3Values(0.5, 0.5, 1.0), - child: Opacity( - opacity: 0.9, + child: RepaintBoundary( child: Container( color: const Color(0xFF00FF00), ), @@ -265,7 +264,7 @@ void main() { await tester.pumpWidget( Transform.rotate( angle: math.pi / 2.0, - child: Opacity(opacity: 0.5, child: Container()), + child: RepaintBoundary(child: Container()), ), ); @@ -305,7 +304,7 @@ void main() { await tester.pumpWidget( Transform.translate( offset: const Offset(100.0, 50.0), - child: Opacity(opacity: 0.5, child: Container()), + child: RepaintBoundary(child: Container()), ), ); @@ -320,7 +319,7 @@ void main() { await tester.pumpWidget( Transform.scale( scale: 2.0, - child: Opacity(opacity: 0.5, child: Container()), + child: RepaintBoundary(child: Container()), ), ); From 936623e174e43fd35467627270d183ba9553a9f3 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 19:54:07 -0400 Subject: [PATCH 100/141] Roll Engine from 07584c64bb7b to 46b0889d13ce (1 revision) (#102606) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 62e6786a530c2..c74022c59c868 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -07584c64bb7ba8d9e79214c3667cdb16cfa67923 +46b0889d13ce0449b1add97e69aeddf0636838ae From c46d4c03cc331695f46d9b909743925f8787c721 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Tue, 26 Apr 2022 17:34:06 -0700 Subject: [PATCH 101/141] Revert "[framework] Reland: use ImageFilter for zoom page transition " (#102611) --- .../src/material/page_transitions_theme.dart | 12 +--- .../material/page_transitions_theme_test.dart | 58 ------------------- 2 files changed, 2 insertions(+), 68 deletions(-) diff --git a/packages/flutter/lib/src/material/page_transitions_theme.dart b/packages/flutter/lib/src/material/page_transitions_theme.dart index 60e54894d3bdf..be8e5bb07d302 100644 --- a/packages/flutter/lib/src/material/page_transitions_theme.dart +++ b/packages/flutter/lib/src/material/page_transitions_theme.dart @@ -318,11 +318,7 @@ class _ZoomEnterTransition extends StatelessWidget { }, child: FadeTransition( opacity: fadeTransition, - child: ScaleTransition( - scale: scaleTransition, - filterQuality: FilterQuality.low, - child: child, - ), + child: ScaleTransition(scale: scaleTransition, child: child), ), ); } @@ -367,11 +363,7 @@ class _ZoomExitTransition extends StatelessWidget { return FadeTransition( opacity: fadeTransition, - child: ScaleTransition( - scale: scaleTransition, - filterQuality: FilterQuality.low, - child: child, - ), + child: ScaleTransition(scale: scaleTransition, child: child), ); } } diff --git a/packages/flutter/test/material/page_transitions_theme_test.dart b/packages/flutter/test/material/page_transitions_theme_test.dart index 4899c835aa799..749588c6f5155 100644 --- a/packages/flutter/test/material/page_transitions_theme_test.dart +++ b/packages/flutter/test/material/page_transitions_theme_test.dart @@ -5,7 +5,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { @@ -221,61 +220,4 @@ void main() { await tester.pumpAndSettle(); expect(builtCount, 1); }, variant: TargetPlatformVariant.only(TargetPlatform.android)); - - testWidgets('_ZoomPageTransition uses a FilterQuality while animating', (WidgetTester tester) async { - final Map routes = { - '/': (BuildContext context) => Material( - child: TextButton( - child: const Text('push'), - onPressed: () { Navigator.of(context).pushNamed('/b'); }, - ), - ), - '/b': (BuildContext context) => StatefulBuilder( - builder: (BuildContext context, StateSetter setState) { - return TextButton( - child: const Text('pop'), - onPressed: () { Navigator.pop(context); }, - ); - }, - ), - }; - - await tester.pumpWidget( - MaterialApp( - theme: ThemeData( - pageTransitionsTheme: const PageTransitionsTheme( - builders: { - TargetPlatform.android: ZoomPageTransitionsBuilder(), // creates a _ZoomPageTransition - }, - ), - ), - routes: routes, - ), - ); - - expect(tester.layers, isNot(contains(isA()))); - - await tester.tap(find.text('push')); - await tester.pump(); - await tester.pump(); - - expect(tester.layers, contains(isA())); - expect(tester.layers.whereType(), hasLength(1)); - - await tester.pumpAndSettle(); - - expect(tester.layers, isNot(contains(isA()))); - - await tester.tap(find.text('pop')); - await tester.pump(); - await tester.pump(); - - expect(tester.layers, contains(isA())); - // exiting requires two different zooms. - expect(tester.layers.whereType(), hasLength(2)); - - await tester.pumpAndSettle(); - - expect(tester.layers, isNot(contains(isA()))); - }, variant: TargetPlatformVariant.only(TargetPlatform.android)); } From e5741f8d53df4683159b78304ab86b82fef1557a Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 20:59:08 -0400 Subject: [PATCH 102/141] Roll Engine from 46b0889d13ce to 6ac401970df1 (3 revisions) (#102612) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index c74022c59c868..3c17119d02dc2 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -46b0889d13ce0449b1add97e69aeddf0636838ae +6ac401970df19fb1a1d11f407b38314993bdbb9b From 1bb9eed4d0ecaf62cfe38e9760f71324b090aa02 Mon Sep 17 00:00:00 2001 From: keyonghan <54558023+keyonghan@users.noreply.github.com> Date: Tue, 26 Apr 2022 18:09:04 -0700 Subject: [PATCH 103/141] Update open sdk version to be version `version:11` (#102610) --- .ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci.yaml b/.ci.yaml index 33a869f0de3ee..8d1b3c05ba48b 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -122,7 +122,7 @@ platform_properties: dependencies: >- [ {"dependency": "android_sdk", "version": "version:31v8"}, - {"dependency": "open_jdk", "version": "11"} + {"dependency": "open_jdk", "version": "version:11"} ] os: Mac-12 cpu: arm64 From 9fbdd4c8d50bbf88486379e2eb236e55a8307c6a Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 26 Apr 2022 23:09:06 -0400 Subject: [PATCH 104/141] Roll Engine from 6ac401970df1 to 24471f3cbb33 (3 revisions) (#102618) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 3c17119d02dc2..689fad4c71bfa 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -6ac401970df19fb1a1d11f407b38314993bdbb9b +24471f3cbb334d02f9ef91c11aba92a5f1198b03 From d6ea2c67d72e9b86f8b3165e140205b493521964 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 00:24:06 -0400 Subject: [PATCH 105/141] Roll Engine from 24471f3cbb33 to 5d844aa30fc6 (1 revision) (#102619) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 689fad4c71bfa..bcdd44c6cd86b 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -24471f3cbb334d02f9ef91c11aba92a5f1198b03 +5d844aa30fc66d299a53ea12cec93b436b5725ea From 0b80f08cf05844851bf825ebe600cc35a55949fd Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 01:39:07 -0400 Subject: [PATCH 106/141] Roll Engine from 5d844aa30fc6 to fcc15947754b (1 revision) (#102622) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index bcdd44c6cd86b..88810bbaa4a9f 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -5d844aa30fc66d299a53ea12cec93b436b5725ea +fcc15947754bb12321a260908ab8bf5bc445a5f9 From 07f1c2047465a9bea0ba04bd925a5c4864d41a8a Mon Sep 17 00:00:00 2001 From: Alexandre Ardhuin Date: Wed, 27 Apr 2022 09:15:35 +0200 Subject: [PATCH 107/141] add missing trailing commas in list/set/map literals (#102585) --- .../flutter_test/flutter_gold_test.dart | 6 +- .../lib/src/animated_complex_opacity.dart | 2 +- .../lib/src/opacity_peephole.dart | 2 +- .../lib/src/picture_cache.dart | 4 +- .../lib/src/post_backdrop_filter.dart | 2 +- .../macrobenchmarks/lib/src/stack_size.dart | 2 +- .../lib/src/web/bench_text_layout.dart | 2 +- .../macrobenchmarks/test/frame_policy.dart | 8 +- ...opacity_peephole_col_of_rows_perf_e2e.dart | 2 +- ...eephole_fade_transition_text_perf_e2e.dart | 2 +- ...ity_peephole_grid_of_opacity_perf_e2e.dart | 2 +- .../opacity_peephole_one_rect_perf_e2e.dart | 2 +- ...ity_peephole_opacity_of_grid_perf_e2e.dart | 2 +- .../standard_message_codec_bench.dart | 2 +- .../standard_method_codec_bench.dart | 2 +- .../multiple_flutters/module/lib/main.dart | 4 +- .../stocks/lib/i18n/stock_strings.dart | 2 +- dev/bots/analyze.dart | 4 +- dev/bots/service_worker_test.dart | 6 +- dev/bots/test.dart | 4 +- dev/bots/test/prepare_package_test.dart | 4 +- dev/conductor/core/lib/src/repository.dart | 4 +- dev/conductor/core/lib/src/state.dart | 6 +- dev/conductor/core/test/next_test.dart | 2 +- .../test/customer_test_test.dart | 11 +- .../build_ios_framework_module_test.dart | 4 +- .../flutter_engine_group_performance.dart | 4 +- .../bin/tasks/gradle_java8_compile_test.dart | 2 +- .../tasks/gradle_plugin_light_apk_test.dart | 10 +- .../module_custom_host_app_name_test.dart | 2 +- dev/devicelab/bin/tasks/module_test.dart | 2 +- dev/devicelab/bin/tasks/module_test_ios.dart | 2 +- dev/devicelab/bin/tasks/plugin_lint_mac.dart | 10 +- dev/devicelab/lib/framework/ab.dart | 6 +- dev/devicelab/lib/tasks/gallery.dart | 2 +- .../tasks/platform_channels_benchmarks.dart | 2 +- dev/devicelab/test/metrics_center_test.dart | 2 +- .../flutterapp/lib/main.dart | 2 +- .../ios_platform_view_tests/lib/main.dart | 2 +- dev/tools/update_icons.dart | 2 +- dev/tools/vitool/test/vitool_test.dart | 2 +- .../test/image_cache_tracing_test.dart | 10 +- .../dialog/cupertino_action_sheet.0.dart | 2 +- .../dialog/cupertino_alert_dialog.0.dart | 2 +- .../nav_bar/cupertino_sliver_nav_bar.0.dart | 2 +- .../cupertino_sliver_refresh_control.0.dart | 2 +- .../api/lib/material/app_bar/app_bar.1.dart | 2 +- .../show_modal_bottom_sheet.0.dart | 2 +- .../material/icon_button/icon_button.0.dart | 2 +- .../lib/material/list_tile/list_tile.5.dart | 2 +- .../navigation_bar/navigation_bar.0.dart | 2 +- .../navigation_rail.extended_animation.0.dart | 2 +- .../platform_menu_bar.0.dart | 4 +- .../lib/material/popupmenu/popupmenu.0.dart | 2 +- .../lib/material/scaffold/scaffold.of.0.dart | 2 +- .../lib/material/scaffold/scaffold.of.1.dart | 2 +- .../scaffold_state.show_bottom_sheet.0.dart | 9 +- ...e.font_feature_historical_ligatures.0.dart | 2 +- .../lib/widgets/async/future_builder.0.dart | 6 +- .../lib/widgets/async/stream_builder.0.dart | 8 +- .../widgets/autofill/autofill_group.0.dart | 6 +- .../interactive_viewer.builder.0.dart | 2 +- .../nested_scroll_view.2.dart | 2 +- .../widgets/page_storage/page_storage.0.dart | 2 +- .../lib/widgets/page_view/page_view.0.dart | 2 +- .../decorated_box_transition.0.dart | 2 +- .../transitions/sliver_fade_transition.0.dart | 2 +- .../flutter/lib/src/material/theme_data.dart | 2 +- packages/flutter/test/material/app_test.dart | 42 ++--- .../flutter/test/material/dropdown_test.dart | 4 +- .../test/material/popup_menu_test.dart | 78 +++++---- .../test/material/scrollbar_theme_test.dart | 2 +- .../test/material/slider_theme_test.dart | 2 +- .../test/material/theme_data_test.dart | 2 +- .../flutter/test/material/tooltip_test.dart | 2 +- .../flutter/test/material/will_pop_test.dart | 2 +- .../painting/_network_image_test_web.dart | 6 +- .../test/scheduler/scheduler_test.dart | 20 ++- .../test/services/system_chrome_test.dart | 6 +- .../flutter/test/widgets/actions_test.dart | 4 +- .../test/widgets/animated_size_test.dart | 6 +- .../draggable_scrollable_sheet_test.dart | 2 +- .../layout_builder_and_parent_data_test.dart | 10 +- .../overscroll_stretch_indicator_test.dart | 64 +++---- .../test/widgets/platform_menu_bar_test.dart | 12 +- .../test/widgets/scroll_behavior_test.dart | 42 +++-- .../flutter/test/widgets/scrollable_test.dart | 12 +- .../test/widgets/selectable_text_test.dart | 4 +- .../flutter/test/widgets/transform_test.dart | 16 +- .../test/widgets/transitions_test.dart | 12 +- .../flutter_driver/lib/src/common/wait.dart | 2 +- .../test/src/real_tests/extension_test.dart | 5 +- .../src/real_tests/flutter_driver_test.dart | 6 +- .../src/real_tests/timeline_summary_test.dart | 16 +- .../test/src/real_tests/wait_test.dart | 2 +- .../test/flutter_goldens_test.dart | 41 ++--- .../flutter_goldens/test/json_templates.dart | 12 +- packages/flutter_test/lib/src/controller.dart | 4 +- packages/flutter_test/lib/src/matchers.dart | 2 +- .../lib/src/test_async_utils.dart | 2 +- .../flutter_test/lib/src/widget_tester.dart | 4 +- .../flutter_test_variable_is_false_test.dart | 2 +- packages/flutter_test/test/goldens_test.dart | 33 ++-- .../test/live_widget_controller_test.dart | 8 +- packages/flutter_test/test/matchers_test.dart | 38 ++-- .../flutter_test/test/widget_tester_test.dart | 8 +- packages/flutter_tools/bin/tool_backend.dart | 2 +- packages/flutter_tools/bin/xcode_backend.dart | 2 +- .../lib/src/android/android_device.dart | 9 +- .../lib/src/android/android_emulator.dart | 2 +- .../flutter_tools/lib/src/android/gradle.dart | 8 +- .../lib/src/base/analyze_size.dart | 2 +- .../flutter_tools/lib/src/base/build.dart | 2 +- .../flutter_tools/lib/src/base/logger.dart | 2 +- .../lib/src/build_system/hash.dart | 4 +- .../lib/src/build_system/targets/assets.dart | 2 +- .../lib/src/build_system/targets/common.dart | 2 +- .../lib/src/build_system/targets/ios.dart | 4 +- .../build_system/targets/localizations.dart | 4 +- .../lib/src/build_system/targets/macos.dart | 2 +- .../lib/src/commands/assemble.dart | 8 +- .../lib/src/commands/build_ios_framework.dart | 6 +- .../lib/src/commands/create.dart | 2 +- .../lib/src/commands/custom_devices.dart | 16 +- .../lib/src/commands/daemon.dart | 2 +- .../lib/src/commands/format.dart | 2 +- .../lib/src/commands/precache.dart | 4 +- .../flutter_tools/lib/src/commands/test.dart | 2 +- .../lib/src/custom_devices/custom_device.dart | 10 +- .../custom_devices/custom_device_config.dart | 2 +- .../custom_devices/custom_devices_config.dart | 2 +- packages/flutter_tools/lib/src/device.dart | 4 +- .../lib/src/drive/web_driver_service.dart | 20 +-- .../lib/src/flutter_manifest.dart | 2 +- .../lib/src/fuchsia/fuchsia_ffx.dart | 2 +- .../src/fuchsia/fuchsia_kernel_compiler.dart | 6 +- .../flutter_tools/lib/src/ios/devices.dart | 2 +- packages/flutter_tools/lib/src/ios/mac.dart | 2 +- .../flutter_tools/lib/src/ios/simulators.dart | 2 +- .../flutter_tools/lib/src/ios/xcodeproj.dart | 4 +- .../lib/src/isolated/devfs_web.dart | 2 +- .../lib/src/linux/build_linux.dart | 2 +- .../lib/src/linux/linux_doctor.dart | 2 +- .../lib/src/macos/build_macos.dart | 2 +- .../flutter_tools/lib/src/macos/xcdevice.dart | 4 +- .../lib/src/persistent_tool_state.dart | 2 +- .../lib/src/platform_plugins.dart | 2 +- .../lib/src/resident_devtools_handler.dart | 2 +- packages/flutter_tools/lib/src/run_hot.dart | 4 +- .../lib/src/runner/flutter_command.dart | 4 +- packages/flutter_tools/lib/src/template.dart | 6 +- .../lib/src/test/flutter_web_platform.dart | 2 +- .../lib/src/tester/flutter_tester.dart | 2 +- packages/flutter_tools/lib/src/vmservice.dart | 12 +- .../lib/src/windows/build_windows.dart | 4 +- .../lib/src/windows/visual_studio.dart | 4 +- .../hermetic/assemble_test.dart | 2 +- .../commands.shard/hermetic/attach_test.dart | 4 +- .../hermetic/build_fuchsia_test.dart | 2 +- .../hermetic/build_ios_test.dart | 2 +- .../hermetic/build_ipa_test.dart | 6 +- .../hermetic/build_linux_test.dart | 2 +- .../hermetic/build_macos_test.dart | 16 +- .../hermetic/build_web_test.dart | 4 +- .../hermetic/build_windows_test.dart | 4 +- .../commands.shard/hermetic/config_test.dart | 2 +- .../hermetic/create_usage_test.dart | 3 +- .../hermetic/custom_devices_test.dart | 104 +++++------ .../commands.shard/hermetic/devices_test.dart | 12 +- .../hermetic/downgrade_test.dart | 18 +- .../hermetic/proxy_validator_test.dart | 6 +- .../hermetic/symbolize_test.dart | 3 +- .../commands.shard/hermetic/test_test.dart | 14 +- .../permeable/build_aar_test.dart | 2 +- .../permeable/build_bundle_test.dart | 12 +- .../commands.shard/permeable/create_test.dart | 26 +-- .../permeable/devices_test.dart | 6 +- .../permeable/packages_test.dart | 18 +- .../permeable/upgrade_test.dart | 6 +- .../android/adb_log_reader_test.dart | 12 +- .../android_device_discovery_test.dart | 10 +- .../android_device_port_forwarder_test.dart | 16 +- .../android/android_device_start_test.dart | 2 +- .../android/android_device_test.dart | 24 +-- .../android/android_emulator_test.dart | 2 +- .../android/android_gradle_builder_test.dart | 22 +-- .../android/android_install_test.dart | 4 +- .../android/gradle_errors_test.dart | 4 +- .../general.shard/android/template_test.dart | 2 +- .../general.shard/artifact_updater_test.dart | 10 +- .../test/general.shard/base/build_test.dart | 2 +- .../test/general.shard/build_info_test.dart | 12 +- .../build_system/targets/android_test.dart | 10 +- .../build_system/targets/assets_test.dart | 10 +- .../build_system/targets/common_test.dart | 4 +- .../build_system/targets/ios_test.dart | 4 +- .../build_system/targets/linux_test.dart | 4 +- .../build_system/targets/macos_test.dart | 16 +- .../build_system/targets/windows_test.dart | 4 +- .../test/general.shard/cache_test.dart | 12 +- .../commands/flutter_root_test.dart | 14 +- .../general.shard/compile_batch_test.dart | 10 +- .../compile_expression_test.dart | 4 +- .../coverage_collector_test.dart | 66 +++---- .../custom_devices/custom_device_test.dart | 44 ++--- .../custom_devices_config_test.dart | 22 +-- .../test/general.shard/dart/pub_get_test.dart | 16 +- .../test/general.shard/dart_plugin_test.dart | 8 +- .../general.shard/desktop_device_test.dart | 4 +- .../test/general.shard/devfs_test.dart | 2 +- .../test/general.shard/device_test.dart | 14 +- .../general.shard/devtools_launcher_test.dart | 4 +- .../drive/drive_service_test.dart | 36 ++-- .../drive/web_driver_service_test.dart | 34 ++-- .../test/general.shard/emulator_test.dart | 12 +- .../general.shard/flutter_manifest_test.dart | 10 +- .../flutter_tester_device_test.dart | 10 +- .../general.shard/flutter_validator_test.dart | 2 +- .../fuchsia/fuchsia_device_start_test.dart | 4 +- .../fuchsia/fuchsia_device_test.dart | 2 +- .../fuchsia/fuchsia_pm_test.dart | 2 +- .../intellij/intellij_validator_test.dart | 6 +- .../general.shard/ios/code_signing_test.dart | 14 +- .../test/general.shard/ios/devices_test.dart | 6 +- .../general.shard/ios/ios_deploy_test.dart | 8 +- .../ios/ios_device_install_test.dart | 164 ++++++++++-------- .../ios/ios_device_logger_test.dart | 2 +- .../ios_device_start_nonprebuilt_test.dart | 4 +- .../ios/ios_device_start_prebuilt_test.dart | 13 +- .../test/general.shard/ios/mac_test.dart | 20 ++- .../general.shard/ios/simulators_test.dart | 6 +- .../general.shard/ios/xcodeproj_test.dart | 10 +- .../general.shard/license_collector_test.dart | 18 +- .../macos/macos_device_test.dart | 2 +- .../test/general.shard/plugins_test.dart | 34 ++-- .../general.shard/preview_device_test.dart | 4 +- .../test/general.shard/project_test.dart | 8 +- .../resident_devtools_handler_test.dart | 2 +- .../general.shard/resident_runner_test.dart | 36 ++-- .../resident_web_runner_test.dart | 8 +- .../runner/flutter_command_test.dart | 2 +- .../general.shard/runner/runner_test.dart | 6 +- .../general.shard/terminal_handler_test.dart | 34 ++-- .../test/general.shard/tracing_test.dart | 2 +- .../general.shard/update_packages_test.dart | 4 +- .../test/general.shard/vmservice_test.dart | 20 +-- .../general.shard/web/devfs_web_test.dart | 92 +++++----- .../test/general.shard/web/devices_test.dart | 6 +- .../web/golden_comparator_test.dart | 12 +- .../general.shard/web/memory_fs_test.dart | 12 +- .../web/web_asset_server_test.dart | 2 +- .../general.shard/windows/plugins_test.dart | 3 +- .../integration.shard/analyze_once_test.dart | 4 +- .../integration.shard/analyze_size_test.dart | 4 +- .../debug_adapter/test_adapter_test.dart | 2 +- .../deferred_components_test.dart | 4 +- .../downgrade_upgrade_integration_test.dart | 4 +- .../deferred_components_project.dart | 2 +- .../test/integration.shard/test_driver.dart | 2 +- .../test/integration.shard/test_test.dart | 4 +- .../test/src/custom_devices_common.dart | 4 +- .../flutter_tools/test/src/fake_devices.dart | 10 +- .../test/src/fake_vm_services.dart | 2 +- packages/flutter_tools/test/src/fakes.dart | 2 +- .../test/web.shard/chrome_test.dart | 4 +- .../test/web.shard/vm_service_web_test.dart | 4 +- .../flutter_tools/tool/daemon_client.dart | 2 +- .../test/src/common/network_test.dart | 7 +- packages/integration_test/lib/common.dart | 2 +- .../lib/integration_test.dart | 2 +- .../test/binding_fail_test.dart | 2 +- 271 files changed, 1235 insertions(+), 1140 deletions(-) diff --git a/dev/automated_tests/flutter_test/flutter_gold_test.dart b/dev/automated_tests/flutter_test/flutter_gold_test.dart index fbd701b4737c9..b12ac4efd1695 100644 --- a/dev/automated_tests/flutter_test/flutter_gold_test.dart +++ b/dev/automated_tests/flutter_test/flutter_gold_test.dart @@ -13,10 +13,12 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:platform/platform.dart'; // 1x1 colored pixel -const List _kFailPngBytes = [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, +const List _kFailPngBytes = [ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 13, 73, 68, 65, 84, 120, 1, 99, 249, 207, 240, 255, 63, 0, 7, 18, 3, - 2, 164, 147, 160, 197, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]; + 2, 164, 147, 160, 197, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130, +]; void main() { final MemoryFileSystem fs = MemoryFileSystem(); diff --git a/dev/benchmarks/macrobenchmarks/lib/src/animated_complex_opacity.dart b/dev/benchmarks/macrobenchmarks/lib/src/animated_complex_opacity.dart index 90b2276e343bc..90c3bcd104cd3 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/animated_complex_opacity.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/animated_complex_opacity.dart @@ -33,7 +33,7 @@ class _AnimatedComplexOpacityState extends State with Si for (int i = 0; i < 20; i++) FadeTransition(opacity: animation, child: Center( child: Transform.scale(scale: 1.01, child: const ModeratelyComplexWidget()), - )) + )), ], ), ), diff --git a/dev/benchmarks/macrobenchmarks/lib/src/opacity_peephole.dart b/dev/benchmarks/macrobenchmarks/lib/src/opacity_peephole.dart index c719ed50a0d48..c1ebc9249c24c 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/opacity_peephole.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/opacity_peephole.dart @@ -28,7 +28,7 @@ class OpacityPeepholePage extends StatelessWidget { onPressed: () { Navigator.pushNamed(context, variant.route); }, - ) + ), ], ), ); diff --git a/dev/benchmarks/macrobenchmarks/lib/src/picture_cache.dart b/dev/benchmarks/macrobenchmarks/lib/src/picture_cache.dart index 08063c75af2d3..caa20e127898d 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/picture_cache.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/picture_cache.dart @@ -62,7 +62,7 @@ class ListItem extends StatelessWidget { _buildUserInfo(), const SizedBox( height: 10, - ) + ), ]; if (index % 3 != 0) { contents.add(_buildImageContent()); @@ -140,7 +140,7 @@ class ListItem extends StatelessWidget { ), const SizedBox( width: 15, - ) + ), ], ); } diff --git a/dev/benchmarks/macrobenchmarks/lib/src/post_backdrop_filter.dart b/dev/benchmarks/macrobenchmarks/lib/src/post_backdrop_filter.dart index d95aed858dc3b..b17005c0bca73 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/post_backdrop_filter.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/post_backdrop_filter.dart @@ -93,7 +93,7 @@ class _PostBackdropFilterPageState extends State with Ti ], ), ), - ) + ), ], ), ], diff --git a/dev/benchmarks/macrobenchmarks/lib/src/stack_size.dart b/dev/benchmarks/macrobenchmarks/lib/src/stack_size.dart index 3f828c0a0f47e..a4012d8409663 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/stack_size.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/stack_size.dart @@ -67,7 +67,7 @@ final GetStackPointerCallback getStackPointer = () { // "mov r0, sp" in machine code: 0D00A0E1. 0x0d, 0x00, 0xa0, 0xe1, // "bx lr" in machine code: 1EFF2FE1. - 0x1e, 0xff, 0x2f, 0xe1 + 0x1e, 0xff, 0x2f, 0xe1, ] ); diff --git a/dev/benchmarks/macrobenchmarks/lib/src/web/bench_text_layout.dart b/dev/benchmarks/macrobenchmarks/lib/src/web/bench_text_layout.dart index b06d34aafe2df..7a1cf7363be08 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/web/bench_text_layout.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/web/bench_text_layout.dart @@ -393,7 +393,7 @@ class PaletteTabView extends StatelessWidget { 600, 700, 800, - 900 + 900, ]; static const List accentKeys = [100, 200, 400, 700]; diff --git a/dev/benchmarks/macrobenchmarks/test/frame_policy.dart b/dev/benchmarks/macrobenchmarks/test/frame_policy.dart index b40304a794928..95b80ef8a58da 100644 --- a/dev/benchmarks/macrobenchmarks/test/frame_policy.dart +++ b/dev/benchmarks/macrobenchmarks/test/frame_policy.dart @@ -45,8 +45,8 @@ void main() { position: location + movePerRun * t.toDouble(), pointer: 1, delta: movePerRun, - ) - ]) + ), + ]), ], PointerEventRecord(totalTime, [ PointerUpEvent( @@ -54,8 +54,8 @@ void main() { timeStamp: totalTime - const Duration(milliseconds: 1), position: location + movePerRun * moveEventNumber.toDouble(), pointer: 1, - ) - ]) + ), + ]), ]; binding.framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.benchmarkLive; diff --git a/dev/benchmarks/macrobenchmarks/test/opacity_peephole_col_of_rows_perf_e2e.dart b/dev/benchmarks/macrobenchmarks/test/opacity_peephole_col_of_rows_perf_e2e.dart index cf9129ef88c00..9343e008bebbf 100644 --- a/dev/benchmarks/macrobenchmarks/test/opacity_peephole_col_of_rows_perf_e2e.dart +++ b/dev/benchmarks/macrobenchmarks/test/opacity_peephole_col_of_rows_perf_e2e.dart @@ -11,7 +11,7 @@ void main() { 'opacity_peephole_col_of_rows_perf', [ ScrollableButtonRoute(kScrollableName, kOpacityPeepholeRouteName), - ScrollableButtonRoute(kOpacityScrollableName, kOpacityPeepholeOpacityOfColOfRowsRouteName) + ScrollableButtonRoute(kOpacityScrollableName, kOpacityPeepholeOpacityOfColOfRowsRouteName), ], pageDelay: const Duration(seconds: 1), duration: const Duration(seconds: 10), diff --git a/dev/benchmarks/macrobenchmarks/test/opacity_peephole_fade_transition_text_perf_e2e.dart b/dev/benchmarks/macrobenchmarks/test/opacity_peephole_fade_transition_text_perf_e2e.dart index 269cfd1e8b858..232af02951f5f 100644 --- a/dev/benchmarks/macrobenchmarks/test/opacity_peephole_fade_transition_text_perf_e2e.dart +++ b/dev/benchmarks/macrobenchmarks/test/opacity_peephole_fade_transition_text_perf_e2e.dart @@ -11,7 +11,7 @@ void main() { 'opacity_peephole_fade_transition_text_perf', [ ScrollableButtonRoute(kScrollableName, kOpacityPeepholeRouteName), - ScrollableButtonRoute(kOpacityScrollableName, kOpacityPeepholeFadeTransitionTextRouteName) + ScrollableButtonRoute(kOpacityScrollableName, kOpacityPeepholeFadeTransitionTextRouteName), ], pageDelay: const Duration(seconds: 1), duration: const Duration(seconds: 10), diff --git a/dev/benchmarks/macrobenchmarks/test/opacity_peephole_grid_of_opacity_perf_e2e.dart b/dev/benchmarks/macrobenchmarks/test/opacity_peephole_grid_of_opacity_perf_e2e.dart index 068c21cce65d4..b188b4b286460 100644 --- a/dev/benchmarks/macrobenchmarks/test/opacity_peephole_grid_of_opacity_perf_e2e.dart +++ b/dev/benchmarks/macrobenchmarks/test/opacity_peephole_grid_of_opacity_perf_e2e.dart @@ -11,7 +11,7 @@ void main() { 'opacity_peephole_grid_of_opacity_perf', [ ScrollableButtonRoute(kScrollableName, kOpacityPeepholeRouteName), - ScrollableButtonRoute(kOpacityScrollableName, kOpacityPeepholeGridOfOpacityRouteName) + ScrollableButtonRoute(kOpacityScrollableName, kOpacityPeepholeGridOfOpacityRouteName), ], pageDelay: const Duration(seconds: 1), duration: const Duration(seconds: 10), diff --git a/dev/benchmarks/macrobenchmarks/test/opacity_peephole_one_rect_perf_e2e.dart b/dev/benchmarks/macrobenchmarks/test/opacity_peephole_one_rect_perf_e2e.dart index 63313da61861a..8986c216546e5 100644 --- a/dev/benchmarks/macrobenchmarks/test/opacity_peephole_one_rect_perf_e2e.dart +++ b/dev/benchmarks/macrobenchmarks/test/opacity_peephole_one_rect_perf_e2e.dart @@ -11,7 +11,7 @@ void main() { 'opacity_peephole_one_rect_perf', [ ScrollableButtonRoute(kScrollableName, kOpacityPeepholeRouteName), - ScrollableButtonRoute(kOpacityScrollableName, kOpacityPeepholeOneRectRouteName) + ScrollableButtonRoute(kOpacityScrollableName, kOpacityPeepholeOneRectRouteName), ], pageDelay: const Duration(seconds: 1), duration: const Duration(seconds: 10), diff --git a/dev/benchmarks/macrobenchmarks/test/opacity_peephole_opacity_of_grid_perf_e2e.dart b/dev/benchmarks/macrobenchmarks/test/opacity_peephole_opacity_of_grid_perf_e2e.dart index ca6082830bd40..991ed7b0be363 100644 --- a/dev/benchmarks/macrobenchmarks/test/opacity_peephole_opacity_of_grid_perf_e2e.dart +++ b/dev/benchmarks/macrobenchmarks/test/opacity_peephole_opacity_of_grid_perf_e2e.dart @@ -11,7 +11,7 @@ void main() { 'opacity_peephole_opacity_of_grid_perf', [ ScrollableButtonRoute(kScrollableName, kOpacityPeepholeRouteName), - ScrollableButtonRoute(kOpacityScrollableName, kOpacityPeepholeOpacityOfGridRouteName) + ScrollableButtonRoute(kOpacityScrollableName, kOpacityPeepholeOpacityOfGridRouteName), ], pageDelay: const Duration(seconds: 1), duration: const Duration(seconds: 10), diff --git a/dev/benchmarks/microbenchmarks/lib/foundation/standard_message_codec_bench.dart b/dev/benchmarks/microbenchmarks/lib/foundation/standard_message_codec_bench.dart index 0debebd5f8b3f..5be91076a7b31 100644 --- a/dev/benchmarks/microbenchmarks/lib/foundation/standard_message_codec_bench.dart +++ b/dev/benchmarks/microbenchmarks/lib/foundation/standard_message_codec_bench.dart @@ -78,7 +78,7 @@ void main() { 'integer': 1234, 'string': 'This is a performance test.', 'float': 1.25, - 'boolean': true + 'boolean': true, }); } watch.stop(); diff --git a/dev/benchmarks/microbenchmarks/lib/foundation/standard_method_codec_bench.dart b/dev/benchmarks/microbenchmarks/lib/foundation/standard_method_codec_bench.dart index 2cbb28564ceed..6731d57d1e9ea 100644 --- a/dev/benchmarks/microbenchmarks/lib/foundation/standard_method_codec_bench.dart +++ b/dev/benchmarks/microbenchmarks/lib/foundation/standard_method_codec_bench.dart @@ -81,7 +81,7 @@ void main() { 'integer': 1234, 'string': 'This is a performance test.', 'float': 1.25, - 'boolean': true + 'boolean': true, })); } watch.stop(); diff --git a/dev/benchmarks/multiple_flutters/module/lib/main.dart b/dev/benchmarks/multiple_flutters/module/lib/main.dart index 4a583b42dee02..0036703d84535 100644 --- a/dev/benchmarks/multiple_flutters/module/lib/main.dart +++ b/dev/benchmarks/multiple_flutters/module/lib/main.dart @@ -160,7 +160,7 @@ class _MyHomePageState extends State { 0.0), // 10% of the width, so there are ten blinds. colors: [ Color(0xffee0000), - Color(0xffeeee00) + Color(0xffeeee00), ], // red to yellow tileMode: TileMode .repeated, // repeats the gradient over the canvas @@ -172,7 +172,7 @@ class _MyHomePageState extends State { CustomPaint( painter: Sky(), size: const Size(200.0, 36.0), - ) + ), ], ), ), diff --git a/dev/benchmarks/test_apps/stocks/lib/i18n/stock_strings.dart b/dev/benchmarks/test_apps/stocks/lib/i18n/stock_strings.dart index fc38e8f4b7c22..2af0dc28d5c02 100644 --- a/dev/benchmarks/test_apps/stocks/lib/i18n/stock_strings.dart +++ b/dev/benchmarks/test_apps/stocks/lib/i18n/stock_strings.dart @@ -97,7 +97,7 @@ abstract class StockStrings { static const List supportedLocales = [ Locale('en'), Locale('en', 'US'), - Locale('es') + Locale('es'), ]; /// Title for the Stocks application diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart index 249a4a32d201b..f18b1a7f2ff8f 100644 --- a/dev/bots/analyze.dart +++ b/dev/bots/analyze.dart @@ -638,7 +638,7 @@ Future verifyNoBadImportsInFlutter(String workingDirectory) async { 'These are the exported packages:', ...packages.map((String path) => ' lib/$path.dart'), 'These are the directories:', - ...directories.map((String path) => ' lib/src/$path/') + ...directories.map((String path) => ' lib/src/$path/'), ].join('\n')); } // Verify that the imports are well-ordered. @@ -1585,7 +1585,7 @@ Future _checkConsumerDependencies() async { 'pub', 'deps', '--json', - '--directory=${path.join(flutterRoot, 'packages', package)}' + '--directory=${path.join(flutterRoot, 'packages', package)}', ]); if (result.exitCode != 0) { print(result.stdout as Object); diff --git a/dev/bots/service_worker_test.dart b/dev/bots/service_worker_test.dart index 10432c7a352aa..a40b7bc6c0645 100644 --- a/dev/bots/service_worker_test.dart +++ b/dev/bots/service_worker_test.dart @@ -239,7 +239,7 @@ Future runWebServiceWorkerTest({ ...{ 'manifest.json': 1, 'favicon.ico': 1, - } + }, }); expect(reportedVersion, '1'); reportedVersion = null; @@ -313,7 +313,7 @@ Future runWebServiceWorkerTest({ ...{ 'manifest.json': 1, 'favicon.ico': 1, - } + }, }); expect(reportedVersion, '3'); @@ -366,7 +366,7 @@ Future runWebServiceWorkerTest({ ...{ 'manifest.json': 1, 'favicon.ico': 1, - } + }, }); expect(reportedVersion, '4'); diff --git a/dev/bots/test.dart b/dev/bots/test.dart index a8532ae097f03..bc71ca06dc532 100644 --- a/dev/bots/test.dart +++ b/dev/bots/test.dart @@ -1268,7 +1268,7 @@ Future _runFlutterPluginsTests() async { 'core.longPaths=true', 'clone', 'https://github.com/flutter/plugins.git', - '.' + '.', ], workingDirectory: checkout.path, ); @@ -1329,7 +1329,7 @@ Future _runSkpGeneratorTests() async { 'core.longPaths=true', 'clone', 'https://github.com/flutter/tests.git', - '.' + '.', ], workingDirectory: checkout.path, ); diff --git a/dev/bots/test/prepare_package_test.dart b/dev/bots/test/prepare_package_test.dart index 3f7449ff3d52b..6f073243f4929 100644 --- a/dev/bots/test/prepare_package_test.dart +++ b/dev/bots/test/prepare_package_test.dart @@ -48,7 +48,7 @@ void main() { command: ['echo', 'test',], stdout: 'output', stderr: 'error', - ) + ), ]); final ProcessRunner processRunner = ProcessRunner( subprocessOutput: false, platform: platform, processManager: fakeProcessManager); @@ -62,7 +62,7 @@ void main() { stdout: 'output', stderr: 'error', exitCode: -1, - ) + ), ]); final ProcessRunner processRunner = ProcessRunner( subprocessOutput: false, platform: platform, processManager: fakeProcessManager); diff --git a/dev/conductor/core/lib/src/repository.dart b/dev/conductor/core/lib/src/repository.dart index 12854bfabcec8..71a382b2c35ab 100644 --- a/dev/conductor/core/lib/src/repository.dart +++ b/dev/conductor/core/lib/src/repository.dart @@ -151,7 +151,7 @@ abstract class Repository { upstreamRemote.name, '--', upstreamRemote.url, - checkoutDirectory.path + checkoutDirectory.path, ], 'Cloning $name repo', workingDirectory: parentDirectory.path, @@ -302,7 +302,7 @@ abstract class Repository { 'merge-base', '--is-ancestor', possibleDescendant, - possibleAncestor + possibleAncestor, ], 'verify $possibleAncestor is a direct ancestor of $possibleDescendant.', allowNonZeroExitCode: true, diff --git a/dev/conductor/core/lib/src/state.dart b/dev/conductor/core/lib/src/state.dart index d0bf99730dd5c..4d621764f84ed 100644 --- a/dev/conductor/core/lib/src/state.dart +++ b/dev/conductor/core/lib/src/state.dart @@ -171,7 +171,7 @@ String phaseInstructions(pb.ConductorState state) { ].join('\n'); } return [ - 'Either all cherrypicks have been auto-applied or there were none.' + 'Either all cherrypicks have been auto-applied or there were none.', ].join('\n'); case ReleasePhase.PUBLISH_VERSION: if (!requiresFrameworkPR(state)) { @@ -201,7 +201,7 @@ String phaseInstructions(pb.ConductorState state) { '\t 1. Post announcement to discord', '\t 2. Post announcement flutter release hotline chat room', '-----------------------------------------------------------------------', - 'This release has been completed.' + 'This release has been completed.', ].join('\n'); } return [ @@ -211,7 +211,7 @@ String phaseInstructions(pb.ConductorState state) { '\t 3. Post announcement to discord', '\t 4. Post announcement flutter release hotline chat room', '-----------------------------------------------------------------------', - 'This release has been completed.' + 'This release has been completed.', ].join('\n'); } // For analyzer diff --git a/dev/conductor/core/test/next_test.dart b/dev/conductor/core/test/next_test.dart index b4b8db10eeb9f..5f3662a2ea224 100644 --- a/dev/conductor/core/test/next_test.dart +++ b/dev/conductor/core/test/next_test.dart @@ -1124,7 +1124,7 @@ void main() { FakeCommand( command: const ['git', 'push', '', 'HEAD:refs/heads/'], exception: GitException(gitPushErrorMessage, ['git', 'push', '--force', '', 'HEAD:refs/heads/']), - ) + ), ]); final NextContext nextContext = NextContext( autoAccept: false, diff --git a/dev/customer_testing/test/customer_test_test.dart b/dev/customer_testing/test/customer_test_test.dart index e4d9c5d7646b8..129782c61d75a 100644 --- a/dev/customer_testing/test/customer_test_test.dart +++ b/dev/customer_testing/test/customer_test_test.dart @@ -32,11 +32,12 @@ test.windows=.\test_utilities\bin\flutter_test_runner.bat repo_dashboard ['git clone https://github.com/flutter/cocoon.git tests', 'git -C tests checkout abc123'])); if (Platform.isLinux || Platform.isMacOS) { expect( - test.tests, - containsAllInOrder([ - './test_utilities/bin/flutter_test_runner.sh app_flutter', - './test_utilities/bin/flutter_test_runner.sh repo_dashboard' - ])); + test.tests, + containsAllInOrder([ + './test_utilities/bin/flutter_test_runner.sh app_flutter', + './test_utilities/bin/flutter_test_runner.sh repo_dashboard', + ]), + ); } else if (Platform.isWindows) { expect(test.tests, containsAllInOrder(['.\test_utilities\bin\flutter_test_runner.bat repo_dashboard'])); } diff --git a/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart b/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart index ba76ec386a66f..1bb5a7866a774 100644 --- a/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart +++ b/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart @@ -30,7 +30,7 @@ Future main() async { 'io.flutter.devicelab', '--template', 'module', - 'hello_module' + 'hello_module', ], ); @@ -410,7 +410,7 @@ Future _testBuildIosFramework(Directory projectDir, { bool isModule = fals 'ios-framework', '--cocoapods', '--force', // Allow podspec creation on master. - '--output=$cocoapodsOutputDirectoryName' + '--output=$cocoapodsOutputDirectoryName', ], ); }); diff --git a/dev/devicelab/bin/tasks/flutter_engine_group_performance.dart b/dev/devicelab/bin/tasks/flutter_engine_group_performance.dart index 63beff98617fb..f6ebee406bcc4 100644 --- a/dev/devicelab/bin/tasks/flutter_engine_group_performance.dart +++ b/dev/devicelab/bin/tasks/flutter_engine_group_performance.dart @@ -80,7 +80,7 @@ Future _doTest() async { 'am', 'start', '-n', - '$_bundleName/$_bundleName.$_activityName' + '$_bundleName/$_bundleName.$_activityName', ]); await Future.delayed(const Duration(seconds: 10)); final Map memoryStats = @@ -93,7 +93,7 @@ Future _doTest() async { ListStatistics(totalMemorySamples); final Map results = { - ...totalMemoryStatistics.asMap('totalMemory') + ...totalMemoryStatistics.asMap('totalMemory'), }; result = TaskResult.success(results, benchmarkScoreKeys: results.keys.toList()); diff --git a/dev/devicelab/bin/tasks/gradle_java8_compile_test.dart b/dev/devicelab/bin/tasks/gradle_java8_compile_test.dart index 64581e593c4cd..ec3dd6d9fdd5d 100644 --- a/dev/devicelab/bin/tasks/gradle_java8_compile_test.dart +++ b/dev/devicelab/bin/tasks/gradle_java8_compile_test.dart @@ -90,7 +90,7 @@ class AaaPlugin: FlutterPlugin, MethodCallHandler { options: [ 'apk', '--debug', - '--target-platform=android-arm' + '--target-platform=android-arm', ], ); }); diff --git a/dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart b/dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart index 54633719921a0..459b039ab745e 100644 --- a/dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart +++ b/dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart @@ -22,7 +22,7 @@ Future main() async { options: [ 'apk', '--debug', - '--target-platform=android-arm' + '--target-platform=android-arm', ], ); }); @@ -54,7 +54,7 @@ Future main() async { options: [ 'apk', '--debug', - '--target-platform=android-x86' + '--target-platform=android-x86', ], ); }); @@ -85,7 +85,7 @@ Future main() async { options: [ 'apk', '--debug', - '--target-platform=android-x64' + '--target-platform=android-x64', ], ); }); @@ -115,7 +115,7 @@ Future main() async { options: [ 'apk', '--release', - '--target-platform=android-arm' + '--target-platform=android-arm', ], ); }); @@ -143,7 +143,7 @@ Future main() async { options: [ 'apk', '--release', - '--target-platform=android-arm64' + '--target-platform=android-arm64', ], ); }); diff --git a/dev/devicelab/bin/tasks/module_custom_host_app_name_test.dart b/dev/devicelab/bin/tasks/module_custom_host_app_name_test.dart index 7f19d887e079a..203f32697fedb 100644 --- a/dev/devicelab/bin/tasks/module_custom_host_app_name_test.dart +++ b/dev/devicelab/bin/tasks/module_custom_host_app_name_test.dart @@ -55,7 +55,7 @@ Future main() async { if (!Platform.isWindows) { await exec('chmod', [ '444', - readonlyTxtAssetFile.path + readonlyTxtAssetFile.path, ]); } diff --git a/dev/devicelab/bin/tasks/module_test.dart b/dev/devicelab/bin/tasks/module_test.dart index 413f2abe81f71..8ef1c54574a7e 100644 --- a/dev/devicelab/bin/tasks/module_test.dart +++ b/dev/devicelab/bin/tasks/module_test.dart @@ -58,7 +58,7 @@ Future main() async { if (!Platform.isWindows) { await exec('chmod', [ '444', - readonlyTxtAssetFile.path + readonlyTxtAssetFile.path, ]); } diff --git a/dev/devicelab/bin/tasks/module_test_ios.dart b/dev/devicelab/bin/tasks/module_test_ios.dart index 996540989a10e..832647f440e48 100644 --- a/dev/devicelab/bin/tasks/module_test_ios.dart +++ b/dev/devicelab/bin/tasks/module_test_ios.dart @@ -425,7 +425,7 @@ end '-archivePath', objectiveCBuildArchiveDirectory.path, 'COMPILER_INDEX_STORE_ENABLE=NO', - 'archive' + 'archive', ], environment: { 'FLUTTER_ANALYTICS_LOG_FILE': objectiveCAnalyticsOutputFile.path, diff --git a/dev/devicelab/bin/tasks/plugin_lint_mac.dart b/dev/devicelab/bin/tasks/plugin_lint_mac.dart index 2ad085f8d1323..01f5209bc33ef 100644 --- a/dev/devicelab/bin/tasks/plugin_lint_mac.dart +++ b/dev/devicelab/bin/tasks/plugin_lint_mac.dart @@ -248,7 +248,7 @@ Future main() async { 'build', options: [ 'ios', - '--no-codesign' + '--no-codesign', ], // TODO(jmagman): Make Objective-C applications handle Swift libraries https://github.com/flutter/flutter/issues/16049 canFail: true @@ -272,7 +272,7 @@ Future main() async { 'build', options: [ 'ios', - '--no-codesign' + '--no-codesign', ], ); }); @@ -305,7 +305,7 @@ Future main() async { 'build', options: [ 'ios', - '--no-codesign' + '--no-codesign', ], ); }); @@ -326,7 +326,7 @@ Future main() async { 'build', options: [ 'ios', - '--no-codesign' + '--no-codesign', ], ); }); @@ -390,7 +390,7 @@ Future main() async { 'build', options: [ 'ios', - '--no-codesign' + '--no-codesign', ], ); }); diff --git a/dev/devicelab/lib/framework/ab.dart b/dev/devicelab/lib/framework/ab.dart index 4f214f9c88ebc..11dbaf00dfc75 100644 --- a/dev/devicelab/lib/framework/ab.dart +++ b/dev/devicelab/lib/framework/ab.dart @@ -50,7 +50,7 @@ class ABTest { final Map resultMap = results as Map; return > { for (String key in resultMap.keys) - key: (resultMap[key] as List).cast() + key: (resultMap[key] as List).cast(), }; } @@ -153,13 +153,13 @@ class ABTest { 'Score', 'Average A', '(noise)', 'Average B', '(noise)', - 'Speed-up' + 'Speed-up', ]; final List alignments = [ FieldJustification.LEFT, FieldJustification.RIGHT, FieldJustification.LEFT, FieldJustification.RIGHT, FieldJustification.LEFT, - FieldJustification.CENTER + FieldJustification.CENTER, ]; final List lengths = List.filled(6, 0); diff --git a/dev/devicelab/lib/tasks/gallery.dart b/dev/devicelab/lib/tasks/gallery.dart index bd7a49fee2b89..aadb1e59a5ab5 100644 --- a/dev/devicelab/lib/tasks/gallery.dart +++ b/dev/devicelab/lib/tasks/gallery.dart @@ -131,7 +131,7 @@ class GalleryTransitionTest { if (transitionDurationFile != null) '$testOutputDirectory/$transitionDurationFile.json', if (timelineTraceFile != null) - '$testOutputDirectory/$timelineTraceFile.json' + '$testOutputDirectory/$timelineTraceFile.json', ], benchmarkScoreKeys: [ if (transitionDurationFile != null) diff --git a/dev/devicelab/lib/tasks/platform_channels_benchmarks.dart b/dev/devicelab/lib/tasks/platform_channels_benchmarks.dart index 5a006e7e58833..48d233c402007 100644 --- a/dev/devicelab/lib/tasks/platform_channels_benchmarks.dart +++ b/dev/devicelab/lib/tasks/platform_channels_benchmarks.dart @@ -29,7 +29,7 @@ TaskFunction runTask(adb.DeviceOperatingSystem operatingSystem) { 'ios,android', '--no-overwrite', '-v', - '.' + '.', ]; print('\nExecuting: $flutterExe $createArgs $appDir'); await utils.eval(flutterExe, createArgs); diff --git a/dev/devicelab/test/metrics_center_test.dart b/dev/devicelab/test/metrics_center_test.dart index 8963d23b8c941..13dfff065ba29 100644 --- a/dev/devicelab/test/metrics_center_test.dart +++ b/dev/devicelab/test/metrics_center_test.dart @@ -82,7 +82,7 @@ void main() { 'device_type': 'Moto G Play', 'device_version': 'android-25', 'host_type': 'linux', - 'host_version': 'debian-10.11' + 'host_version': 'debian-10.11', }; final List metricPoints = parse(results, tags, 'task abc'); diff --git a/dev/integration_tests/ios_add2app_life_cycle/flutterapp/lib/main.dart b/dev/integration_tests/ios_add2app_life_cycle/flutterapp/lib/main.dart index 09eb38291ba8c..358f8ef0d0f38 100644 --- a/dev/integration_tests/ios_add2app_life_cycle/flutterapp/lib/main.dart +++ b/dev/integration_tests/ios_add2app_life_cycle/flutterapp/lib/main.dart @@ -46,7 +46,7 @@ class _LifeCycleSpyState extends State with WidgetsBindingObserver super.initState(); WidgetsBinding.instance.addObserver(this); _actualLifeCycleSequence = [ - ServicesBinding.instance.lifecycleState + ServicesBinding.instance.lifecycleState, ]; } diff --git a/dev/integration_tests/ios_platform_view_tests/lib/main.dart b/dev/integration_tests/ios_platform_view_tests/lib/main.dart index aeb4f44f3188a..5cb467fdf1ccb 100644 --- a/dev/integration_tests/ios_platform_view_tests/lib/main.dart +++ b/dev/integration_tests/ios_platform_view_tests/lib/main.dart @@ -91,7 +91,7 @@ class PlatformViewPage extends StatelessWidget { key: button, child: const Text('button'), onPressed: (){}, - ) + ), ], ), ); diff --git a/dev/tools/update_icons.dart b/dev/tools/update_icons.dart index 073345bf752ee..1691b3d2d9a2e 100644 --- a/dev/tools/update_icons.dart +++ b/dev/tools/update_icons.dart @@ -474,7 +474,7 @@ class Icon { '_monoline_filled', '_outlined', '_rounded', - '_sharp' + '_sharp', ]; late String id; // e.g. 5g, 5g_outlined, 5g_rounded, 5g_sharp diff --git a/dev/tools/vitool/test/vitool_test.dart b/dev/tools/vitool/test/vitool_test.dart index b7bf1b391c6f8..c8458badb850a 100644 --- a/dev/tools/vitool/test/vitool_test.dart +++ b/dev/tools/vitool/test/vitool_test.dart @@ -274,7 +274,7 @@ void main() { [ PathCommandAnimation('M', >>[ >[Point(5.0, 6.0)], - ]) + ]), ], opacities: [1.0], )), diff --git a/dev/tracing_tests/test/image_cache_tracing_test.dart b/dev/tracing_tests/test/image_cache_tracing_test.dart index eb8dc94ccc2da..6cc366b46b5d7 100644 --- a/dev/tracing_tests/test/image_cache_tracing_test.dart +++ b/dev/tracing_tests/test/image_cache_tracing_test.dart @@ -34,11 +34,11 @@ void main() { >[ { 'name': 'ImageCache.putIfAbsent', - 'args': {'key': 'Test', 'isolateId': isolateId} + 'args': {'key': 'Test', 'isolateId': isolateId}, }, { 'name': 'listener', - 'args': {'isolateId': isolateId} + 'args': {'isolateId': isolateId}, }, { 'name': 'ImageCache.clear', @@ -48,15 +48,15 @@ void main() { 'liveImages': 1, 'currentSizeInBytes': 0, 'isolateId': isolateId, - } + }, }, { 'name': 'ImageCache.putIfAbsent', - 'args': {'key': 'Test2', 'isolateId': isolateId} + 'args': {'key': 'Test2', 'isolateId': isolateId}, }, { 'name': 'ImageCache.evict', - 'args': {'sizeInBytes': 4, 'isolateId': isolateId} + 'args': {'sizeInBytes': 4, 'isolateId': isolateId}, }, ], ); diff --git a/examples/api/lib/cupertino/dialog/cupertino_action_sheet.0.dart b/examples/api/lib/cupertino/dialog/cupertino_action_sheet.0.dart index 507feee8d24af..4f51d92e0363e 100644 --- a/examples/api/lib/cupertino/dialog/cupertino_action_sheet.0.dart +++ b/examples/api/lib/cupertino/dialog/cupertino_action_sheet.0.dart @@ -59,7 +59,7 @@ class ActionSheetSample extends StatelessWidget { Navigator.pop(context); }, child: const Text('Destructive Action'), - ) + ), ], ), ); diff --git a/examples/api/lib/cupertino/dialog/cupertino_alert_dialog.0.dart b/examples/api/lib/cupertino/dialog/cupertino_alert_dialog.0.dart index f6af0831984ad..cca1cf64f3bd4 100644 --- a/examples/api/lib/cupertino/dialog/cupertino_alert_dialog.0.dart +++ b/examples/api/lib/cupertino/dialog/cupertino_alert_dialog.0.dart @@ -53,7 +53,7 @@ class ActionSheetSample extends StatelessWidget { Navigator.pop(context); }, child: const Text('Yes'), - ) + ), ], ), ); diff --git a/examples/api/lib/cupertino/nav_bar/cupertino_sliver_nav_bar.0.dart b/examples/api/lib/cupertino/nav_bar/cupertino_sliver_nav_bar.0.dart index 864ba983ceb77..1db77aa4e9f25 100644 --- a/examples/api/lib/cupertino/nav_bar/cupertino_sliver_nav_bar.0.dart +++ b/examples/api/lib/cupertino/nav_bar/cupertino_sliver_nav_bar.0.dart @@ -54,7 +54,7 @@ class CupertinoNavBarSample extends StatelessWidget { })); }, child: const Text('Go to Next Page'), - ) + ), ], ), ), diff --git a/examples/api/lib/cupertino/refresh/cupertino_sliver_refresh_control.0.dart b/examples/api/lib/cupertino/refresh/cupertino_sliver_refresh_control.0.dart index ce63503d8bd80..4f129a15e57c7 100644 --- a/examples/api/lib/cupertino/refresh/cupertino_sliver_refresh_control.0.dart +++ b/examples/api/lib/cupertino/refresh/cupertino_sliver_refresh_control.0.dart @@ -33,7 +33,7 @@ class _MyStatefulWidgetState extends State { List colors = [ CupertinoColors.systemYellow, CupertinoColors.systemOrange, - CupertinoColors.systemPink + CupertinoColors.systemPink, ]; List items = [ Container(color: CupertinoColors.systemPink, height: 100.0), diff --git a/examples/api/lib/material/app_bar/app_bar.1.dart b/examples/api/lib/material/app_bar/app_bar.1.dart index 55223828398f7..c5ddf6e393d8e 100644 --- a/examples/api/lib/material/app_bar/app_bar.1.dart +++ b/examples/api/lib/material/app_bar/app_bar.1.dart @@ -41,7 +41,7 @@ class MyStatelessWidget extends StatelessWidget { style: style, onPressed: () {}, child: const Text('Action 2'), - ) + ), ], ), ); diff --git a/examples/api/lib/material/bottom_sheet/show_modal_bottom_sheet.0.dart b/examples/api/lib/material/bottom_sheet/show_modal_bottom_sheet.0.dart index ae6e4800e44bb..e7b770252188d 100644 --- a/examples/api/lib/material/bottom_sheet/show_modal_bottom_sheet.0.dart +++ b/examples/api/lib/material/bottom_sheet/show_modal_bottom_sheet.0.dart @@ -49,7 +49,7 @@ class MyStatelessWidget extends StatelessWidget { ElevatedButton( child: const Text('Close BottomSheet'), onPressed: () => Navigator.pop(context), - ) + ), ], ), ), diff --git a/examples/api/lib/material/icon_button/icon_button.0.dart b/examples/api/lib/material/icon_button/icon_button.0.dart index 9180f15ac789d..2c62fa10d4251 100644 --- a/examples/api/lib/material/icon_button/icon_button.0.dart +++ b/examples/api/lib/material/icon_button/icon_button.0.dart @@ -51,7 +51,7 @@ class _MyStatefulWidgetState extends State { }); }, ), - Text('Volume : $_volume') + Text('Volume : $_volume'), ], ); } diff --git a/examples/api/lib/material/list_tile/list_tile.5.dart b/examples/api/lib/material/list_tile/list_tile.5.dart index 15fd4b168543b..4aff57a23cba2 100644 --- a/examples/api/lib/material/list_tile/list_tile.5.dart +++ b/examples/api/lib/material/list_tile/list_tile.5.dart @@ -140,7 +140,7 @@ class CustomListItemTwo extends StatelessWidget { readDuration: readDuration, ), ), - ) + ), ], ), ), diff --git a/examples/api/lib/material/navigation_bar/navigation_bar.0.dart b/examples/api/lib/material/navigation_bar/navigation_bar.0.dart index d06244f4a860b..4ca40385e2e59 100644 --- a/examples/api/lib/material/navigation_bar/navigation_bar.0.dart +++ b/examples/api/lib/material/navigation_bar/navigation_bar.0.dart @@ -267,7 +267,7 @@ class _HomeState extends State with TickerProviderStateMixin { Destination(0, 'Teal', Icons.home, Colors.teal), Destination(1, 'Cyan', Icons.business, Colors.cyan), Destination(2, 'Orange', Icons.school, Colors.orange), - Destination(3, 'Blue', Icons.flight, Colors.blue) + Destination(3, 'Blue', Icons.flight, Colors.blue), ]; late final List> navigatorKeys; diff --git a/examples/api/lib/material/navigation_rail/navigation_rail.extended_animation.0.dart b/examples/api/lib/material/navigation_rail/navigation_rail.extended_animation.0.dart index 6197e944f6900..e0583df488812 100644 --- a/examples/api/lib/material/navigation_rail/navigation_rail.extended_animation.0.dart +++ b/examples/api/lib/material/navigation_rail/navigation_rail.extended_animation.0.dart @@ -83,7 +83,7 @@ class _MyNavigationRailState extends State { ], ), ), - ) + ), ], ); } diff --git a/examples/api/lib/material/platform_menu_bar/platform_menu_bar.0.dart b/examples/api/lib/material/platform_menu_bar/platform_menu_bar.0.dart index 8b27bad853e3f..88a7308456b0f 100644 --- a/examples/api/lib/material/platform_menu_bar/platform_menu_bar.0.dart +++ b/examples/api/lib/material/platform_menu_bar/platform_menu_bar.0.dart @@ -84,7 +84,7 @@ class _MyMenuBarAppState extends State { onSelected: () { _handleMenuSelection(MenuSelection.about); }, - ) + ), ], ), PlatformMenuItemGroup( @@ -118,7 +118,7 @@ class _MyMenuBarAppState extends State { }, ), ], - ) + ), ], ), if (PlatformProvidedMenuItem.hasMenu(PlatformProvidedMenuItemType.quit)) diff --git a/examples/api/lib/material/popupmenu/popupmenu.0.dart b/examples/api/lib/material/popupmenu/popupmenu.0.dart index 8e9709f3dba1c..76323dfb5bd73 100644 --- a/examples/api/lib/material/popupmenu/popupmenu.0.dart +++ b/examples/api/lib/material/popupmenu/popupmenu.0.dart @@ -65,7 +65,7 @@ class _MyStatefulWidgetState extends State { value: Menu.itemFour, child: Text('Item 4'), ), - ]) + ]), ], ), body: Center( diff --git a/examples/api/lib/material/scaffold/scaffold.of.0.dart b/examples/api/lib/material/scaffold/scaffold.of.0.dart index 48e7cebf20014..85c9046ab7bca 100644 --- a/examples/api/lib/material/scaffold/scaffold.of.0.dart +++ b/examples/api/lib/material/scaffold/scaffold.of.0.dart @@ -53,7 +53,7 @@ class MyScaffoldBody extends StatelessWidget { onPressed: () { Navigator.pop(context); }, - ) + ), ], ), ), diff --git a/examples/api/lib/material/scaffold/scaffold.of.1.dart b/examples/api/lib/material/scaffold/scaffold.of.1.dart index c2a73a2839cb3..b1ee37af70c3d 100644 --- a/examples/api/lib/material/scaffold/scaffold.of.1.dart +++ b/examples/api/lib/material/scaffold/scaffold.of.1.dart @@ -53,7 +53,7 @@ class MyStatelessWidget extends StatelessWidget { onPressed: () { Navigator.pop(context); }, - ) + ), ], ), ), diff --git a/examples/api/lib/material/scaffold/scaffold_state.show_bottom_sheet.0.dart b/examples/api/lib/material/scaffold/scaffold_state.show_bottom_sheet.0.dart index d3e6993b904d8..cdd742cf7da16 100644 --- a/examples/api/lib/material/scaffold/scaffold_state.show_bottom_sheet.0.dart +++ b/examples/api/lib/material/scaffold/scaffold_state.show_bottom_sheet.0.dart @@ -46,10 +46,11 @@ class MyStatelessWidget extends StatelessWidget { children: [ const Text('BottomSheet'), ElevatedButton( - child: const Text('Close BottomSheet'), - onPressed: () { - Navigator.pop(context); - }) + child: const Text('Close BottomSheet'), + onPressed: () { + Navigator.pop(context); + }, + ), ], ), ), diff --git a/examples/api/lib/ui/text/font_feature.font_feature_historical_ligatures.0.dart b/examples/api/lib/ui/text/font_feature.font_feature_historical_ligatures.0.dart index 459f1ca7f22ca..b95b954b51a8a 100644 --- a/examples/api/lib/ui/text/font_feature.font_feature_historical_ligatures.0.dart +++ b/examples/api/lib/ui/text/font_feature.font_feature_historical_ligatures.0.dart @@ -34,7 +34,7 @@ class ExampleWidget extends StatelessWidget { fontFamily: 'Sorts Mill Goudy', fontFeatures: [ FontFeature.historicalForms(), // Enables "hist". - FontFeature.historicalLigatures() // Enables "hlig". + FontFeature.historicalLigatures(), // Enables "hlig". ], ), ); diff --git a/examples/api/lib/widgets/async/future_builder.0.dart b/examples/api/lib/widgets/async/future_builder.0.dart index 20ff39576a8d2..512a10825c166 100644 --- a/examples/api/lib/widgets/async/future_builder.0.dart +++ b/examples/api/lib/widgets/async/future_builder.0.dart @@ -54,7 +54,7 @@ class _MyStatefulWidgetState extends State { Padding( padding: const EdgeInsets.only(top: 16), child: Text('Result: ${snapshot.data}'), - ) + ), ]; } else if (snapshot.hasError) { children = [ @@ -66,7 +66,7 @@ class _MyStatefulWidgetState extends State { Padding( padding: const EdgeInsets.only(top: 16), child: Text('Error: ${snapshot.error}'), - ) + ), ]; } else { children = const [ @@ -78,7 +78,7 @@ class _MyStatefulWidgetState extends State { Padding( padding: EdgeInsets.only(top: 16), child: Text('Awaiting result...'), - ) + ), ]; } return Center( diff --git a/examples/api/lib/widgets/async/stream_builder.0.dart b/examples/api/lib/widgets/async/stream_builder.0.dart index c7e313f0b8aa3..906f676a9726d 100644 --- a/examples/api/lib/widgets/async/stream_builder.0.dart +++ b/examples/api/lib/widgets/async/stream_builder.0.dart @@ -85,7 +85,7 @@ class _MyStatefulWidgetState extends State { Padding( padding: EdgeInsets.only(top: 16), child: Text('Select a lot'), - ) + ), ]; break; case ConnectionState.waiting: @@ -98,7 +98,7 @@ class _MyStatefulWidgetState extends State { Padding( padding: EdgeInsets.only(top: 16), child: Text('Awaiting bids...'), - ) + ), ]; break; case ConnectionState.active: @@ -111,7 +111,7 @@ class _MyStatefulWidgetState extends State { Padding( padding: const EdgeInsets.only(top: 16), child: Text('\$${snapshot.data}'), - ) + ), ]; break; case ConnectionState.done: @@ -124,7 +124,7 @@ class _MyStatefulWidgetState extends State { Padding( padding: const EdgeInsets.only(top: 16), child: Text('\$${snapshot.data} (closed)'), - ) + ), ]; break; } diff --git a/examples/api/lib/widgets/autofill/autofill_group.0.dart b/examples/api/lib/widgets/autofill/autofill_group.0.dart index d63badaceb718..dea0e1ae27308 100644 --- a/examples/api/lib/widgets/autofill/autofill_group.0.dart +++ b/examples/api/lib/widgets/autofill/autofill_group.0.dart @@ -84,13 +84,13 @@ class _MyStatefulWidgetState extends State { TextField( controller: billingAddress1, autofillHints: const [ - AutofillHints.streetAddressLine1 + AutofillHints.streetAddressLine1, ], ), TextField( controller: billingAddress2, autofillHints: const [ - AutofillHints.streetAddressLine2 + AutofillHints.streetAddressLine2, ], ), ], @@ -109,7 +109,7 @@ class _MyStatefulWidgetState extends State { TextField( controller: creditCardSecurityCode, autofillHints: const [ - AutofillHints.creditCardSecurityCode + AutofillHints.creditCardSecurityCode, ], ), ], diff --git a/examples/api/lib/widgets/interactive_viewer/interactive_viewer.builder.0.dart b/examples/api/lib/widgets/interactive_viewer/interactive_viewer.builder.0.dart index 3b99f87434d43..3fad51b78055b 100644 --- a/examples/api/lib/widgets/interactive_viewer/interactive_viewer.builder.0.dart +++ b/examples/api/lib/widgets/interactive_viewer/interactive_viewer.builder.0.dart @@ -43,7 +43,7 @@ class _IVBuilderExampleState extends State<_IVBuilderExample> { for (final Vector3 point in [ quad.point1, quad.point2, - quad.point3 + quad.point3, ]) { if (point.x < xMin) { xMin = point.x; diff --git a/examples/api/lib/widgets/nested_scroll_view/nested_scroll_view.2.dart b/examples/api/lib/widgets/nested_scroll_view/nested_scroll_view.2.dart index f858793ccf9f3..bc6dd2f1f792d 100644 --- a/examples/api/lib/widgets/nested_scroll_view/nested_scroll_view.2.dart +++ b/examples/api/lib/widgets/nested_scroll_view/nested_scroll_view.2.dart @@ -40,7 +40,7 @@ class MyStatelessWidget extends StatelessWidget { expandedHeight: 200.0, forceElevated: innerBoxIsScrolled, ), - ) + ), ]; }, body: Builder(builder: (BuildContext context) { return CustomScrollView( diff --git a/examples/api/lib/widgets/page_storage/page_storage.0.dart b/examples/api/lib/widgets/page_storage/page_storage.0.dart index 5bce2dfcdd428..bb7147d927354 100644 --- a/examples/api/lib/widgets/page_storage/page_storage.0.dart +++ b/examples/api/lib/widgets/page_storage/page_storage.0.dart @@ -33,7 +33,7 @@ class _MyHomePageState extends State { ), ColorBoxPage( key: PageStorageKey('pageTwo'), - ) + ), ]; int currentTab = 0; final PageStorageBucket _bucket = PageStorageBucket(); diff --git a/examples/api/lib/widgets/page_view/page_view.0.dart b/examples/api/lib/widgets/page_view/page_view.0.dart index e18fe940fa3fb..798dbad3e6b6e 100644 --- a/examples/api/lib/widgets/page_view/page_view.0.dart +++ b/examples/api/lib/widgets/page_view/page_view.0.dart @@ -44,7 +44,7 @@ class MyStatelessWidget extends StatelessWidget { ), Center( child: Text('Third Page'), - ) + ), ], ); } diff --git a/examples/api/lib/widgets/transitions/decorated_box_transition.0.dart b/examples/api/lib/widgets/transitions/decorated_box_transition.0.dart index 86fac6523a10b..5aa8641882a83 100644 --- a/examples/api/lib/widgets/transitions/decorated_box_transition.0.dart +++ b/examples/api/lib/widgets/transitions/decorated_box_transition.0.dart @@ -43,7 +43,7 @@ class _MyStatefulWidgetState extends State blurRadius: 10.0, spreadRadius: 3.0, offset: Offset(0, 6.0), - ) + ), ], ), end: BoxDecoration( diff --git a/examples/api/lib/widgets/transitions/sliver_fade_transition.0.dart b/examples/api/lib/widgets/transitions/sliver_fade_transition.0.dart index 2440e70ad7a51..9d35ea32f55be 100644 --- a/examples/api/lib/widgets/transitions/sliver_fade_transition.0.dart +++ b/examples/api/lib/widgets/transitions/sliver_fade_transition.0.dart @@ -80,7 +80,7 @@ class _MyStatefulWidgetState extends State childCount: 5, ), ), - ) + ), ]); } } diff --git a/packages/flutter/lib/src/material/theme_data.dart b/packages/flutter/lib/src/material/theme_data.dart index 6ba18ba581f54..40b8e54ed1bd7 100644 --- a/packages/flutter/lib/src/material/theme_data.dart +++ b/packages/flutter/lib/src/material/theme_data.dart @@ -1907,7 +1907,7 @@ class ThemeData with Diagnosticable { static Map> _themeExtensionIterableToMap(Iterable> extensionsIterable) { return Map>.unmodifiable(>{ // Strangely, the cast is necessary for tests to run. - for (final ThemeExtension extension in extensionsIterable) extension.type: extension as ThemeExtension> + for (final ThemeExtension extension in extensionsIterable) extension.type: extension as ThemeExtension>, }); } diff --git a/packages/flutter/test/material/app_test.dart b/packages/flutter/test/material/app_test.dart index 6279e9a60fed2..505c40b3ec220 100644 --- a/packages/flutter/test/material/app_test.dart +++ b/packages/flutter/test/material/app_test.dart @@ -1076,9 +1076,9 @@ void main() { height: 1000.0, width: 1000.0, child: Text('Test'), - ) - ] - ) + ), + ], + ), )); expect(find.byType(StretchingOverscrollIndicator), findsNothing); @@ -1094,9 +1094,9 @@ void main() { height: 1000.0, width: 1000.0, child: Text('Test'), - ) - ] - ) + ), + ], + ), )); expect(find.byType(StretchingOverscrollIndicator), findsOneWidget); @@ -1106,15 +1106,15 @@ void main() { testWidgets('ScrollBehavior stretch android overscroll indicator via useMaterial3 flag', (WidgetTester tester) async { await tester.pumpWidget(MaterialApp( theme: ThemeData(useMaterial3: true), - home: ListView( - children: const [ - SizedBox( - height: 1000.0, - width: 1000.0, - child: Text('Test'), - ) - ] - ) + home: ListView( + children: const [ + SizedBox( + height: 1000.0, + width: 1000.0, + child: Text('Test'), + ), + ], + ), )); expect(find.byType(StretchingOverscrollIndicator), findsOneWidget); @@ -1131,9 +1131,9 @@ void main() { height: 1000.0, width: 1000.0, child: Text('Test'), - ) - ] - ) + ), + ], + ), )); expect(find.byType(StretchingOverscrollIndicator), findsOneWidget); @@ -1151,9 +1151,9 @@ void main() { height: 1000.0, width: 1000.0, child: Text('Test'), - ) - ] - ) + ), + ], + ), )); expect(find.byType(StretchingOverscrollIndicator), findsOneWidget); diff --git a/packages/flutter/test/material/dropdown_test.dart b/packages/flutter/test/material/dropdown_test.dart index 2fcdaa4d6de28..4a0dae1266809 100644 --- a/packages/flutter/test/material/dropdown_test.dart +++ b/packages/flutter/test/material/dropdown_test.dart @@ -3322,7 +3322,7 @@ void main() { alignment: buttonAlignment ?? AlignmentDirectional.centerStart, value: 'enabled', child: const Text('enabled'), - ) + ), ], ), ), @@ -3573,7 +3573,7 @@ void main() { value, 'Two', 'Free', - 'Four' + 'Four', ].map>((String value) { return DropdownMenuItem( value: value, diff --git a/packages/flutter/test/material/popup_menu_test.dart b/packages/flutter/test/material/popup_menu_test.dart index 91b8e617ac268..dd808690d9a30 100644 --- a/packages/flutter/test/material/popup_menu_test.dart +++ b/packages/flutter/test/material/popup_menu_test.dart @@ -869,8 +869,8 @@ void main() { bounds: Rect.fromLTRB(390, 0, 410, 600), type: DisplayFeatureType.cutout, state: DisplayFeatureState.unknown, - ) - ] + ), + ], ), child: Scaffold( body: Navigator( @@ -2215,20 +2215,22 @@ void main() { home: Scaffold( appBar: AppBar( title: const Text('PopupMenu Test'), - actions: [PopupMenuButton( - child: SizedBox( - key: buttonKey, - height: height, - width: width, - child: const ColoredBox( - color: Colors.pink, + actions: [ + PopupMenuButton( + child: SizedBox( + key: buttonKey, + height: height, + width: width, + child: const ColoredBox( + color: Colors.pink, + ), ), + itemBuilder: (BuildContext context) => >[ + const PopupMenuItem(value: 1, child: Text('-1-')), + const PopupMenuItem(value: 2, child: Text('-2-')), + ], ), - itemBuilder: (BuildContext context) => >[ - const PopupMenuItem(value: 1, child: Text('-1-')), - const PopupMenuItem(value: 2, child: Text('-2-')), - ], - )], + ], ), body: Container(), ), @@ -2269,30 +2271,32 @@ void main() { home: Scaffold( appBar: AppBar( title: const Text('PopupMenu Test'), - actions: [PopupMenuButton( - child: SizedBox( - key: buttonKey, - height: height, - width: width, - child: const ColoredBox( - color: Colors.pink, + actions: [ + PopupMenuButton( + child: SizedBox( + key: buttonKey, + height: height, + width: width, + child: const ColoredBox( + color: Colors.pink, + ), ), - ), - itemBuilder: (BuildContext context) { - return >[ - PopupMenuItem( - value: 1, - child: Builder( - builder: (BuildContext context) { - mediaQueryPadding = MediaQuery.of(context).padding; - return Text('-1-' * 500); // A long long text string. - }, + itemBuilder: (BuildContext context) { + return >[ + PopupMenuItem( + value: 1, + child: Builder( + builder: (BuildContext context) { + mediaQueryPadding = MediaQuery.of(context).padding; + return Text('-1-' * 500); // A long long text string. + }, + ), ), - ), - const PopupMenuItem(value: 2, child: Text('-2-')), - ]; - }, - )], + const PopupMenuItem(value: 2, child: Text('-2-')), + ]; + }, + ), + ], ), body: const SizedBox.shrink(), ), @@ -2570,7 +2574,7 @@ void main() { splashRadius: splashRadius, child: const Text('An item'), itemBuilder: (_) => >[ - const PopupMenuDivider() + const PopupMenuDivider(), ], ), ), diff --git a/packages/flutter/test/material/scrollbar_theme_test.dart b/packages/flutter/test/material/scrollbar_theme_test.dart index 1a876dafe894f..4182c511c9f99 100644 --- a/packages/flutter/test/material/scrollbar_theme_test.dart +++ b/packages/flutter/test/material/scrollbar_theme_test.dart @@ -662,7 +662,7 @@ void main() { "trackBorderColor: Instance of '_MaterialStatePropertyWith'", 'crossAxisMargin: 3.0', 'mainAxisMargin: 6.0', - 'minThumbLength: 120.0' + 'minThumbLength: 120.0', ]); // On the web, Dart doubles and ints are backed by the same kind of object because diff --git a/packages/flutter/test/material/slider_theme_test.dart b/packages/flutter/test/material/slider_theme_test.dart index e890fdd064dc2..0a51d8406e1a2 100644 --- a/packages/flutter/test/material/slider_theme_test.dart +++ b/packages/flutter/test/material/slider_theme_test.dart @@ -90,7 +90,7 @@ void main() { "rangeValueIndicatorShape: Instance of 'PaddleRangeSliderValueIndicatorShape'", 'showValueIndicator: always', 'valueIndicatorTextStyle: TextStyle(inherit: true, color: Color(0xff000000))', - 'mouseCursor: MaterialStateMouseCursor(clickable)' + 'mouseCursor: MaterialStateMouseCursor(clickable)', ]); }); diff --git a/packages/flutter/test/material/theme_data_test.dart b/packages/flutter/test/material/theme_data_test.dart index d44e5039d8675..2bedf53a3f1f4 100644 --- a/packages/flutter/test/material/theme_data_test.dart +++ b/packages/flutter/test/material/theme_data_test.dart @@ -447,7 +447,7 @@ void main() { ), MyThemeExtensionB( textStyle: TextStyle(fontSize: 50), - ) + ), }, ), home: Container(key: containerKey), diff --git a/packages/flutter/test/material/tooltip_test.dart b/packages/flutter/test/material/tooltip_test.dart index 2d25385bc6dc9..fcd72b1590fbd 100644 --- a/packages/flutter/test/material/tooltip_test.dart +++ b/packages/flutter/test/material/tooltip_test.dart @@ -1144,7 +1144,7 @@ void main() { waitDuration: waitDuration, showDuration: Duration(days: 1), child: Text('tooltip2'), - ) + ), ], ), ), diff --git a/packages/flutter/test/material/will_pop_test.dart b/packages/flutter/test/material/will_pop_test.dart index 6a8d0903585c2..80fef13b78950 100644 --- a/packages/flutter/test/material/will_pop_test.dart +++ b/packages/flutter/test/material/will_pop_test.dart @@ -410,7 +410,7 @@ void main() { child: const Text('anchor'), ); }, - ) + ), ]; Widget _buildNavigator(Key? key, List> pages) { diff --git a/packages/flutter/test/painting/_network_image_test_web.dart b/packages/flutter/test/painting/_network_image_test_web.dart index ff50f10e00d7c..bd1769309f12c 100644 --- a/packages/flutter/test/painting/_network_image_test_web.dart +++ b/packages/flutter/test/painting/_network_image_test_web.dart @@ -33,7 +33,7 @@ void runTests() { const Map headers = { 'flutter': 'flutter', - 'second': 'second' + 'second': 'second', }; final Image image = Image.network( @@ -60,7 +60,7 @@ void runTests() { const Map headers = { 'flutter': 'flutter', - 'second': 'second' + 'second': 'second', }; final Image image = Image.network( @@ -87,7 +87,7 @@ void runTests() { const Map headers = { 'flutter': 'flutter', - 'second': 'second' + 'second': 'second', }; final Image image = Image.network( diff --git a/packages/flutter/test/scheduler/scheduler_test.dart b/packages/flutter/test/scheduler/scheduler_test.dart index 50e1f6b206ec2..84b50c66e9c34 100644 --- a/packages/flutter/test/scheduler/scheduler_test.dart +++ b/packages/flutter/test/scheduler/scheduler_test.dart @@ -140,15 +140,17 @@ void main() { }); test('Flutter.Frame event fired', () async { - SchedulerBinding.instance.platformDispatcher.onReportTimings!([FrameTiming( - vsyncStart: 5000, - buildStart: 10000, - buildFinish: 15000, - rasterStart: 16000, - rasterFinish: 20000, - rasterFinishWallTime: 20010, - frameNumber: 1991 - )]); + SchedulerBinding.instance.platformDispatcher.onReportTimings!([ + FrameTiming( + vsyncStart: 5000, + buildStart: 10000, + buildFinish: 15000, + rasterStart: 16000, + rasterFinish: 20000, + rasterFinishWallTime: 20010, + frameNumber: 1991, + ), + ]); final List> events = scheduler.getEventsDispatched('Flutter.Frame'); expect(events, hasLength(1)); diff --git a/packages/flutter/test/services/system_chrome_test.dart b/packages/flutter/test/services/system_chrome_test.dart index b39fa929a1806..4b2ae76d6c6e2 100644 --- a/packages/flutter/test/services/system_chrome_test.dart +++ b/packages/flutter/test/services/system_chrome_test.dart @@ -34,7 +34,7 @@ void main() { 'statusBarBrightness': 'Brightness.dark', 'statusBarIconBrightness': 'Brightness.light', 'systemNavigationBarIconBrightness': 'Brightness.light', - 'systemNavigationBarContrastEnforced': null + 'systemNavigationBarContrastEnforced': null, }, )); log.clear(); @@ -47,7 +47,7 @@ void main() { SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( systemStatusBarContrastEnforced: false, - systemNavigationBarContrastEnforced: true + systemNavigationBarContrastEnforced: true, )); expect(tester.binding.microtaskCount, equals(1)); await tester.idle(); @@ -62,7 +62,7 @@ void main() { 'statusBarBrightness': null, 'statusBarIconBrightness': null, 'systemNavigationBarIconBrightness': null, - 'systemNavigationBarContrastEnforced': true + 'systemNavigationBarContrastEnforced': true, }, )); }); diff --git a/packages/flutter/test/widgets/actions_test.dart b/packages/flutter/test/widgets/actions_test.dart index 3cee40c5538ce..9f0401ba389ab 100644 --- a/packages/flutter/test/widgets/actions_test.dart +++ b/packages/flutter/test/widgets/actions_test.dart @@ -1470,7 +1470,7 @@ void main() { setState = stateSetter; return Actions( actions: > { - if (action2LookupContext != null) LogIntent: Action.overridable(defaultAction: LogInvocationAction(actionName: 'action2'), context: action2LookupContext!) + if (action2LookupContext != null) LogIntent: Action.overridable(defaultAction: LogInvocationAction(actionName: 'action2'), context: action2LookupContext!), }, child: Builder( builder: (BuildContext context3) { @@ -1579,7 +1579,7 @@ void main() { context: context2, ), context: context3, - ) + ), }, child: Builder( builder: (BuildContext context4) { diff --git a/packages/flutter/test/widgets/animated_size_test.dart b/packages/flutter/test/widgets/animated_size_test.dart index d58d61f1630b9..9d2a5cb29cd3b 100644 --- a/packages/flutter/test/widgets/animated_size_test.dart +++ b/packages/flutter/test/widgets/animated_size_test.dart @@ -389,7 +389,7 @@ void main() { const SizedBox( key: key2, height: 200, - ) + ), ], ), ) @@ -416,10 +416,10 @@ void main() { key: key2, height: 200, child: animatedSize, - ) + ), ], ), - ) + ), ); expect( diff --git a/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart b/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart index 28375d25328c2..50516495c87fc 100644 --- a/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart +++ b/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart @@ -1016,7 +1016,7 @@ void main() { _boilerplate( null, controller: controller, - ) + ), ], ), ), null, EnginePhase.build); diff --git a/packages/flutter/test/widgets/layout_builder_and_parent_data_test.dart b/packages/flutter/test/widgets/layout_builder_and_parent_data_test.dart index a6ab9a32b23eb..70f42972262b1 100644 --- a/packages/flutter/test/widgets/layout_builder_and_parent_data_test.dart +++ b/packages/flutter/test/widgets/layout_builder_and_parent_data_test.dart @@ -60,10 +60,12 @@ void main() { int frame = 1; await tester.pumpWidget(SizeChanger( // when this is triggered, the child LayoutBuilder will build again child: LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) { - return Column(children: [Expanded( - flex: frame, // this is different after the next pump, so that the parentData has to be applied again - child: Container(height: 100.0), - )]); + return Column(children: [ + Expanded( + flex: frame, // this is different after the next pump, so that the parentData has to be applied again + child: Container(height: 100.0), + ), + ]); }), )); frame += 1; diff --git a/packages/flutter/test/widgets/overscroll_stretch_indicator_test.dart b/packages/flutter/test/widgets/overscroll_stretch_indicator_test.dart index e4129e5713a35..341f4924962d8 100644 --- a/packages/flutter/test/widgets/overscroll_stretch_indicator_test.dart +++ b/packages/flutter/test/widgets/overscroll_stretch_indicator_test.dart @@ -368,11 +368,11 @@ void main() { color: const Color(0xD0FF0000), height: 100, ), - ) + ), ], - ) + ), ), - ) + ), )); expect(find.text('Index 1'), findsOneWidget); @@ -396,41 +396,43 @@ void main() { testWidgets('Clip behavior is updated as needed', (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/issues/97867 - await tester.pumpWidget(Directionality( + await tester.pumpWidget( + Directionality( textDirection: TextDirection.ltr, child: MediaQuery( data: const MediaQueryData(size: Size(800.0, 600.0)), child: ScrollConfiguration( - behavior: const ScrollBehavior().copyWith(overscroll: false), - child: Column( - children: [ - StretchingOverscrollIndicator( - axisDirection: AxisDirection.down, - child: SizedBox( - height: 300, - child: ListView.builder( - itemCount: 20, - itemBuilder: (BuildContext context, int index){ - return Padding( - padding: const EdgeInsets.all(10.0), - child: Text('Index $index'), - ); - }, - ), + behavior: const ScrollBehavior().copyWith(overscroll: false), + child: Column( + children: [ + StretchingOverscrollIndicator( + axisDirection: AxisDirection.down, + child: SizedBox( + height: 300, + child: ListView.builder( + itemCount: 20, + itemBuilder: (BuildContext context, int index){ + return Padding( + padding: const EdgeInsets.all(10.0), + child: Text('Index $index'), + ); + }, ), ), - Opacity( - opacity: 0.5, - child: Container( - color: const Color(0xD0FF0000), - height: 100, - ), - ) - ], - ) + ), + Opacity( + opacity: 0.5, + child: Container( + color: const Color(0xD0FF0000), + height: 100, + ), + ), + ], + ), ), - ) - )); + ), + ), + ); expect(find.text('Index 1'), findsOneWidget); expect(tester.getCenter(find.text('Index 1')).dy, 51.0); diff --git a/packages/flutter/test/widgets/platform_menu_bar_test.dart b/packages/flutter/test/widgets/platform_menu_bar_test.dart index 1034afdd27c07..cd0a02c9e53a6 100644 --- a/packages/flutter/test/widgets/platform_menu_bar_test.dart +++ b/packages/flutter/test/widgets/platform_menu_bar_test.dart @@ -131,15 +131,15 @@ void main() { 'enabled': true, 'shortcutTrigger': 100, 'shortcutModifiers': 1, - } - ] + }, + ], }, { 'id': 17, 'label': 'Sub Menu 12', 'enabled': true, - } - ] + }, + ], }, { 'id': 20, @@ -153,8 +153,8 @@ void main() { }, ], }, - {'id': 21, 'label': 'Menu 3', 'enabled': false, 'children': >[]} - ] + {'id': 21, 'label': 'Menu 3', 'enabled': false, 'children': >[]}, + ], }), ); }); diff --git a/packages/flutter/test/widgets/scroll_behavior_test.dart b/packages/flutter/test/widgets/scroll_behavior_test.dart index 434990a2650a6..b45583b6fccf6 100644 --- a/packages/flutter/test/widgets/scroll_behavior_test.dart +++ b/packages/flutter/test/widgets/scroll_behavior_test.dart @@ -82,7 +82,8 @@ void main() { }); testWidgets('ScrollBehavior default android overscroll indicator', (WidgetTester tester) async { - await tester.pumpWidget(Directionality( + await tester.pumpWidget( + Directionality( textDirection: TextDirection.ltr, child: ScrollConfiguration( behavior: const ScrollBehavior(), @@ -92,35 +93,38 @@ void main() { height: 1000.0, width: 1000.0, child: Text('Test'), - ) - ] - ) + ), + ], + ), ), - )); + ), + ); expect(find.byType(StretchingOverscrollIndicator), findsNothing); expect(find.byType(GlowingOverscrollIndicator), findsOneWidget); }, variant: TargetPlatformVariant.only(TargetPlatform.android)); testWidgets('ScrollBehavior stretch android overscroll indicator', (WidgetTester tester) async { - await tester.pumpWidget(Directionality( - textDirection: TextDirection.ltr, - child: MediaQuery( - data: const MediaQueryData(size: Size(800, 600)), - child: ScrollConfiguration( + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: MediaQuery( + data: const MediaQueryData(size: Size(800, 600)), + child: ScrollConfiguration( behavior: const ScrollBehavior(androidOverscrollIndicator: AndroidOverscrollIndicator.stretch), child: ListView( - children: const [ - SizedBox( - height: 1000.0, - width: 1000.0, - child: Text('Test'), - ) - ] - ) + children: const [ + SizedBox( + height: 1000.0, + width: 1000.0, + child: Text('Test'), + ), + ], + ), + ), ), ), - )); + ); expect(find.byType(StretchingOverscrollIndicator), findsOneWidget); expect(find.byType(GlowingOverscrollIndicator), findsNothing); diff --git a/packages/flutter/test/widgets/scrollable_test.dart b/packages/flutter/test/widgets/scrollable_test.dart index 4a63048f3dbff..b5b6689cbccc1 100644 --- a/packages/flutter/test/widgets/scrollable_test.dart +++ b/packages/flutter/test/widgets/scrollable_test.dart @@ -402,12 +402,14 @@ void main() { MaterialApp( home: CustomScrollView( physics: canDrag ? const AlwaysScrollableScrollPhysics() : const NeverScrollableScrollPhysics(), - slivers: [SliverToBoxAdapter( - child: SizedBox( - height: 2000, - child: GestureDetector(onTap: () {}), + slivers: [ + SliverToBoxAdapter( + child: SizedBox( + height: 2000, + child: GestureDetector(onTap: () {}), + ), ), - )], + ], ), ), ); diff --git a/packages/flutter/test/widgets/selectable_text_test.dart b/packages/flutter/test/widgets/selectable_text_test.dart index c56899bacbc5e..3e28b67093928 100644 --- a/packages/flutter/test/widgets/selectable_text_test.dart +++ b/packages/flutter/test/widgets/selectable_text_test.dart @@ -2197,7 +2197,7 @@ void main() { actions: [SemanticsAction.longPress], label: 'German greeting for good day', textDirection: TextDirection.ltr, - ) + ), ], ), ignoreTransform: true, ignoreRect: true)); }); @@ -2398,7 +2398,7 @@ void main() { TestSemantics( flags: [ SemanticsFlag.isHidden, - SemanticsFlag.isLink + SemanticsFlag.isLink, ], actions: [SemanticsAction.tap], label: 'off screen', diff --git a/packages/flutter/test/widgets/transform_test.dart b/packages/flutter/test/widgets/transform_test.dart index a21056e86a86b..751006a574c5e 100644 --- a/packages/flutter/test/widgets/transform_test.dart +++ b/packages/flutter/test/widgets/transform_test.dart @@ -411,8 +411,8 @@ void main() { 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, - 25.0, 25.0, 0.0, 1.0] - ); + 25.0, 25.0, 0.0, 1.0, + ]); }); testWidgets('Transform.scale with FilterQuality produces filter layer', (WidgetTester tester) async { @@ -429,8 +429,8 @@ void main() { 3.14159, 0.0, 0.0, 0.0, 0.0, 3.14159, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, - -856.636, -642.477, 0.0, 1.0] - ); + -856.636, -642.477, 0.0, 1.0, + ]); }); testWidgets('Transform.rotate with FilterQuality produces filter layer', (WidgetTester tester) async { @@ -447,8 +447,8 @@ void main() { moreOrLessEquals(0.7071067811865476), moreOrLessEquals(0.7071067811865475), 0.0, 0.0, moreOrLessEquals(-0.7071067811865475), moreOrLessEquals(0.7071067811865476), 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, - moreOrLessEquals(329.28932188134524), moreOrLessEquals(-194.97474683058329), 0.0, 1.0] - ); + moreOrLessEquals(329.28932188134524), moreOrLessEquals(-194.97474683058329), 0.0, 1.0, + ]); }); testWidgets('Offset Transform.rotate with FilterQuality produces filter layer', (WidgetTester tester) async { @@ -469,8 +469,8 @@ void main() { moreOrLessEquals(0.7071067811865476), moreOrLessEquals(0.7071067811865475), 0.0, 0.0, moreOrLessEquals(-0.7071067811865475), moreOrLessEquals(0.7071067811865476), 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, - moreOrLessEquals(329.28932188134524), moreOrLessEquals(-194.97474683058329), 0.0, 1.0] - ); + moreOrLessEquals(329.28932188134524), moreOrLessEquals(-194.97474683058329), 0.0, 1.0, + ]); }); testWidgets('Transform layers update to match child and filterQuality', (WidgetTester tester) async { diff --git a/packages/flutter/test/widgets/transitions_test.dart b/packages/flutter/test/widgets/transitions_test.dart index 07dee3f06abe5..47b6809a3bc0d 100644 --- a/packages/flutter/test/widgets/transitions_test.dart +++ b/packages/flutter/test/widgets/transitions_test.dart @@ -25,11 +25,13 @@ void main() { width: 4.0, ), borderRadius: BorderRadius.zero, - boxShadow: const [BoxShadow( - color: Color(0x66000000), - blurRadius: 10.0, - spreadRadius: 4.0, - )], + boxShadow: const [ + BoxShadow( + color: Color(0x66000000), + blurRadius: 10.0, + spreadRadius: 4.0, + ), + ], ), end: BoxDecoration( color: const Color(0xFF000000), diff --git a/packages/flutter_driver/lib/src/common/wait.dart b/packages/flutter_driver/lib/src/common/wait.dart index b0cc8cfbb4e24..d6dd2b9954e6f 100644 --- a/packages/flutter_driver/lib/src/common/wait.dart +++ b/packages/flutter_driver/lib/src/common/wait.dart @@ -65,7 +65,7 @@ abstract class SerializableWaitCondition { /// Serializes the object to JSON. Map serialize() { return { - 'conditionName': conditionName + 'conditionName': conditionName, }; } diff --git a/packages/flutter_driver/test/src/real_tests/extension_test.dart b/packages/flutter_driver/test/src/real_tests/extension_test.dart index ae197b5bd3a61..99b0b302909a3 100644 --- a/packages/flutter_driver/test/src/real_tests/extension_test.dart +++ b/packages/flutter_driver/test/src/real_tests/extension_test.dart @@ -1154,9 +1154,8 @@ void main() { height: 0, width: 0, child: Text('World!', key: Key('widgetTwo')), - ) - ], - ), + ), + ]), ), ); diff --git a/packages/flutter_driver/test/src/real_tests/flutter_driver_test.dart b/packages/flutter_driver/test/src/real_tests/flutter_driver_test.dart index 8679f66bf826d..3888da784135b 100644 --- a/packages/flutter_driver/test/src/real_tests/flutter_driver_test.dart +++ b/packages/flutter_driver/test/src/real_tests/flutter_driver_test.dart @@ -108,7 +108,7 @@ void main() { await driver.waitFor(find.byTooltip('foo'), timeout: _kTestTimeout); expect(log, [ 'VMServiceFlutterDriver: >>> {command: waitFor, timeout: $_kSerializedTestTimeout, finderType: ByTooltipMessage, text: foo}', - 'VMServiceFlutterDriver: <<< {isError: false, response: {status: ok}}' + 'VMServiceFlutterDriver: <<< {isError: false, response: {status: ok}}', ]); }); @@ -587,7 +587,7 @@ void main() { 'setVMTimelineFlags [Dart, GC, Compiler]', 'getFlagList', 'setVMTimelineFlags []', - 'getVMTimeline null null' + 'getVMTimeline null null', ]); expect(timeline.events!.single.name, 'test event'); @@ -679,7 +679,7 @@ void main() { expect(fakeClient.commandLog, [ 'ext.flutter.driver {command: set_frame_sync, enabled: false}', 'ext.flutter.driver {command: waitFor, timeout: $_kSerializedTestTimeout, finderType: ByTooltipMessage, text: foo}', - 'ext.flutter.driver {command: set_frame_sync, enabled: true}' + 'ext.flutter.driver {command: set_frame_sync, enabled: true}', ]); }); }); diff --git a/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart b/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart index f5287e50b4599..0c0c94098060e 100644 --- a/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart +++ b/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart @@ -53,8 +53,8 @@ void main() { 'ph': 'b', 'ts': timeStamp, 'args': { - 'vsync_transitions_missed': vsyncsMissed.toString() - } + 'vsync_transitions_missed': vsyncsMissed.toString(), + }, }; Map lagEnd(int timeStamp, int vsyncsMissed) => { @@ -62,8 +62,8 @@ void main() { 'ph': 'e', 'ts': timeStamp, 'args': { - 'vsync_transitions_missed': vsyncsMissed.toString() - } + 'vsync_transitions_missed': vsyncsMissed.toString(), + }, }; Map cpuUsage(int timeStamp, double cpuUsage) => { @@ -71,8 +71,8 @@ void main() { 'name': 'CpuUsage', 'ts': timeStamp, 'args': { - 'total_cpu_usage': cpuUsage.toString() - } + 'total_cpu_usage': cpuUsage.toString(), + }, }; Map memoryUsage(int timeStamp, double dirty, double shared) => { @@ -82,7 +82,7 @@ void main() { 'args': { 'owned_shared_memory_usage': shared.toString(), 'dirty_memory_usage': dirty.toString(), - } + }, }; Map platformVsync(int timeStamp) => { @@ -98,7 +98,7 @@ void main() { 'args': { 'StartTime': startTime, 'TargetTime': endTime, - } + }, }; List> _genGC(String name, int count, int startTime, int timeDiff) { diff --git a/packages/flutter_driver/test/src/real_tests/wait_test.dart b/packages/flutter_driver/test/src/real_tests/wait_test.dart index adf99a45e8a48..ebbe0d780c941 100644 --- a/packages/flutter_driver/test/src/real_tests/wait_test.dart +++ b/packages/flutter_driver/test/src/real_tests/wait_test.dart @@ -135,7 +135,7 @@ void main() { const CombinedCondition combinedCondition = CombinedCondition([ NoTransientCallbacks(), - NoPendingFrame() + NoPendingFrame(), ]); expect(combinedCondition.serialize(), { diff --git a/packages/flutter_goldens/test/flutter_goldens_test.dart b/packages/flutter_goldens/test/flutter_goldens_test.dart index 4363c0416da4e..bdcdd7983022b 100644 --- a/packages/flutter_goldens/test/flutter_goldens_test.dart +++ b/packages/flutter_goldens/test/flutter_goldens_test.dart @@ -22,11 +22,12 @@ import 'json_templates.dart'; const String _kFlutterRoot = '/flutter'; // 1x1 transparent pixel -const List _kTestPngBytes = -[137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, +const List _kTestPngBytes = [ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 11, 73, 68, 65, 84, 120, 1, 99, 97, 0, 2, 0, 0, 25, 0, 5, 144, 240, 54, 245, 0, 0, 0, 0, 73, 69, - 78, 68, 174, 66, 96, 130]; + 78, 68, 174, 66, 96, 130, +]; void main() { late MemoryFileSystem fs; @@ -547,7 +548,7 @@ void main() { 'SWARMING_TASK_ID' : '12345678990', 'GOLDCTL' : 'goldctl', }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterPostSubmitFileComparator.isAvailableForEnvironment(platform), @@ -561,7 +562,7 @@ void main() { 'FLUTTER_ROOT': _kFlutterRoot, 'SWARMING_TASK_ID' : '12345678990', }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterPostSubmitFileComparator.isAvailableForEnvironment(platform), @@ -575,9 +576,9 @@ void main() { 'FLUTTER_ROOT': _kFlutterRoot, 'SWARMING_TASK_ID' : '12345678990', 'GOLDCTL' : 'goldctl', - 'GOLD_TRYJOB' : 'git/ref/12345/head' + 'GOLD_TRYJOB' : 'git/ref/12345/head', }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterPostSubmitFileComparator.isAvailableForEnvironment(platform), @@ -592,9 +593,9 @@ void main() { 'CIRRUS_CI': 'true', 'CIRRUS_PR': '', 'CIRRUS_BRANCH': 'master', - 'GOLD_SERVICE_ACCOUNT': 'service account...' + 'GOLD_SERVICE_ACCOUNT': 'service account...', }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterPostSubmitFileComparator.isAvailableForEnvironment(platform), @@ -664,9 +665,9 @@ void main() { 'FLUTTER_ROOT': _kFlutterRoot, 'SWARMING_TASK_ID' : '12345678990', 'GOLDCTL' : 'goldctl', - 'GOLD_TRYJOB' : 'git/ref/12345/head' + 'GOLD_TRYJOB' : 'git/ref/12345/head', }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterPreSubmitFileComparator.isAvailableForEnvironment(platform), @@ -679,7 +680,7 @@ void main() { environment: { 'FLUTTER_ROOT': _kFlutterRoot, }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterPreSubmitFileComparator.isAvailableForEnvironment(platform), @@ -692,9 +693,9 @@ void main() { environment: { 'FLUTTER_ROOT': _kFlutterRoot, 'SWARMING_TASK_ID' : '12345678990', - 'GOLD_TRYJOB' : 'git/ref/12345/head' + 'GOLD_TRYJOB' : 'git/ref/12345/head', }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterPreSubmitFileComparator.isAvailableForEnvironment(platform), @@ -709,7 +710,7 @@ void main() { 'SWARMING_TASK_ID' : '12345678990', 'GOLDCTL' : 'goldctl', }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterPreSubmitFileComparator.isAvailableForEnvironment(platform), @@ -724,9 +725,9 @@ void main() { 'CIRRUS_CI': 'true', 'CIRRUS_PR': '', 'CIRRUS_BRANCH': 'master', - 'GOLD_SERVICE_ACCOUNT': 'service account...' + 'GOLD_SERVICE_ACCOUNT': 'service account...', }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterPostSubmitFileComparator.isAvailableForEnvironment(platform), @@ -744,7 +745,7 @@ void main() { 'FLUTTER_ROOT': _kFlutterRoot, 'CIRRUS_CI' : 'yep', }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterSkippingFileComparator.isAvailableForEnvironment(platform), @@ -771,7 +772,7 @@ void main() { environment: { 'FLUTTER_ROOT': _kFlutterRoot, }, - operatingSystem: 'macos' + operatingSystem: 'macos', ); expect( FlutterSkippingFileComparator.isAvailableForEnvironment( @@ -795,7 +796,7 @@ void main() { fs: fs, platform: FakePlatform( environment: {'FLUTTER_ROOT': _kFlutterRoot}, - operatingSystem: 'macos' + operatingSystem: 'macos', ), ); diff --git a/packages/flutter_goldens/test/json_templates.dart b/packages/flutter_goldens/test/json_templates.dart index 2791a23c0ac68..d6e7d624e878a 100644 --- a/packages/flutter_goldens/test/json_templates.dart +++ b/packages/flutter_goldens/test/json_templates.dart @@ -20,10 +20,14 @@ String authTemplate({ /// https://flutter-gold.skia.org/img/images/[imageHash].png List> imageResponseTemplate() { return >[ - [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, - 72, 68, 82, 0, 0, 0, 1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0], - [0, 0, 11, 73, 68, 65, 84, 120, 1, 99, 97, 0, 2, 0, + [ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, + 72, 68, 82, 0, 0, 0, 1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, + ], + [ + 0, 0, 11, 73, 68, 65, 84, 120, 1, 99, 97, 0, 2, 0, 0, 25, 0, 5, 144, 240, 54, 245, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, - 130], + 130, + ], ]; } diff --git a/packages/flutter_test/lib/src/controller.dart b/packages/flutter_test/lib/src/controller.dart index c208559fb8cfb..f7b8162ab8e3c 100644 --- a/packages/flutter_test/lib/src/controller.dart +++ b/packages/flutter_test/lib/src/controller.dart @@ -722,7 +722,7 @@ abstract class WidgetController { delta: offsets[t+1] - offsets[t], pointer: pointer, buttons: buttons, - ) + ), ]), ], PointerEventRecord(duration, [ @@ -734,7 +734,7 @@ abstract class WidgetController { // change = PointerChange.up, which translates to PointerUpEvent, // doesn't provide the button field. // buttons: buttons, - ) + ), ]), ]; return TestAsyncUtils.guard(() async { diff --git a/packages/flutter_test/lib/src/matchers.dart b/packages/flutter_test/lib/src/matchers.dart index 5434b0be538fe..c6ae9df17c744 100644 --- a/packages/flutter_test/lib/src/matchers.dart +++ b/packages/flutter_test/lib/src/matchers.dart @@ -604,7 +604,7 @@ Matcher matchesSemantics({ if (hasToggledState) SemanticsFlag.hasToggledState, if (isToggled) SemanticsFlag.isToggled, if (hasImplicitScrolling) SemanticsFlag.hasImplicitScrolling, - if (isSlider) SemanticsFlag.isSlider + if (isSlider) SemanticsFlag.isSlider, ]; final List actions = [ diff --git a/packages/flutter_test/lib/src/test_async_utils.dart b/packages/flutter_test/lib/src/test_async_utils.dart index 2a4003d3202a4..c5e81394828d3 100644 --- a/packages/flutter_test/lib/src/test_async_utils.dart +++ b/packages/flutter_test/lib/src/test_async_utils.dart @@ -274,7 +274,7 @@ class TestAsyncUtils { if (_scopeStack.isNotEmpty) { final List information = [ ErrorSummary('Asynchronous call to guarded function leaked.'), - ErrorHint('You must use "await" with all Future-returning test APIs.') + ErrorHint('You must use "await" with all Future-returning test APIs.'), ]; for (final _AsyncScope scope in _scopeStack) { final _StackEntry? guarder = _findResponsibleMethod(scope.creationStack, 'guard', information); diff --git a/packages/flutter_test/lib/src/widget_tester.dart b/packages/flutter_test/lib/src/widget_tester.dart index b7d87cb7df565..7ee9027a862f5 100644 --- a/packages/flutter_test/lib/src/widget_tester.dart +++ b/packages/flutter_test/lib/src/widget_tester.dart @@ -977,7 +977,7 @@ class WidgetTester extends WidgetController implements HitTestDispatcher, Ticker 'should be disposed by calling dispose() on the AnimationController itself. ' 'Otherwise, the ticker will leak.' ), - ticker.describeForError('The offending ticker was') + ticker.describeForError('The offending ticker was'), ]); } } @@ -1002,7 +1002,7 @@ class WidgetTester extends WidgetController implements HitTestDispatcher, Ticker 'If your test uses SemanticsTester, it is ' 'sufficient to call dispose() on SemanticsTester. Otherwise, the ' 'existing handle will leak into another test and alter its behavior.' - ) + ), ]); } _lastRecordedSemanticsHandles = null; diff --git a/packages/flutter_test/test/bindings_environment/flutter_test_variable_is_false_test.dart b/packages/flutter_test/test/bindings_environment/flutter_test_variable_is_false_test.dart index 394954841f8e9..b4acfab5fbaa3 100644 --- a/packages/flutter_test/test/bindings_environment/flutter_test_variable_is_false_test.dart +++ b/packages/flutter_test/test/bindings_environment/flutter_test_variable_is_false_test.dart @@ -10,6 +10,6 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized({'FLUTTER_TEST': 'false'}); expect(WidgetsBinding.instance, isA()); }, onPlatform: const { - 'browser': [Skip('Browser will not use the live binding')] + 'browser': [Skip('Browser will not use the live binding')], }); } diff --git a/packages/flutter_test/test/goldens_test.dart b/packages/flutter_test/test/goldens_test.dart index c5b431c88ff31..c6c3ec4499e94 100644 --- a/packages/flutter_test/test/goldens_test.dart +++ b/packages/flutter_test/test/goldens_test.dart @@ -12,25 +12,28 @@ import 'package:flutter_test/flutter_test.dart' hide test; import 'package:flutter_test/flutter_test.dart' as test_package; // 1x1 transparent pixel -const List _kExpectedPngBytes = - [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, - 1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 11, 73, 68, 65, 84, - 120, 1, 99, 97, 0, 2, 0, 0, 25, 0, 5, 144, 240, 54, 245, 0, 0, 0, 0, 73, 69, - 78, 68, 174, 66, 96, 130]; +const List _kExpectedPngBytes = [ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, + 1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 11, 73, 68, 65, 84, + 120, 1, 99, 97, 0, 2, 0, 0, 25, 0, 5, 144, 240, 54, 245, 0, 0, 0, 0, 73, 69, + 78, 68, 174, 66, 96, 130, +]; // 1x1 colored pixel -const List _kColorFailurePngBytes = - [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, - 1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 13, 73, 68, 65, 84, - 120, 1, 99, 249, 207, 240, 255, 63, 0, 7, 18, 3, 2, 164, 147, 160, 197, 0, - 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]; +const List _kColorFailurePngBytes = [ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, + 1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 13, 73, 68, 65, 84, + 120, 1, 99, 249, 207, 240, 255, 63, 0, 7, 18, 3, 2, 164, 147, 160, 197, 0, + 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130, +]; // 1x2 transparent pixel -const List _kSizeFailurePngBytes = - [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, - 1, 0, 0,0, 2, 8, 6, 0, 0, 0, 153, 129, 182, 39, 0, 0, 0, 14, 73, 68, 65, 84, - 120, 1, 99, 97, 0, 2, 22, 16, 1, 0, 0, 70, 0, 9, 112, 117, 150, 160, 0, 0, - 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]; +const List _kSizeFailurePngBytes = [ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, + 1, 0, 0,0, 2, 8, 6, 0, 0, 0, 153, 129, 182, 39, 0, 0, 0, 14, 73, 68, 65, 84, + 120, 1, 99, 97, 0, 2, 22, 16, 1, 0, 0, 70, 0, 9, 112, 117, 150, 160, 0, 0, + 0, 0, 73, 69, 78, 68, 174, 66, 96, 130, +]; void main() { late MemoryFileSystem fs; diff --git a/packages/flutter_test/test/live_widget_controller_test.dart b/packages/flutter_test/test/live_widget_controller_test.dart index 8aa4e909bf5a1..e0da50bcca0d8 100644 --- a/packages/flutter_test/test/live_widget_controller_test.dart +++ b/packages/flutter_test/test/live_widget_controller_test.dart @@ -129,8 +129,8 @@ void main() { position: location, buttons: kSecondaryMouseButton, pointer: 1, - ) - ]) + ), + ]), ], PointerEventRecord(const Duration(milliseconds: 80), [ PointerUpEvent( @@ -138,8 +138,8 @@ void main() { position: location, buttons: kSecondaryMouseButton, pointer: 1, - ) - ]) + ), + ]), ]; final List timeDiffs = await controller.handlePointerEventRecord(records); diff --git a/packages/flutter_test/test/matchers_test.dart b/packages/flutter_test/test/matchers_test.dart index 2477313a06484..6a5500883b7fb 100644 --- a/packages/flutter_test/test/matchers_test.dart +++ b/packages/flutter_test/test/matchers_test.dart @@ -105,23 +105,31 @@ void main() { '├─B\n' '│\n'), isNot(hasAGoodToStringDeep)); - expect(_MockToStringDeep.fromLines( - ['Paragraph#00000\n', - ' │ size: (400x200)\n', - ' ╘═╦══ text ═══\n', - ' ║ TextSpan:\n', - ' ║ "I polished up that handle so carefullee\n', - ' ║ That now I am the Ruler of the Queen\'s Navee!"\n', - ' ╚═══════════\n']), hasAGoodToStringDeep); + expect( + _MockToStringDeep.fromLines([ + 'Paragraph#00000\n', + ' │ size: (400x200)\n', + ' ╘═╦══ text ═══\n', + ' ║ TextSpan:\n', + ' ║ "I polished up that handle so carefullee\n', + ' ║ That now I am the Ruler of the Queen\'s Navee!"\n', + ' ╚═══════════\n', + ]), + hasAGoodToStringDeep, + ); // Text span - expect(_MockToStringDeep.fromLines( - ['Paragraph#00000\n', - ' │ size: (400x200)\n', - ' ╘═╦══ text ═══\n', - ' ║ TextSpan:\n', - ' ║ "I polished up that handle so carefullee\nThat now I am the Ruler of the Queen\'s Navee!"\n', - ' ╚═══════════\n']), isNot(hasAGoodToStringDeep)); + expect( + _MockToStringDeep.fromLines([ + 'Paragraph#00000\n', + ' │ size: (400x200)\n', + ' ╘═╦══ text ═══\n', + ' ║ TextSpan:\n', + ' ║ "I polished up that handle so carefullee\nThat now I am the Ruler of the Queen\'s Navee!"\n', + ' ╚═══════════\n', + ]), + isNot(hasAGoodToStringDeep), + ); }); test('normalizeHashCodesEquals', () { diff --git a/packages/flutter_test/test/widget_tester_test.dart b/packages/flutter_test/test/widget_tester_test.dart index a8a46c83c6a5a..c10992fbdcf2d 100644 --- a/packages/flutter_test/test/widget_tester_test.dart +++ b/packages/flutter_test/test/widget_tester_test.dart @@ -526,8 +526,8 @@ void main() { position: location, buttons: kSecondaryMouseButton, pointer: 1, - ) - ]) + ), + ]), ], PointerEventRecord(const Duration(milliseconds: 80), [ PointerUpEvent( @@ -535,8 +535,8 @@ void main() { position: location, buttons: kSecondaryMouseButton, pointer: 1, - ) - ]) + ), + ]), ]; final List timeDiffs = await tester.handlePointerEventRecord(records); expect(timeDiffs.length, records.length); diff --git a/packages/flutter_tools/bin/tool_backend.dart b/packages/flutter_tools/bin/tool_backend.dart index 5b4b66585356a..411d53e962e53 100644 --- a/packages/flutter_tools/bin/tool_backend.dart +++ b/packages/flutter_tools/bin/tool_backend.dart @@ -59,7 +59,7 @@ or if (Platform.isWindows) 'flutter.bat' else - 'flutter' + 'flutter', ]); final String bundlePlatform = targetPlatform.startsWith('windows') ? 'windows' : targetPlatform; final String target = '${buildMode}_bundle_${bundlePlatform}_assets'; diff --git a/packages/flutter_tools/bin/xcode_backend.dart b/packages/flutter_tools/bin/xcode_backend.dart index 37ad2a4fd022f..a0df4560740d8 100644 --- a/packages/flutter_tools/bin/xcode_backend.dart +++ b/packages/flutter_tools/bin/xcode_backend.dart @@ -260,7 +260,7 @@ class Context { 'NSBonjourServices.0', '-string', '_dartobservatory._tcp', - builtProductsPlist + builtProductsPlist, ], ); } else { diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart index 49345ccea72a5..e820b584f379d 100644 --- a/packages/flutter_tools/lib/src/android/android_device.dart +++ b/packages/flutter_tools/lib/src/android/android_device.dart @@ -380,7 +380,7 @@ class AndroidDevice extends Device { 'packages', if (userIdentifier != null) ...['--user', userIdentifier], - app.id + app.id, ]); return LineSplitter.split(listOut.stdout).contains('package:${app.id}'); } on Exception catch (error) { @@ -447,7 +447,7 @@ class AndroidDevice extends Device { '-r', if (userIdentifier != null) ...['--user', userIdentifier], - app.applicationPackage.path + app.applicationPackage.path, ])); status.stop(); // Some versions of adb exit with exit code 0 even on failure :( @@ -494,7 +494,8 @@ class AndroidDevice extends Device { 'uninstall', if (userIdentifier != null) ...['--user', userIdentifier], - app.id]), + app.id, + ]), throwOnError: true, ); uninstallOut = uninstallResult.stdout; @@ -805,7 +806,7 @@ class AndroidDevice extends Device { RunResult output; try { output = await runAdbCheckedAsync([ - 'shell', '-x', 'logcat', '-v', 'time', '-t', '1' + 'shell', '-x', 'logcat', '-v', 'time', '-t', '1', ]); } on Exception catch (error) { _logger.printError('Failed to extract the most recent timestamp from the Android log: $error.'); diff --git a/packages/flutter_tools/lib/src/android/android_emulator.dart b/packages/flutter_tools/lib/src/android/android_emulator.dart index 45f1d2925704a..115eecefa8bf7 100644 --- a/packages/flutter_tools/lib/src/android/android_emulator.dart +++ b/packages/flutter_tools/lib/src/android/android_emulator.dart @@ -158,7 +158,7 @@ class AndroidEmulator extends Emulator { '-avd', id, if (coldBoot) - '-no-snapshot-load' + '-no-snapshot-load', ]; final Process process = await _processUtils.start(command); diff --git a/packages/flutter_tools/lib/src/android/gradle.dart b/packages/flutter_tools/lib/src/android/gradle.dart index d5caca41af480..fddbe1d4e0f72 100644 --- a/packages/flutter_tools/lib/src/android/gradle.dart +++ b/packages/flutter_tools/lib/src/android/gradle.dart @@ -589,7 +589,7 @@ class AndroidGradleBuilder implements AndroidBuilder { '-Pflutter-root=$flutterRoot', '-Poutput-dir=${outputDirectory.path}', '-Pis-plugin=${manifest.isPlugin}', - '-PbuildNumber=$buildNumber' + '-PbuildNumber=$buildNumber', ]; if (_logger.isVerbose) { command.add('--full-stacktrace'); @@ -851,15 +851,15 @@ Iterable listApkPaths( [ 'app', getNameForAndroidArch(androidArch), - ...apkPartialName - ].join('-') + ...apkPartialName, + ].join('-'), ]; } return [ [ 'app', ...apkPartialName, - ].join('-') + ].join('-'), ]; } diff --git a/packages/flutter_tools/lib/src/base/analyze_size.dart b/packages/flutter_tools/lib/src/base/analyze_size.dart index e76c5bd8f931b..36fe57ce4ea6a 100644 --- a/packages/flutter_tools/lib/src/base/analyze_size.dart +++ b/packages/flutter_tools/lib/src/base/analyze_size.dart @@ -467,7 +467,7 @@ class _SymbolNode { Map toJson() { final Map json = { 'n': name, - 'value': byteSize + 'value': byteSize, }; final List> childrenAsJson = >[]; for (final _SymbolNode child in children) { diff --git a/packages/flutter_tools/lib/src/base/build.dart b/packages/flutter_tools/lib/src/base/build.dart index 92bf17d27f8d3..96600b4889303 100644 --- a/packages/flutter_tools/lib/src/base/build.dart +++ b/packages/flutter_tools/lib/src/base/build.dart @@ -197,7 +197,7 @@ class AOTSnapshotter { // Faster async/await if (shouldSplitDebugInfo) ...[ '--dwarf-stack-traces', - '--save-debugging-info=${_fileSystem.path.join(splitDebugInfo!, debugFilename)}' + '--save-debugging-info=${_fileSystem.path.join(splitDebugInfo!, debugFilename)}', ], if (dartObfuscation) '--obfuscate', diff --git a/packages/flutter_tools/lib/src/base/logger.dart b/packages/flutter_tools/lib/src/base/logger.dart index a68ce06fc38c6..b102fe84abb05 100644 --- a/packages/flutter_tools/lib/src/base/logger.dart +++ b/packages/flutter_tools/lib/src/base/logger.dart @@ -901,7 +901,7 @@ class BufferLogger extends Logger { void sendEvent(String name, [Map? args]) { _events.write(json.encode({ 'name': name, - 'args': args + 'args': args, })); } } diff --git a/packages/flutter_tools/lib/src/build_system/hash.dart b/packages/flutter_tools/lib/src/build_system/hash.dart index 3f836331240a7..6b6285b89cbc7 100644 --- a/packages/flutter_tools/lib/src/build_system/hash.dart +++ b/packages/flutter_tools/lib/src/build_system/hash.dart @@ -17,7 +17,7 @@ final Uint32List _noise = Uint32List.fromList([ 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, - 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 + 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391, ]); /// Per-round shift amounts. @@ -25,7 +25,7 @@ const List _shiftAmounts = [ 07, 12, 17, 22, 07, 12, 17, 22, 07, 12, 17, 22, 07, 12, 17, 22, 05, 09, 14, 20, 05, 09, 14, 20, 05, 09, 14, 20, 05, 09, 14, 20, 04, 11, 16, 23, 04, 11, 16, 23, 04, 11, 16, 23, 04, 11, 16, 23, 06, 10, 15, 21, 06, 10, 15, 21, 06, - 10, 15, 21, 06, 10, 15, 21 + 10, 15, 21, 06, 10, 15, 21, ]; /// A bitmask that limits an integer to 32 bits. diff --git a/packages/flutter_tools/lib/src/build_system/targets/assets.dart b/packages/flutter_tools/lib/src/build_system/targets/assets.dart index 68a4cd02570b1..ceb9075480131 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/assets.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/assets.dart @@ -265,7 +265,7 @@ class CopyAssets extends Target { @override List get depfiles => const [ - 'flutter_assets.d' + 'flutter_assets.d', ]; @override diff --git a/packages/flutter_tools/lib/src/build_system/targets/common.dart b/packages/flutter_tools/lib/src/build_system/targets/common.dart index 9c00dce02342a..899c2da15bd1f 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/common.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/common.dart @@ -44,7 +44,7 @@ class CopyFlutterBundle extends Target { @override List get depfiles => [ - 'flutter_assets.d' + 'flutter_assets.d', ]; @override 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 b3c7fa0db8640..5f73e26a0d9c3 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart @@ -335,7 +335,7 @@ abstract class UnpackIOS extends Target { 'lipo', frameworkBinaryPath, '-verify_arch', - ...archList + ...archList, ]); if (verifyResult.exitCode != 0) { @@ -444,7 +444,7 @@ abstract class IosAssetBundle extends Target { @override List get outputs => const [ Source.pattern('{OUTPUT_DIR}/App.framework/App'), - Source.pattern('{OUTPUT_DIR}/App.framework/Info.plist') + Source.pattern('{OUTPUT_DIR}/App.framework/Info.plist'), ]; @override diff --git a/packages/flutter_tools/lib/src/build_system/targets/localizations.dart b/packages/flutter_tools/lib/src/build_system/targets/localizations.dart index 2e558be531583..af0f0077927d1 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/localizations.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/localizations.dart @@ -71,12 +71,12 @@ class GenerateLocalizationsTarget extends Target { configFile, if (inputs != null) for (Object inputFile in inputs.whereType()) - environment.fileSystem.file(inputFile) + environment.fileSystem.file(inputFile), ], [ if (outputs != null) for (Object outputFile in outputs.whereType()) - environment.fileSystem.file(outputFile) + environment.fileSystem.file(outputFile), ], ); depfileService.writeToFile( diff --git a/packages/flutter_tools/lib/src/build_system/targets/macos.dart b/packages/flutter_tools/lib/src/build_system/targets/macos.dart index d29fadad190e3..ac5ffc591e438 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/macos.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/macos.dart @@ -93,7 +93,7 @@ abstract class UnpackMacOS extends Target { 'lipo', frameworkBinaryPath, '-verify_arch', - ...archList + ...archList, ]); if (verifyResult.exitCode != 0) { diff --git a/packages/flutter_tools/lib/src/commands/assemble.dart b/packages/flutter_tools/lib/src/commands/assemble.dart index 4f7d9c01cb7bb..33499acac5a09 100644 --- a/packages/flutter_tools/lib/src/commands/assemble.dart +++ b/packages/flutter_tools/lib/src/commands/assemble.dart @@ -179,12 +179,12 @@ class AssembleCommand extends FlutterCommand { final String name = argumentResults.rest.first; final Map targetMap = { for (final Target target in _kDefaultTargets) - target.name: target + target.name: target, }; final List results = [ for (final String targetName in argumentResults.rest) if (targetMap.containsKey(targetName)) - targetMap[targetName]! + targetMap[targetName]!, ]; if (results.isEmpty) { throwToolExit('No target named "$name" defined.'); @@ -386,8 +386,8 @@ void writePerformanceData(Iterable measurements, File ou 'skipped': measurement.skipped, 'succeeded': measurement.succeeded, 'elapsedMilliseconds': measurement.elapsedMilliseconds, - } - ] + }, + ], }; if (!outFile.parent.existsSync()) { outFile.parent.createSync(recursive: true); diff --git a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart index ce2cc0432e760..daaaafd34287b 100644 --- a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart +++ b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart @@ -490,7 +490,7 @@ end podProduct as Directory, simulatorBuildConfiguration .childDirectory(builtProduct.basename) - .childDirectory(podFrameworkName) + .childDirectory(podFrameworkName), ]; await _produceXCFramework(frameworks, binaryName, modeDirectory); @@ -520,10 +520,10 @@ end entity.basename.endsWith('dSYM')) .map((FileSystemEntity entity) => ['-debug-symbols', entity.path]) - .expand((List parameter) => parameter) + .expand((List parameter) => parameter), ], '-output', - outputDirectory.childDirectory('$frameworkBinaryName.xcframework').path + outputDirectory.childDirectory('$frameworkBinaryName.xcframework').path, ]; final RunResult xcframeworkResult = await globals.processUtils.run( diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart index ae8b55bf0c2ce..8ae8fb5df3799 100644 --- a/packages/flutter_tools/lib/src/commands/create.dart +++ b/packages/flutter_tools/lib/src/commands/create.dart @@ -665,7 +665,7 @@ Your $application code is in $relativeAppMain. List _getSupportedPlatformsFromTemplateContext(Map templateContext) { return [ for (String platform in kAllCreatePlatforms) - if (templateContext[platform] == true) platform + if (templateContext[platform] == true) platform, ]; } diff --git a/packages/flutter_tools/lib/src/commands/custom_devices.dart b/packages/flutter_tools/lib/src/commands/custom_devices.dart index fbc52fe615922..af6c3ac8c0c5c 100644 --- a/packages/flutter_tools/lib/src/commands/custom_devices.dart +++ b/packages/flutter_tools/lib/src/commands/custom_devices.dart @@ -529,7 +529,7 @@ class CustomDevicesAddCommand extends CustomDevicesCommandBase { final String exampleOrDefault = [ if (example != null) 'example: $example', - if (defaultsTo != null) 'empty for $defaultsTo' + if (defaultsTo != null) 'empty for $defaultsTo', ].join(', '); if (exampleOrDefault.isNotEmpty) { @@ -710,7 +710,7 @@ class CustomDevicesAddCommand extends CustomDevicesCommandBase { '-o', 'BatchMode=yes', if (ipv6) '-6', r'${localPath}', - '$sshTarget:/tmp/\${appName}' + '$sshTarget:/tmp/\${appName}', ], uninstallCommand: [ @@ -718,7 +718,7 @@ class CustomDevicesAddCommand extends CustomDevicesCommandBase { '-o', 'BatchMode=yes', if (ipv6) '-6', sshTarget, - r'rm -rf "/tmp/${appName}"' + r'rm -rf "/tmp/${appName}"', ], runDebugCommand: [ @@ -726,7 +726,7 @@ class CustomDevicesAddCommand extends CustomDevicesCommandBase { '-o', 'BatchMode=yes', if (ipv6) '-6', sshTarget, - remoteRunDebugCommand + remoteRunDebugCommand, ], forwardPortCommand: usePortForwarding @@ -737,7 +737,7 @@ class CustomDevicesAddCommand extends CustomDevicesCommandBase { if (ipv6) '-6', '-L', '$formattedLoopbackIp:\${hostPort}:$formattedLoopbackIp:\${devicePort}', sshTarget, - "echo 'Port forwarding success'; read" + "echo 'Port forwarding success'; read", ] : null, forwardPortSuccessRegex: usePortForwarding @@ -750,7 +750,7 @@ class CustomDevicesAddCommand extends CustomDevicesCommandBase { '-o', 'BatchMode=yes', if (ipv6) '-6', sshTarget, - screenshotCommand + screenshotCommand, ] : null ); @@ -762,7 +762,7 @@ class CustomDevicesAddCommand extends CustomDevicesCommandBase { if (ipv6) '-6', '-n', '1', '-w', '500', - targetStr + targetStr, ], explicitPingSuccessRegex: true, pingSuccessRegex: RegExp(r'[<=]\d+ms') @@ -774,7 +774,7 @@ class CustomDevicesAddCommand extends CustomDevicesCommandBase { if (ipv6) '-6', '-c', '1', '-w', '1', - targetStr + targetStr, ], explicitPingSuccessRegex: true, pingSuccessRegex: null diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart index 246cdc6ba2f05..607a512b51fe7 100644 --- a/packages/flutter_tools/lib/src/commands/daemon.dart +++ b/packages/flutter_tools/lib/src/commands/daemon.dart @@ -1103,7 +1103,7 @@ Future> _deviceToMap(Device device) async { 'flutterExit': device.supportsFlutterExit, 'hardwareRendering': await device.supportsHardwareRendering, 'startPaused': device.supportsStartPaused, - } + }, }; } diff --git a/packages/flutter_tools/lib/src/commands/format.dart b/packages/flutter_tools/lib/src/commands/format.dart index 986dc7ba22b75..69f4ef4988ae8 100644 --- a/packages/flutter_tools/lib/src/commands/format.dart +++ b/packages/flutter_tools/lib/src/commands/format.dart @@ -51,7 +51,7 @@ class FormatCommand extends FlutterCommand { if (arg == '--dry-run' || arg == '-n') '--output=none' else - arg + arg, ]); } diff --git a/packages/flutter_tools/lib/src/commands/precache.dart b/packages/flutter_tools/lib/src/commands/precache.dart index dfab73928d90a..739efc8a1a53d 100644 --- a/packages/flutter_tools/lib/src/commands/precache.dart +++ b/packages/flutter_tools/lib/src/commands/precache.dart @@ -87,7 +87,7 @@ class PrecacheCommand extends FlutterCommand { 'android_gen_snapshot', 'android_maven', 'android_internal_build', - ] + ], }; /// Returns a reverse mapping of _expandedArtifacts, from child artifact name @@ -96,7 +96,7 @@ class PrecacheCommand extends FlutterCommand { return { for (final MapEntry> entry in _expandedArtifacts.entries) for (final String childArtifactName in entry.value) - childArtifactName: entry.key + childArtifactName: entry.key, }; } diff --git a/packages/flutter_tools/lib/src/commands/test.dart b/packages/flutter_tools/lib/src/commands/test.dart index fca00b4b39c75..026529165ded3 100644 --- a/packages/flutter_tools/lib/src/commands/test.dart +++ b/packages/flutter_tools/lib/src/commands/test.dart @@ -277,7 +277,7 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts { if (globals.fs.isDirectorySync(path)) ..._findTests(globals.fs.directory(path)) else - globals.fs.path.normalize(globals.fs.path.absolute(path)) + globals.fs.path.normalize(globals.fs.path.absolute(path)), ]; } diff --git a/packages/flutter_tools/lib/src/custom_devices/custom_device.dart b/packages/flutter_tools/lib/src/custom_devices/custom_device.dart index 8373d2c882a1e..e663cfc60b511 100644 --- a/packages/flutter_tools/lib/src/custom_devices/custom_device.dart +++ b/packages/flutter_tools/lib/src/custom_devices/custom_device.dart @@ -156,7 +156,7 @@ class CustomDevicePortForwarder extends DevicePortForwarder { _forwardPortCommand, { 'devicePort': '$devicePort', - 'hostPort': '$hostPort' + 'hostPort': '$hostPort', }, additionalReplacementValues: _additionalReplacementValues ); @@ -394,7 +394,7 @@ class CustomDeviceAppSession { { 'remotePath': '/tmp/', 'appName': packageName, - 'engineOptions': _getEngineOptionsForCmdline(debuggingOptions, traceStartup, route) + 'engineOptions': _getEngineOptionsForCmdline(debuggingOptions, traceStartup, route), } ); @@ -587,7 +587,7 @@ class CustomDevice extends Device { _config.postBuildCommand!, { 'appName': appName, - 'localPath': localPath + 'localPath': localPath, }, additionalReplacementValues: additionalReplacementValues ); @@ -621,7 +621,7 @@ class CustomDevice extends Device { final List interpolated = interpolateCommand( _config.uninstallCommand, { - 'appName': appName + 'appName': appName, }, additionalReplacementValues: additionalReplacementValues ); @@ -657,7 +657,7 @@ class CustomDevice extends Device { _config.installCommand, { 'localPath': localPath, - 'appName': appName + 'appName': appName, }, additionalReplacementValues: additionalReplacementValues ); diff --git a/packages/flutter_tools/lib/src/custom_devices/custom_device_config.dart b/packages/flutter_tools/lib/src/custom_devices/custom_device_config.dart index ea69950651c5f..7f5c031141d2b 100644 --- a/packages/flutter_tools/lib/src/custom_devices/custom_device_config.dart +++ b/packages/flutter_tools/lib/src/custom_devices/custom_device_config.dart @@ -283,7 +283,7 @@ class CustomDeviceConfig { 'ping', '-w', '1', '-c', '1', - 'raspberrypi' + 'raspberrypi', ], explicitPingSuccessRegex: true ); diff --git a/packages/flutter_tools/lib/src/custom_devices/custom_devices_config.dart b/packages/flutter_tools/lib/src/custom_devices/custom_devices_config.dart index ec9192a9b845a..cb68c6cfe3471 100644 --- a/packages/flutter_tools/lib/src/custom_devices/custom_devices_config.dart +++ b/packages/flutter_tools/lib/src/custom_devices/custom_devices_config.dart @@ -186,7 +186,7 @@ class CustomDevicesConfig { _kCustomDevicesConfigKey, [ ...?_getDevicesJsonValue(), - config.toJson() + config.toJson(), ] ); } diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart index 40652d80d16d4..8698acf08317b 100644 --- a/packages/flutter_tools/lib/src/device.dart +++ b/packages/flutter_tools/lib/src/device.dart @@ -158,7 +158,7 @@ abstract class DeviceManager { }, onError: (dynamic error, StackTrace stackTrace) { // Return matches from other discoverers even if one fails. _logger.printTrace('Ignored error discovering $deviceId: $error'); - }) + }), ]; // Wait for an exact match, or for all discoverers to return results. @@ -722,7 +722,7 @@ abstract class Device { 'flutterExit': supportsFlutterExit, 'hardwareRendering': isLocalEmu && await supportsHardwareRendering, 'startPaused': supportsStartPaused, - } + }, }; } diff --git a/packages/flutter_tools/lib/src/drive/web_driver_service.dart b/packages/flutter_tools/lib/src/drive/web_driver_service.dart index fb596428894a6..8f99f96763fd7 100644 --- a/packages/flutter_tools/lib/src/drive/web_driver_service.dart +++ b/packages/flutter_tools/lib/src/drive/web_driver_service.dart @@ -258,14 +258,14 @@ Map getDesiredCapabilities(Browser browser, bool headless, [Str '--no-default-browser-check', '--no-sandbox', '--no-first-run', - if (headless) '--headless' + if (headless) '--headless', ], 'perfLoggingPrefs': { 'traceCategories': 'devtools.timeline,' - 'v8,blink.console,benchmark,blink,' - 'blink.user_timing' - } + 'v8,blink.console,benchmark,blink,' + 'blink.user_timing', + }, }, }; break; @@ -275,7 +275,7 @@ Map getDesiredCapabilities(Browser browser, bool headless, [Str 'browserName': 'firefox', 'moz:firefoxOptions' : { 'args': [ - if (headless) '-headless' + if (headless) '-headless', ], 'prefs': { 'dom.file.createInChild': true, @@ -285,10 +285,10 @@ Map getDesiredCapabilities(Browser browser, bool headless, [Str 'media.gmp-provider.enabled': false, 'network.captive-portal-service.enabled': false, 'security.insecure_field_warning.contextual.enabled': false, - 'test.currentTimeOffsetSeconds': 11491200 + 'test.currentTimeOffsetSeconds': 11491200, }, - 'log': {'level': 'trace'} - } + 'log': {'level': 'trace'}, + }, }; break; case Browser.edge: @@ -306,7 +306,7 @@ Map getDesiredCapabilities(Browser browser, bool headless, [Str return { 'platformName': 'ios', 'browserName': 'safari', - 'safari:useSimulator': true + 'safari:useSimulator': true, }; case Browser.androidChrome: return { @@ -314,7 +314,7 @@ Map getDesiredCapabilities(Browser browser, bool headless, [Str 'platformName': 'android', 'goog:chromeOptions': { 'androidPackage': 'com.android.chrome', - 'args': ['--disable-fullscreen'] + 'args': ['--disable-fullscreen'], }, }; } diff --git a/packages/flutter_tools/lib/src/flutter_manifest.dart b/packages/flutter_tools/lib/src/flutter_manifest.dart index d2aa00347e3c5..5b4fd6fed47da 100644 --- a/packages/flutter_tools/lib/src/flutter_manifest.dart +++ b/packages/flutter_tools/lib/src/flutter_manifest.dart @@ -14,7 +14,7 @@ import 'base/utils.dart'; import 'plugins.dart'; const Set _kValidPluginPlatforms = { - 'android', 'ios', 'web', 'windows', 'linux', 'macos' + 'android', 'ios', 'web', 'windows', 'linux', 'macos', }; /// A wrapper around the `flutter` section in the `pubspec.yaml` file. diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_ffx.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_ffx.dart index 4bb65497f3e91..d790b7612b3c7 100644 --- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_ffx.dart +++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_ffx.dart @@ -58,7 +58,7 @@ class FuchsiaFfx { 'target', 'list', '--format', - 's' + 's', ]; final RunResult result = await _processUtils.run(command); if (result.exitCode != 0) { 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 f7731fbf944f6..b971ed416a8b5 100644 --- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart +++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart @@ -63,7 +63,7 @@ class FuchsiaKernelCompiler { globals.fs.path.join(outDir, '$appName.dil'), '--component-name', appName, - ...getBuildInfoFlags(buildInfo: buildInfo, manifestPath: manifestPath) + ...getBuildInfoFlags(buildInfo: buildInfo, manifestPath: manifestPath), ]; flags += [ @@ -104,12 +104,12 @@ class FuchsiaKernelCompiler { // AOT/JIT: if (buildInfo.usesAot) ...[ '--aot', - '--tfa' + '--tfa', ] else ...[ '--no-link-platform', '--split-output-by-packages', '--manifest', - manifestPath + manifestPath, ], // debug, profile, jit release, release: diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart index b4780a3847e91..bc1db285b263d 100644 --- a/packages/flutter_tools/lib/src/ios/devices.dart +++ b/packages/flutter_tools/lib/src/ios/devices.dart @@ -133,7 +133,7 @@ class IOSDevices extends PollingDeviceDiscovery { Future> getDiagnostics() async { if (!_platform.isMacOS) { return const [ - 'Control of iOS devices or simulators only supported on macOS.' + 'Control of iOS devices or simulators only supported on macOS.', ]; } diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart index 5b7653d5bd3eb..25606dd5e82f6 100644 --- a/packages/flutter_tools/lib/src/ios/mac.dart +++ b/packages/flutter_tools/lib/src/ios/mac.dart @@ -359,7 +359,7 @@ Future buildXcodeProject({ '-resultBundlePath', tempDir.childFile(_kResultBundlePath).absolute.path, '-resultBundleVersion', - _kResultBundleVersion + _kResultBundleVersion, ]); // Don't log analytics for downstream Flutter commands. diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart index 407a70bf42a05..ea8d1fc7afe95 100644 --- a/packages/flutter_tools/lib/src/ios/simulators.dart +++ b/packages/flutter_tools/lib/src/ios/simulators.dart @@ -473,7 +473,7 @@ class IOSSimulator extends Device { if (debuggingOptions.traceSkiaAllowlist != null) '--trace-skia-allowlist="${debuggingOptions.traceSkiaAllowlist}"', if (dartVmFlags.isNotEmpty) '--dart-flags=$dartVmFlags', '--observatory-port=${debuggingOptions.hostVmServicePort ?? 0}', - if (route != null) '--route=$route' + if (route != null) '--route=$route', ], ]; diff --git a/packages/flutter_tools/lib/src/ios/xcodeproj.dart b/packages/flutter_tools/lib/src/ios/xcodeproj.dart index 8afba4c76b5d6..47f8575740873 100644 --- a/packages/flutter_tools/lib/src/ios/xcodeproj.dart +++ b/packages/flutter_tools/lib/src/ios/xcodeproj.dart @@ -194,7 +194,7 @@ class XcodeProjectInterpreter { 'generic/platform=iOS Simulator', '-showBuildSettings', 'BUILD_DIR=${_fileSystem.path.absolute(getIosBuildDirectory())}', - ...environmentVariablesAsXcodeBuildSettings(_platform) + ...environmentVariablesAsXcodeBuildSettings(_platform), ]; try { // showBuildSettings is reported to occasionally timeout. Here, we give it @@ -290,7 +290,7 @@ class XcodeProjectInterpreter { if (!verbose) '-quiet', 'clean', - ...environmentVariablesAsXcodeBuildSettings(_platform) + ...environmentVariablesAsXcodeBuildSettings(_platform), ], workingDirectory: _fileSystem.currentDirectory.path); } diff --git a/packages/flutter_tools/lib/src/isolated/devfs_web.dart b/packages/flutter_tools/lib/src/isolated/devfs_web.dart index 7539977abd3ed..3a82a98a470b8 100644 --- a/packages/flutter_tools/lib/src/isolated/devfs_web.dart +++ b/packages/flutter_tools/lib/src/isolated/devfs_web.dart @@ -267,7 +267,7 @@ class WebAssetServer implements AssetReader { final String result = await globals.fs.file(uri.toFilePath()).readAsString(); return shelf.Response.ok(result, headers: { - HttpHeaders.contentTypeHeader: 'application/javascript' + HttpHeaders.contentTypeHeader: 'application/javascript', }); } return innerHandler(request); diff --git a/packages/flutter_tools/lib/src/linux/build_linux.dart b/packages/flutter_tools/lib/src/linux/build_linux.dart index 81c86d5122f4d..6150f43553205 100644 --- a/packages/flutter_tools/lib/src/linux/build_linux.dart +++ b/packages/flutter_tools/lib/src/linux/build_linux.dart @@ -145,7 +145,7 @@ Future _runCmake(String buildModeName, Directory sourceDir, Directory buil workingDirectory: buildDir.path, environment: { 'CC': 'clang', - 'CXX': 'clang++' + 'CXX': 'clang++', }, trace: true, ); diff --git a/packages/flutter_tools/lib/src/linux/linux_doctor.dart b/packages/flutter_tools/lib/src/linux/linux_doctor.dart index c21d4f83dcaf1..fae34766b369d 100644 --- a/packages/flutter_tools/lib/src/linux/linux_doctor.dart +++ b/packages/flutter_tools/lib/src/linux/linux_doctor.dart @@ -65,7 +65,7 @@ class LinuxDoctorValidator extends DoctorValidator { final Map installedVersions = { // Sort the check to make the call order predictable for unit tests. for (String binary in _requiredBinaryVersions.keys.toList()..sort()) - binary: await _getBinaryVersion(binary) + binary: await _getBinaryVersion(binary), }; // Determine overall validation level. diff --git a/packages/flutter_tools/lib/src/macos/build_macos.dart b/packages/flutter_tools/lib/src/macos/build_macos.dart index 0b31ea57bbf0b..1af3b7b009223 100644 --- a/packages/flutter_tools/lib/src/macos/build_macos.dart +++ b/packages/flutter_tools/lib/src/macos/build_macos.dart @@ -114,7 +114,7 @@ Future buildMacOS({ else '-quiet', 'COMPILER_INDEX_STORE_ENABLE=NO', - ...environmentVariablesAsXcodeBuildSettings(globals.platform) + ...environmentVariablesAsXcodeBuildSettings(globals.platform), ], trace: true, stdoutErrorMatcher: verboseLogging ? null : _filteredOutput, diff --git a/packages/flutter_tools/lib/src/macos/xcdevice.dart b/packages/flutter_tools/lib/src/macos/xcdevice.dart index a7fd11c20b588..2f25e3caede55 100644 --- a/packages/flutter_tools/lib/src/macos/xcdevice.dart +++ b/packages/flutter_tools/lib/src/macos/xcdevice.dart @@ -186,11 +186,11 @@ class XCDevice { final String identifier = match.group(2)!; if (verb.startsWith('attach')) { _deviceIdentifierByEvent?.add({ - XCDeviceEvent.attach: identifier + XCDeviceEvent.attach: identifier, }); } else if (verb.startsWith('detach')) { _deviceIdentifierByEvent?.add({ - XCDeviceEvent.detach: identifier + XCDeviceEvent.detach: identifier, }); } } diff --git a/packages/flutter_tools/lib/src/persistent_tool_state.dart b/packages/flutter_tools/lib/src/persistent_tool_state.dart index 34ff213525964..d9eed49eeef89 100644 --- a/packages/flutter_tools/lib/src/persistent_tool_state.dart +++ b/packages/flutter_tools/lib/src/persistent_tool_state.dart @@ -84,7 +84,7 @@ class _DefaultPersistentToolState implements PersistentToolState { static const Map _lastActiveVersionKeys = { Channel.master: 'last-active-master-version', Channel.beta: 'last-active-beta-version', - Channel.stable: 'last-active-stable-version' + Channel.stable: 'last-active-stable-version', }; static const String _kBotKey = 'is-bot'; static const String _kLicenseHash = 'license-hash'; diff --git a/packages/flutter_tools/lib/src/platform_plugins.dart b/packages/flutter_tools/lib/src/platform_plugins.dart index 58d5e3cae2700..9a773b53768e6 100644 --- a/packages/flutter_tools/lib/src/platform_plugins.dart +++ b/packages/flutter_tools/lib/src/platform_plugins.dart @@ -180,7 +180,7 @@ class AndroidPlugin extends PluginPlatform implements NativeOrDartPlugin { 'kotlin', package.replaceAll('.', _fileSystem.path.separator), '$pluginClass.kt', - ) + ), ]; File? mainPluginClass; diff --git a/packages/flutter_tools/lib/src/resident_devtools_handler.dart b/packages/flutter_tools/lib/src/resident_devtools_handler.dart index 2b26ac53cab39..7c419185c50d0 100644 --- a/packages/flutter_tools/lib/src/resident_devtools_handler.dart +++ b/packages/flutter_tools/lib/src/resident_devtools_handler.dart @@ -169,7 +169,7 @@ class FlutterResidentDevtoolsHandler implements ResidentDevtoolsHandler { Future> _devicesWithExtensions(List flutterDevices) async { final List devices = await Future.wait(>[ - for (final FlutterDevice device in flutterDevices) _waitForExtensionsForDevice(device) + for (final FlutterDevice device in flutterDevices) _waitForExtensionsForDevice(device), ]); return devices.where((FlutterDevice device) => device != null).toList(); } diff --git a/packages/flutter_tools/lib/src/run_hot.dart b/packages/flutter_tools/lib/src/run_hot.dart index 6351f430de844..e51ab68bab39c 100644 --- a/packages/flutter_tools/lib/src/run_hot.dart +++ b/packages/flutter_tools/lib/src/run_hot.dart @@ -614,7 +614,7 @@ class HotRunner extends ResidentRunner { device.vmService.service.setIsolatePauseMode(isolate.id, exceptionPauseMode: vm_service.ExceptionPauseMode.kNone), for (final vm_service.Breakpoint breakpoint in isolate.breakpoints) - device.vmService.service.removeBreakpoint(isolate.id, breakpoint.id) + device.vmService.service.removeBreakpoint(isolate.id, breakpoint.id), ]; await Future.wait(breakpointAndExceptionRemoval); await device.vmService.service.resume(view.uiIsolate.id); @@ -1186,7 +1186,7 @@ Future>> _reloadDeviceSources( isolateRef.id, pause: pause, rootLibUri: deviceEntryUri, - ) + ), ]; } diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index 21bab0ccfd9cd..d5acfc01abd36 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -153,11 +153,11 @@ abstract class FlutterCommand extends Command { ], 'canvaskit': [ 'FLUTTER_WEB_AUTO_DETECT=false', - 'FLUTTER_WEB_USE_SKIA=true' + 'FLUTTER_WEB_USE_SKIA=true', ], 'html': [ 'FLUTTER_WEB_AUTO_DETECT=false', - 'FLUTTER_WEB_USE_SKIA=false' + 'FLUTTER_WEB_USE_SKIA=false', ], }; diff --git a/packages/flutter_tools/lib/src/template.dart b/packages/flutter_tools/lib/src/template.dart index 9af0106fbd1f8..d32fa9642d7c2 100644 --- a/packages/flutter_tools/lib/src/template.dart +++ b/packages/flutter_tools/lib/src/template.dart @@ -122,12 +122,12 @@ class Template { return Template._( [ for (final String name in names) - _templateDirectoryInPackage(name, fileSystem) + _templateDirectoryInPackage(name, fileSystem), ], [ for (final String name in names) if ((await _templateImageDirectory(name, fileSystem, logger)).existsSync()) - await _templateImageDirectory(name, fileSystem, logger) + await _templateImageDirectory(name, fileSystem, logger), ], fileSystem: fileSystem, logger: logger, @@ -304,7 +304,7 @@ class Template { final List potentials = [ for (final Directory imageSourceDir in imageSourceDirectories) _fileSystem.file(_fileSystem.path - .join(imageSourceDir.path, relativeDestinationPath.replaceAll(imageTemplateExtension, ''))) + .join(imageSourceDir.path, relativeDestinationPath.replaceAll(imageTemplateExtension, ''))), ]; if (potentials.any((File file) => file.existsSync())) { diff --git a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart index b0350be8e3ce2..0ea468628886f 100644 --- a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart +++ b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart @@ -367,7 +367,7 @@ class FlutterWebPlatform extends PlatformPlugin { 'width': width.toDouble(), 'height': height.toDouble(), 'scale': 1.0, - } + }, }); bytes = base64.decode(response.result['data'] as String); } on WipError catch (ex) { diff --git a/packages/flutter_tools/lib/src/tester/flutter_tester.dart b/packages/flutter_tools/lib/src/tester/flutter_tester.dart index 2aa2d1b3ca6aa..8662321a0f63c 100644 --- a/packages/flutter_tools/lib/src/tester/flutter_tester.dart +++ b/packages/flutter_tools/lib/src/tester/flutter_tester.dart @@ -174,7 +174,7 @@ class FlutterTesterDevice extends Device { '--disable-service-auth-codes', if (debuggingOptions.hasObservatoryPort) '--observatory-port=${debuggingOptions.hostVmServicePort}', - applicationKernelFilePath + applicationKernelFilePath, ]; ProtocolDiscovery? observatoryDiscovery; diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart index 59b7e776b66f9..2a34556d42ad3 100644 --- a/packages/flutter_tools/lib/src/vmservice.dart +++ b/packages/flutter_tools/lib/src/vmservice.dart @@ -198,7 +198,7 @@ Future setUpVmService( return { 'result': { 'type': 'Success', - } + }, }; }); registrationRequests.add(vmService.registerService('reloadSources', 'Flutter Tools')); @@ -211,7 +211,7 @@ Future setUpVmService( return { 'result': { 'type': 'Success', - } + }, }; }); registrationRequests.add(vmService.registerService('hotRestart', 'Flutter Tools')); @@ -226,7 +226,7 @@ Future setUpVmService( 'result': { 'type': 'Success', ...versionJson, - } + }, }; }); registrationRequests.add(vmService.registerService('flutterVersion', 'Flutter Tools')); @@ -258,7 +258,7 @@ Future setUpVmService( 'result': { 'type': 'Success', ...result.toJson(), - } + }, }; }); registrationRequests.add(vmService.registerService('flutterMemoryInfo', 'Flutter Tools')); @@ -270,7 +270,7 @@ Future setUpVmService( 'result': { 'type': 'Success', 'filename': filename, - } + }, }; }); registrationRequests.add(vmService.registerService('flutterGetSkSL', 'Flutter Tools')); @@ -847,7 +847,7 @@ class FlutterVmService { final List views = [ if (rawViews != null) for (final Map rawView in rawViews.whereType>()) - FlutterView.parse(rawView) + FlutterView.parse(rawView), ]; if (views.isNotEmpty || returnEarly) { return views; diff --git a/packages/flutter_tools/lib/src/windows/build_windows.dart b/packages/flutter_tools/lib/src/windows/build_windows.dart index ce4abbb399c88..ed41e392a921f 100644 --- a/packages/flutter_tools/lib/src/windows/build_windows.dart +++ b/packages/flutter_tools/lib/src/windows/build_windows.dart @@ -168,11 +168,11 @@ Future _runBuild( if (install) ...['--target', 'INSTALL'], if (globals.logger.isVerbose) - '--verbose' + '--verbose', ], environment: { if (globals.logger.isVerbose) - 'VERBOSE_SCRIPT_LOGGING': 'true' + 'VERBOSE_SCRIPT_LOGGING': 'true', }, trace: true, stdoutErrorMatcher: errorMatcher, diff --git a/packages/flutter_tools/lib/src/windows/visual_studio.dart b/packages/flutter_tools/lib/src/windows/visual_studio.dart index 5c0c928786b36..ea1e3bdd4c42f 100644 --- a/packages/flutter_tools/lib/src/windows/visual_studio.dart +++ b/packages/flutter_tools/lib/src/windows/visual_studio.dart @@ -208,7 +208,7 @@ class VisualStudio { /// See https://docs.microsoft.com/en-us/visualstudio/install/workload-and-component-ids static const List _requiredWorkloads = [ 'Microsoft.VisualStudio.Workload.NativeDesktop', - 'Microsoft.VisualStudio.Workload.VCTools' + 'Microsoft.VisualStudio.Workload.VCTools', ]; /// Components for use with vswhere requirements. @@ -301,7 +301,7 @@ class VisualStudio { '-requires', requiredWorkload, ], - ..._requiredComponents(_minimumSupportedVersion).keys + ..._requiredComponents(_minimumSupportedVersion).keys, ] : []; try { diff --git a/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart index c29e76b0d99a9..beb713cde5d58 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart @@ -271,7 +271,7 @@ void main() { skipped: false, succeeded: true, elapsedMilliseconds: 123, - ) + ), ]; final FileSystem fileSystem = MemoryFileSystem.test(); final File outFile = fileSystem.currentDirectory diff --git a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart index 9af19152271a7..d4f96a5bfbce7 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart @@ -713,7 +713,7 @@ VMServiceConnector getFakeVmServiceFactory({ 'views': [ { 'id': '1', - 'isolate': fakeUnpausedIsolate.toJson() + 'isolate': fakeUnpausedIsolate.toJson(), }, ], }, @@ -740,7 +740,7 @@ VMServiceConnector getFakeVmServiceFactory({ 'views': [ { 'id': '1', - 'isolate': fakeUnpausedIsolate.toJson() + 'isolate': fakeUnpausedIsolate.toJson(), }, ], }, diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_fuchsia_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_fuchsia_test.dart index de6c528321401..30faad0cb5913 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_fuchsia_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_fuchsia_test.dart @@ -40,7 +40,7 @@ void main() { final Platform windowsPlatform = FakePlatform( operatingSystem: 'windows', environment: const { - 'FLUTTER_ROOT': '/' + 'FLUTTER_ROOT': '/', }, ); FakeFuchsiaSdk fuchsiaSdk; diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart index 9cd15a4c58626..071f0f4b5c040 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart @@ -87,7 +87,7 @@ void main() { } const FakeCommand xattrCommand = FakeCommand(command: [ - 'xattr', '-r', '-d', 'com.apple.FinderInfo', '/' + 'xattr', '-r', '-d', 'com.apple.FinderInfo', '/', ]); FakeCommand _setUpRsyncCommand({void Function() onRun}) { diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart index 68bce82851f50..6f31be30790f8 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart @@ -83,7 +83,7 @@ void main() { } const FakeCommand xattrCommand = FakeCommand(command: [ - 'xattr', '-r', '-d', 'com.apple.FinderInfo', '/' + 'xattr', '-r', '-d', 'com.apple.FinderInfo', '/', ]); FakeCommand _setUpXCResultCommand({String stdout = '', void Function() onRun}) { @@ -296,8 +296,8 @@ void main() { _exportOptionsPlist, ], exitCode: 1, - stderr: 'error: exportArchive: "Runner.app" requires a provisioning profile.' - ) + stderr: 'error: exportArchive: "Runner.app" requires a provisioning profile.', + ), ]); _createMinimalMockProjectFiles(); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_linux_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_linux_test.dart index 0d73157cd1c1d..12755e61c8f06 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_linux_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_linux_test.dart @@ -299,7 +299,7 @@ ERROR: No file or variants found for asset: images/a_dot_burr.jpeg cmakeCommand('debug'), ninjaCommand('debug', environment: const { - 'VERBOSE_SCRIPT_LOGGING': 'true' + 'VERBOSE_SCRIPT_LOGGING': 'true', }, stdout: 'STDOUT STUFF', ), diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart index cc8b1b4d332bd..a5b0bf639f197 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart @@ -202,7 +202,7 @@ STDERR STUFF }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ - setUpFakeXcodeBuildHandler('Debug') + setUpFakeXcodeBuildHandler('Debug'), ]), Platform: () => macosPlatform, FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), @@ -218,7 +218,7 @@ STDERR STUFF }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ - setUpFakeXcodeBuildHandler('Debug') + setUpFakeXcodeBuildHandler('Debug'), ]), Platform: () => macosPlatform, FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), @@ -234,7 +234,7 @@ STDERR STUFF }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ - setUpFakeXcodeBuildHandler('Debug', verbose: true) + setUpFakeXcodeBuildHandler('Debug', verbose: true), ]), Platform: () => macosPlatform, FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), @@ -251,7 +251,7 @@ STDERR STUFF }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ - setUpFakeXcodeBuildHandler('Profile') + setUpFakeXcodeBuildHandler('Profile'), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithProfile(), @@ -268,7 +268,7 @@ STDERR STUFF }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ - setUpFakeXcodeBuildHandler('Release') + setUpFakeXcodeBuildHandler('Release'), ]), Platform: () => macosPlatform, FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), @@ -323,7 +323,7 @@ STDERR STUFF }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ - setUpFakeXcodeBuildHandler('Release') + setUpFakeXcodeBuildHandler('Release'), ]), Platform: () => macosPlatform, FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), @@ -333,7 +333,7 @@ STDERR STUFF testUsingContext('build settings contains Flutter Xcode environment variables', () async { macosPlatformCustomEnv.environment = Map.unmodifiable({ - 'FLUTTER_XCODE_ASSETCATALOG_COMPILER_APPICON_NAME': 'AppIcon.special' + 'FLUTTER_XCODE_ASSETCATALOG_COMPILER_APPICON_NAME': 'AppIcon.special', }); final FlutterProject flutterProject = FlutterProject.fromDirectory(fileSystem.currentDirectory); @@ -398,7 +398,7 @@ STDERR STUFF }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ - setUpFakeXcodeBuildHandler('Debug') + setUpFakeXcodeBuildHandler('Debug'), ]), Platform: () => macosPlatform, FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart index 8eddeb6defafd..254b26dd76653 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart @@ -26,8 +26,8 @@ void main() { FileSystem fileSystem; final Platform fakePlatform = FakePlatform( environment: { - 'FLUTTER_ROOT': '/' - } + 'FLUTTER_ROOT': '/', + }, ); setUpAll(() { diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart index db1f92c49ba82..cfa19cbfe7414 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart @@ -105,11 +105,11 @@ void main() { buildMode, ...['--target', 'INSTALL'], if (verbose) - '--verbose' + '--verbose', ], environment: { if (verbose) - 'VERBOSE_SCRIPT_LOGGING': 'true' + 'VERBOSE_SCRIPT_LOGGING': 'true', }, onRun: onRun, stdout: stdout, diff --git a/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart index 25d9f044dc356..8c4377d3d237d 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart @@ -156,7 +156,7 @@ void main() { await commandRunner.run([ 'config', - '--enable-web' + '--enable-web', ]); expect( diff --git a/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart index 6616b0ac25867..523c3b2defd37 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart @@ -142,7 +142,8 @@ void main() { final CommandRunner runner = createTestCommandRunner(command); await runner.run([ - 'create', '--no-pub', '--template=app', 'testy']); + 'create', '--no-pub', '--template=app', 'testy', + ]); expect((await command.usageValues).commandCreateIosLanguage, 'swift'); await runner.run([ diff --git a/packages/flutter_tools/test/commands.shard/hermetic/custom_devices_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/custom_devices_test.dart index 3799d9a944e81..28da76116029c 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/custom_devices_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/custom_devices_test.dart @@ -283,7 +283,7 @@ class FakeCommandRunner extends FlutterCommandRunner { return context.run( overrides: { - Logger: () => logger + Logger: () => logger, }, body: () { Cache.flutterRoot ??= Cache.defaultFlutterRoot( @@ -552,7 +552,7 @@ void main() { 'ping', '-c', '1', '-w', '1', - 'testhostname' + 'testhostname', ], postBuildCommand: null, // ignore: avoid_redundant_argument_values installCommand: const [ @@ -560,19 +560,19 @@ void main() { '-r', '-o', 'BatchMode=yes', r'${localPath}', - r'testuser@testhostname:/tmp/${appName}' + r'testuser@testhostname:/tmp/${appName}', ], uninstallCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - r'rm -rf "/tmp/${appName}"' + r'rm -rf "/tmp/${appName}"', ], runDebugCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - 'testrundebug' + 'testrundebug', ], forwardPortCommand: const [ 'ssh', @@ -580,14 +580,14 @@ void main() { '-o', 'ExitOnForwardFailure=yes', '-L', r'127.0.0.1:${hostPort}:127.0.0.1:${devicePort}', 'testuser@testhostname', - "echo 'Port forwarding success'; read" + "echo 'Port forwarding success'; read", ], forwardPortSuccessRegex: RegExp('Port forwarding success'), screenshotCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - 'testscreenshot' + 'testscreenshot', ], ) ) @@ -642,7 +642,7 @@ void main() { 'ping', '-c', '1', '-w', '1', - '192.168.178.1' + '192.168.178.1', ], postBuildCommand: null, // ignore: avoid_redundant_argument_values installCommand: const [ @@ -650,19 +650,19 @@ void main() { '-r', '-o', 'BatchMode=yes', r'${localPath}', - r'testuser@192.168.178.1:/tmp/${appName}' + r'testuser@192.168.178.1:/tmp/${appName}', ], uninstallCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@192.168.178.1', - r'rm -rf "/tmp/${appName}"' + r'rm -rf "/tmp/${appName}"', ], runDebugCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@192.168.178.1', - 'testrundebug' + 'testrundebug', ], forwardPortCommand: const [ 'ssh', @@ -670,19 +670,19 @@ void main() { '-o', 'ExitOnForwardFailure=yes', '-L', r'127.0.0.1:${hostPort}:127.0.0.1:${devicePort}', 'testuser@192.168.178.1', - "echo 'Port forwarding success'; read" + "echo 'Port forwarding success'; read", ], forwardPortSuccessRegex: RegExp('Port forwarding success'), screenshotCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@192.168.178.1', - 'testscreenshot' - ] - ) - ) + 'testscreenshot', + ], + ), + ), ); - } + }, ); testUsingContext( @@ -732,7 +732,7 @@ void main() { '-6', '-c', '1', '-w', '1', - '::1' + '::1', ], postBuildCommand: null, // ignore: avoid_redundant_argument_values installCommand: const [ @@ -741,21 +741,21 @@ void main() { '-o', 'BatchMode=yes', '-6', r'${localPath}', - r'testuser@[::1]:/tmp/${appName}' + r'testuser@[::1]:/tmp/${appName}', ], uninstallCommand: const [ 'ssh', '-o', 'BatchMode=yes', '-6', 'testuser@[::1]', - r'rm -rf "/tmp/${appName}"' + r'rm -rf "/tmp/${appName}"', ], runDebugCommand: const [ 'ssh', '-o', 'BatchMode=yes', '-6', 'testuser@[::1]', - 'testrundebug' + 'testrundebug', ], forwardPortCommand: const [ 'ssh', @@ -764,7 +764,7 @@ void main() { '-6', '-L', r'[::1]:${hostPort}:[::1]:${devicePort}', 'testuser@[::1]', - "echo 'Port forwarding success'; read" + "echo 'Port forwarding success'; read", ], forwardPortSuccessRegex: RegExp('Port forwarding success'), screenshotCommand: const [ @@ -772,12 +772,12 @@ void main() { '-o', 'BatchMode=yes', '-6', 'testuser@[::1]', - 'testscreenshot' - ] - ) - ) + 'testscreenshot', + ], + ), + ), ); - } + }, ); testUsingContext( @@ -826,7 +826,7 @@ void main() { 'ping', '-c', '1', '-w', '1', - 'testhostname' + 'testhostname', ], postBuildCommand: null, // ignore: avoid_redundant_argument_values installCommand: [ @@ -834,30 +834,30 @@ void main() { '-r', '-o', 'BatchMode=yes', r'${localPath}', - r'testuser@testhostname:/tmp/${appName}' + r'testuser@testhostname:/tmp/${appName}', ], uninstallCommand: [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - r'rm -rf "/tmp/${appName}"' + r'rm -rf "/tmp/${appName}"', ], runDebugCommand: [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - 'testrundebug' + 'testrundebug', ], screenshotCommand: [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - 'testscreenshot' - ] - ) - ) + 'testscreenshot', + ], + ), + ), ); - } + }, ); testUsingContext( @@ -880,12 +880,12 @@ void main() { apply: 'y', ), fileSystem: fs, - featureEnabled: true + featureEnabled: true, ); await expectLater( runner.run(const ['custom-devices', 'add', '--no-check']), - completes + completes, ); final CustomDevicesConfig config = CustomDevicesConfig.test( @@ -906,7 +906,7 @@ void main() { 'ping', '-c', '1', '-w', '1', - 'testhostname' + 'testhostname', ], postBuildCommand: null, // ignore: avoid_redundant_argument_values installCommand: const [ @@ -914,19 +914,19 @@ void main() { '-r', '-o', 'BatchMode=yes', r'${localPath}', - r'testuser@testhostname:/tmp/${appName}' + r'testuser@testhostname:/tmp/${appName}', ], uninstallCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - r'rm -rf "/tmp/${appName}"' + r'rm -rf "/tmp/${appName}"', ], runDebugCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - 'testrundebug' + 'testrundebug', ], forwardPortCommand: const [ 'ssh', @@ -934,7 +934,7 @@ void main() { '-o', 'ExitOnForwardFailure=yes', '-L', r'127.0.0.1:${hostPort}:127.0.0.1:${devicePort}', 'testuser@testhostname', - "echo 'Port forwarding success'; read" + "echo 'Port forwarding success'; read", ], forwardPortSuccessRegex: RegExp('Port forwarding success'), ) @@ -1230,7 +1230,7 @@ void main() { 'ping', '-n', '1', '-w', '500', - 'testhostname' + 'testhostname', ], pingSuccessRegex: RegExp(r'[<=]\d+ms'), postBuildCommand: null, // ignore: avoid_redundant_argument_values @@ -1239,19 +1239,19 @@ void main() { '-r', '-o', 'BatchMode=yes', r'${localPath}', - r'testuser@testhostname:/tmp/${appName}' + r'testuser@testhostname:/tmp/${appName}', ], uninstallCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - r'rm -rf "/tmp/${appName}"' + r'rm -rf "/tmp/${appName}"', ], runDebugCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - 'testrundebug' + 'testrundebug', ], forwardPortCommand: const [ 'ssh', @@ -1259,17 +1259,17 @@ void main() { '-o', 'ExitOnForwardFailure=yes', '-L', r'127.0.0.1:${hostPort}:127.0.0.1:${devicePort}', 'testuser@testhostname', - "echo 'Port forwarding success'; read" + "echo 'Port forwarding success'; read", ], forwardPortSuccessRegex: RegExp('Port forwarding success'), screenshotCommand: const [ 'ssh', '-o', 'BatchMode=yes', 'testuser@testhostname', - 'testscreenshot' - ] - ) - ) + 'testscreenshot', + ], + ), + ), ); }, ); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/devices_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/devices_test.dart index 427f66cfadc74..ca3ffe87c21f8 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/devices_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/devices_test.dart @@ -82,8 +82,8 @@ void main() { 'fastStart': false, 'flutterExit': true, 'hardwareRendering': true, - 'startPaused': true - } + 'startPaused': true, + }, }, { 'name': 'webby', @@ -99,10 +99,10 @@ void main() { 'fastStart': false, 'flutterExit': true, 'hardwareRendering': true, - 'startPaused': true - } - } - ] + 'startPaused': true, + }, + }, + ], ); }, overrides: { DeviceManager: () => _FakeDeviceManager(), diff --git a/packages/flutter_tools/test/commands.shard/hermetic/downgrade_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/downgrade_test.dart index 127744eaa1f0f..a2ad7121d0a8d 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/downgrade_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/downgrade_test.dart @@ -68,10 +68,10 @@ void main() { processManager: FakeProcessManager.list([ const FakeCommand( command: [ - 'git', 'describe', '--tags', 'abcd' + 'git', 'describe', '--tags', 'abcd', ], - stdout: 'v1.2.3' - ) + stdout: 'v1.2.3', + ), ]), terminal: terminal, stdio: stdio, @@ -96,10 +96,10 @@ void main() { processManager: FakeProcessManager.list([ const FakeCommand( command: [ - 'git', 'describe', '--tags', 'invalid' + 'git', 'describe', '--tags', 'invalid', ], exitCode: 1, - ) + ), ]), terminal: terminal, stdio: stdio, @@ -188,19 +188,19 @@ void main() { processManager: FakeProcessManager.list([ const FakeCommand( command: [ - 'git', 'describe', '--tags', 'g6b00b5e88' + 'git', 'describe', '--tags', 'g6b00b5e88', ], stdout: 'v1.2.3', ), const FakeCommand( command: [ - 'git', 'reset', '--hard', 'g6b00b5e88' + 'git', 'reset', '--hard', 'g6b00b5e88', ], ), const FakeCommand( command: [ - 'git', 'checkout', 'master', '--' - ] + 'git', 'checkout', 'master', '--', + ], ), ]), terminal: terminal, diff --git a/packages/flutter_tools/test/commands.shard/hermetic/proxy_validator_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/proxy_validator_test.dart index be600cba5fa67..012c8b149e114 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/proxy_validator_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/proxy_validator_test.dart @@ -22,11 +22,11 @@ void main() { }) async { final List interfaces = [ FakeNetworkInterface([ - const FakeInternetAddress('127.0.0.1') + const FakeInternetAddress('127.0.0.1'), ]), FakeNetworkInterface([ - const FakeInternetAddress('::1') - ]) + const FakeInternetAddress('::1'), + ]), ]; return Future>.value(interfaces); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/symbolize_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/symbolize_test.dart index 493f046fa0a08..c58c14aab74f8 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/symbolize_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/symbolize_test.dart @@ -128,7 +128,8 @@ void main() { expect( createTestCommandRunner(command).run(const [ - 'symbolize', '--debug-info=app.debug', '--input=foo.stack', '--output=results/foo.result']), + 'symbolize', '--debug-info=app.debug', '--input=foo.stack', '--output=results/foo.result', + ]), throwsToolExit(message: 'test'), ); }, overrides: { diff --git a/packages/flutter_tools/test/commands.shard/hermetic/test_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/test_test.dart index 17762d3954e4d..58004aad2be9f 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/test_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/test_test.dart @@ -40,18 +40,18 @@ final String _packageConfigContents = json.encode({ 'name': 'test_api', 'rootUri': 'file:///path/to/pubcache/.pub-cache/hosted/pub.dartlang.org/test_api-0.2.19', 'packageUri': 'lib/', - 'languageVersion': '2.12' + 'languageVersion': '2.12', }, { 'name': 'integration_test', 'rootUri': 'file:///path/to/flutter/packages/integration_test', 'packageUri': 'lib/', - 'languageVersion': '2.12' + 'languageVersion': '2.12', }, ], 'generated': '2021-02-24T07:55:20.084834Z', 'generator': 'pub', - 'generatorVersion': '2.13.0-68.0.dev' + 'generatorVersion': '2.13.0-68.0.dev', }); void main() { @@ -108,12 +108,12 @@ dev_dependencies: 'name': 'test_api', 'rootUri': 'file:///path/to/pubcache/.pub-cache/hosted/pub.dartlang.org/test_api-0.2.19', 'packageUri': 'lib/', - 'languageVersion': '2.12' + 'languageVersion': '2.12', }, ], 'generated': '2021-02-24T07:55:20.084834Z', 'generator': 'pub', - 'generatorVersion': '2.13.0-68.0.dev' + 'generatorVersion': '2.13.0-68.0.dev', })); final FakePackageTest fakePackageTest = FakePackageTest(); final TestCommand testCommand = TestCommand(testWrapper: fakePackageTest); @@ -122,7 +122,7 @@ dev_dependencies: expect(() => commandRunner.run(const [ 'test', '--no-pub', - 'integration_test' + 'integration_test', ]), throwsToolExit()); }, overrides: { FileSystem: () => fs, @@ -510,7 +510,7 @@ dev_dependencies: await commandRunner.run(const [ 'test', '--no-pub', - '--platform=chrome' + '--platform=chrome', ]); expect(await testCommand.requiredArtifacts, [DevelopmentArtifact.web]); diff --git a/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart b/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart index d2beafda51707..27c26878e489d 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart @@ -170,7 +170,7 @@ void main() { '--split-debug-info', '/project-name/v1.2.3/', '--obfuscate', - '--dart-define=foo=bar' + '--dart-define=foo=bar', ], ); diff --git a/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart b/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart index 8bb4cc8503753..b114d4a100420 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart @@ -53,7 +53,7 @@ void main() { 'bundle', ...?arguments, '--target=$projectPath/lib/main.dart', - '--no-pub' + '--no-pub', ]); return command; } @@ -215,7 +215,7 @@ void main() { '--no-pub', '--debug', '--target-platform=android-arm', - '--track-widget-creation' + '--track-widget-creation', ]); }, overrides: { BuildSystem: () => TestBuildSystem.all(BuildResult(success: true), (Target target, Environment environment) { @@ -245,7 +245,7 @@ void main() { '--no-pub', '--debug', '--target-platform=android-arm', - '--dart-define=foo=bar' + '--dart-define=foo=bar', ]); }, overrides: { BuildSystem: () => TestBuildSystem.all(BuildResult(success: true), (Target target, Environment environment) { @@ -306,7 +306,7 @@ void main() { '--no-pub', '--debug', '--target-platform=android-arm', - '--filesystem-root=test1,test2' + '--filesystem-root=test1,test2', ]); }, overrides: { BuildSystem: () => TestBuildSystem.all(BuildResult(success: true), (Target target, Environment environment) { @@ -337,7 +337,7 @@ void main() { '--no-pub', '--debug', '--target-platform=android-arm', - '--extra-front-end-options=--testflag,--testflag2' + '--extra-front-end-options=--testflag,--testflag2', ]); }, overrides: { BuildSystem: () => TestBuildSystem.all(BuildResult(success: true), (Target target, Environment environment) { @@ -368,7 +368,7 @@ void main() { '--no-pub', '--debug', '--target-platform=android-arm', - '--extra-gen-snapshot-options=--testflag,--testflag2' + '--extra-gen-snapshot-options=--testflag,--testflag2', ]); }, overrides: { BuildSystem: () => TestBuildSystem.all(BuildResult(success: true), (Target target, Environment environment) { diff --git a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart index 9fcd22515850d..fe69d009f3da3 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart @@ -1034,7 +1034,7 @@ void main() { projectDir.childDirectory('example').childDirectory('web'), isNot(exists)); validatePubspecForPlugin(projectDir: projectDir.absolute.path, expectedPlatforms: const [ - 'windows' + 'windows', ], pluginClass: 'FlutterProjectPluginCApi', unexpectedPlatforms: ['some_platform']); expect(logger.errorText, isNot(contains(_kNoPlatformsMessage))); @@ -1317,7 +1317,7 @@ void main() { command: const ['openssl', 'x509', '-subject'], stdin: IOSink(controller.sink), stdout: 'subject= /CN=iPhone Developer: Profile 1 (1111AAAA11)/OU=3333CCCC33/O=My Team/C=US', - ) + ), ]); controller.stream.listen((List chunk) { @@ -1764,7 +1764,7 @@ void main() { '--org', 'com.bar.foo', '-i', 'objc', '-a', 'java', - '--platforms', 'ios,android' + '--platforms', 'ios,android', ], [], ); @@ -1918,7 +1918,7 @@ void main() { FakeRequest( Uri.parse('https://master-api.flutter.dev/snippets/foo.bar.Baz.dart'), response: FakeResponse(body: utf8.encode('void main() {}')), - ) + ), ]); }; }, @@ -1941,7 +1941,7 @@ void main() { FakeRequest( Uri.parse('https://master-api.flutter.dev/snippets/foo.bar.Baz.dart'), response: FakeResponse(body: utf8.encode('void main() { String? foo; print(foo); } // ignore: avoid_print')), - ) + ), ]); }; }, @@ -1968,7 +1968,7 @@ void main() { FakeRequest( Uri.parse('https://master-api.flutter.dev/snippets/index.json'), response: FakeResponse(body: utf8.encode(samplesIndexJson)), - ) + ), ]); }; }, @@ -1996,7 +1996,7 @@ void main() { return FakeHttpClient.list([ FakeRequest( Uri.parse('https://master-api.flutter.dev/snippets/index.json'), - ) + ), ]); }; }, @@ -2021,7 +2021,7 @@ void main() { FakeRequest( Uri.parse('https://master-api.flutter.dev/snippets/index.json'), response: const FakeResponse(statusCode: HttpStatus.notFound), - ) + ), ]); }; }, @@ -2055,7 +2055,7 @@ void main() { expect(projectDir.childDirectory('example').childDirectory('macos'), isNot(exists)); validatePubspecForPlugin(projectDir: projectDir.absolute.path, expectedPlatforms: [ - 'some_platform' + 'some_platform', ], pluginClass: 'somePluginClass', unexpectedPlatforms: [ 'ios', 'android', 'web', 'linux', 'windows', 'macos']); }, overrides: { @@ -2141,7 +2141,7 @@ void main() { expect( projectDir.childDirectory('example').childDirectory('android'), exists); validatePubspecForPlugin(projectDir: projectDir.absolute.path, expectedPlatforms: const [ - 'android' + 'android', ], pluginClass: 'FlutterProjectPlugin', unexpectedPlatforms: ['some_platform'], androidIdentifier: 'com.example.flutter_project'); @@ -2162,7 +2162,7 @@ void main() { projectDir.childDirectory('lib').childFile('flutter_project_web.dart'), exists); validatePubspecForPlugin(projectDir: projectDir.absolute.path, expectedPlatforms: const [ - 'web' + 'web', ], pluginClass: 'FlutterProjectWeb', unexpectedPlatforms: ['some_platform'], androidIdentifier: 'com.example.flutter_project', @@ -2188,7 +2188,7 @@ void main() { projectDir.childDirectory('lib').childFile('flutter_project_web.dart'), isNot(exists)); validatePubspecForPlugin(projectDir: projectDir.absolute.path, expectedPlatforms: const [ - 'some_platform' + 'some_platform', ], pluginClass: 'somePluginClass', unexpectedPlatforms: ['web']); expect(logger.errorText, contains(_kNoPlatformsMessage)); @@ -2324,7 +2324,7 @@ void main() { expect(projectDir.childDirectory('ios'), exists); expect(projectDir.childDirectory('example').childDirectory('ios'), exists); validatePubspecForPlugin(projectDir: projectDir.absolute.path, expectedPlatforms: const [ - 'ios', 'android' + 'ios', 'android', ], pluginClass: 'FlutterProjectPlugin', unexpectedPlatforms: ['some_platform'], androidIdentifier: 'com.example.flutter_project'); diff --git a/packages/flutter_tools/test/commands.shard/permeable/devices_test.dart b/packages/flutter_tools/test/commands.shard/permeable/devices_test.dart index 8df718fa17617..a73f7a1b198fe 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/devices_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/devices_test.dart @@ -71,9 +71,9 @@ void main() { 'fastStart': false, 'flutterExit': false, 'hardwareRendering': false, - 'startPaused': true - } - } + 'startPaused': true, + }, + }, )), ); }, overrides: { diff --git a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart index 590c65a030d8d..8ca503852b29e 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart @@ -503,8 +503,10 @@ void main() { globals.fs.file('pubspec.yaml').createSync(); final IOSink stdin = IOSink(StreamController>().sink); processManager.addCommand( - FakeCommand(command: const [ - '/bin/cache/dart-sdk/bin/dart', '__deprecated_pub', 'run', '--foo', 'bar'], + FakeCommand( + command: const [ + '/bin/cache/dart-sdk/bin/dart', '__deprecated_pub', 'run', '--foo', 'bar', + ], stdin: stdin, ), ); @@ -531,8 +533,10 @@ void main() { globals.fs.file('pubspec.yaml').createSync(); final IOSink stdin = IOSink(StreamController>().sink); processManager.addCommand( - FakeCommand(command: const [ - '/bin/cache/dart-sdk/bin/dart', '__deprecated_pub', 'token', 'list'], + FakeCommand( + command: const [ + '/bin/cache/dart-sdk/bin/dart', '__deprecated_pub', 'token', 'list', + ], stdin: stdin, ), ); @@ -557,8 +561,10 @@ void main() { testUsingContext('upgrade does not check for pubspec.yaml if -h/--help is passed', () async { Cache.flutterRoot = ''; processManager.addCommand( - FakeCommand(command: const [ - '/bin/cache/dart-sdk/bin/dart', '__deprecated_pub', 'upgrade', '-h'], + FakeCommand( + command: const [ + '/bin/cache/dart-sdk/bin/dart', '__deprecated_pub', 'upgrade', '-h', + ], stdin: IOSink(StreamController>().sink), ), ); diff --git a/packages/flutter_tools/test/commands.shard/permeable/upgrade_test.dart b/packages/flutter_tools/test/commands.shard/permeable/upgrade_test.dart index c98fe640801dc..b905b8aaa240b 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/upgrade_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/upgrade_test.dart @@ -157,7 +157,7 @@ void main() { processManager.addCommands([ const FakeCommand(command: [ - 'git', 'fetch', '--tags' + 'git', 'fetch', '--tags', ]), const FakeCommand(command: [ 'git', 'rev-parse', '--verify', '@{upstream}', @@ -185,7 +185,7 @@ void main() { testUsingContext('fetchLatestVersion throws toolExit if HEAD is detached', () async { processManager.addCommands(const [ FakeCommand(command: [ - 'git', 'fetch', '--tags' + 'git', 'fetch', '--tags', ]), FakeCommand( command: ['git', 'rev-parse', '--verify', '@{upstream}'], @@ -214,7 +214,7 @@ void main() { testUsingContext('fetchLatestVersion throws toolExit if no upstream configured', () async { processManager.addCommands(const [ FakeCommand(command: [ - 'git', 'fetch', '--tags' + 'git', 'fetch', '--tags', ]), FakeCommand( command: ['git', 'rev-parse', '--verify', '@{upstream}'], diff --git a/packages/flutter_tools/test/general.shard/android/adb_log_reader_test.dart b/packages/flutter_tools/test/general.shard/android/adb_log_reader_test.dart index 8c284c083b2d7..31de85406c5b9 100644 --- a/packages/flutter_tools/test/general.shard/android/adb_log_reader_test.dart +++ b/packages/flutter_tools/test/general.shard/android/adb_log_reader_test.dart @@ -34,7 +34,7 @@ void main() { '-T', "'$kLastLogcatTimestamp'", ], - ) + ), ]); await AdbLogReader.createLogReader( createFakeDevice(kLollipopVersionCode), @@ -57,7 +57,7 @@ void main() { '-v', 'time', ], - ) + ), ]); await AdbLogReader.createLogReader( createFakeDevice(kLollipopVersionCode - 1), @@ -80,7 +80,7 @@ void main() { '-v', 'time', ], - ) + ), ]); await AdbLogReader.createLogReader( createFakeDevice(null), @@ -105,7 +105,7 @@ void main() { '-s', 'flutter', ], - ) + ), ]); await AdbLogReader.createLogReader( createFakeDevice(null), @@ -131,7 +131,7 @@ void main() { ], completer: Completer.sync(), stdout: 'Hello There\n', - ) + ), ]); final AdbLogReader logReader = await AdbLogReader.createLogReader( createFakeDevice(null), @@ -165,7 +165,7 @@ void main() { '05-11 12:54:46.665 E/AndroidRuntime(11787): Process: com.example.foobar, PID: 11787\n' '05-11 12:54:46.665 java.lang.RuntimeException: Unable to instantiate application ' 'io.flutter.app.FlutterApplication2: java.lang.ClassNotFoundException:\n', - ) + ), ]); final AdbLogReader logReader = await AdbLogReader.createLogReader( createFakeDevice(null), diff --git a/packages/flutter_tools/test/general.shard/android/android_device_discovery_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_discovery_test.dart index 986e12411b594..bf04c5637fa9a 100644 --- a/packages/flutter_tools/test/general.shard/android/android_device_discovery_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_device_discovery_test.dart @@ -93,7 +93,7 @@ void main() { const FakeCommand( command: ['adb', 'devices', '-l'], exitCode: 1, - ) + ), ]); final AndroidDevices androidDevices = AndroidDevices( androidSdk: FakeAndroidSdk(), @@ -143,7 +143,7 @@ List of devices attached 05a02bac device usb:336592896X product:razor model:Nexus_7 device:flo ''', - ) + ), ]), platform: FakePlatform(), fileSystem: MemoryFileSystem.test(), @@ -172,7 +172,7 @@ localhost:36790 device emulator-5612 host features:shell_2 ''', - ) + ), ]), platform: FakePlatform(), fileSystem: MemoryFileSystem.test(), @@ -200,7 +200,7 @@ List of devices attached ZX1G22JJWR device usb:3-3 product:shamu model:Nexus_6 device:shamu features:cmd,shell_v2 ''', - ) + ), ]), platform: FakePlatform(), fileSystem: MemoryFileSystem.test(), @@ -226,7 +226,7 @@ It appears you do not have 'Android SDK Platform-tools' installed. Use the 'android' tool to install them: android update sdk --no-ui --filter 'platform-tools' ''', - ) + ), ]), platform: FakePlatform(), fileSystem: MemoryFileSystem.test(), diff --git a/packages/flutter_tools/test/general.shard/android/android_device_port_forwarder_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_port_forwarder_test.dart index 8197ccdd917d9..410a02c93d320 100644 --- a/packages/flutter_tools/test/general.shard/android/android_device_port_forwarder_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_device_port_forwarder_test.dart @@ -19,7 +19,7 @@ void main() { const FakeCommand( command: ['adb', '-s', '1', 'forward', 'tcp:0', 'tcp:123'], stdout: '456', - ) + ), ]), logger: BufferLogger.test(), ); @@ -35,7 +35,7 @@ void main() { processManager: FakeProcessManager.list([ const FakeCommand( command: ['adb', '-s', '1', 'forward', 'tcp:456', 'tcp:123'], - ) + ), ]), logger: BufferLogger.test(), ); @@ -52,7 +52,7 @@ void main() { const FakeCommand( command: ['adb', '-s', '1', 'forward', 'tcp:456', 'tcp:123'], stdout: '456', - ) + ), ]), logger: BufferLogger.test(), ); @@ -69,7 +69,7 @@ void main() { const FakeCommand( command: ['adb', '-s', '1', 'forward', 'tcp:456', 'tcp:123'], stdout: '123456', - ) + ), ]), logger: BufferLogger.test(), ); @@ -86,7 +86,7 @@ void main() { const FakeCommand( command: ['adb', '-s', '1', 'forward', '--list'], exitCode: 1, - ) + ), ]), logger: BufferLogger.test(), ); @@ -106,7 +106,7 @@ void main() { ), const FakeCommand( command: ['adb', '-s', '1', 'forward', '--remove', 'tcp:456'], - ) + ), ]); final AndroidDevicePortForwarder forwarder = AndroidDevicePortForwarder( adbPath: 'adb', @@ -128,7 +128,7 @@ void main() { command: ['adb', '-s', '1', 'forward', '--remove', 'tcp:456'], stderr: "error: listener 'tcp:456' not found", exitCode: 1, - ) + ), ]); final AndroidDevicePortForwarder forwarder = AndroidDevicePortForwarder( adbPath: 'adb', @@ -146,7 +146,7 @@ void main() { command: ['adb', '-s', '1', 'forward', '--remove', 'tcp:456'], stderr: 'error: everything is broken!', exitCode: 1, - ) + ), ]); final BufferLogger logger = BufferLogger.test(); final AndroidDevicePortForwarder forwarder = AndroidDevicePortForwarder( diff --git a/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart index 030af3fbdae80..da058687d1309 100644 --- a/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart @@ -198,7 +198,7 @@ void main() { '-r', '--user', '10', - 'app.apk' + 'app.apk', ], stdout: '\n\nThe Dart VM service is listening on http://127.0.0.1:456\n\n', )); diff --git a/packages/flutter_tools/test/general.shard/android/android_device_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_test.dart index d8450d8a275f1..b6bfdca661e48 100644 --- a/packages/flutter_tools/test/general.shard/android/android_device_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_device_test.dart @@ -45,7 +45,7 @@ void main() { stdout: '[ro.hardware]: [goldfish]\n[ro.build.characteristics]: [unused]', // Heap corruption exit code. exitCode: -1073740940, - ) + ), ]; final AndroidDevice windowsDevice = setUpAndroidDevice( @@ -88,8 +88,8 @@ void main() { FakeCommand( command: const ['adb', '-s', '1234', 'shell', 'getprop'], stdout: '[ro.product.cpu.abi]: [${entry.key.first}]\n' - '[ro.product.cpu.abilist]: [${entry.key.last}]' - ) + '[ro.product.cpu.abilist]: [${entry.key.last}]', + ), ]), ); @@ -117,7 +117,7 @@ void main() { command: const ['adb', '-s', '1234', 'shell', 'getprop'], stdout: '[ro.product.cpu.abi]: [${entry.key.first}]\n' '[ro.product.cpu.abilist]: [${entry.key.last}]' - ) + ), ]), ); @@ -234,7 +234,7 @@ flutter: const FakeCommand( command: ['adb', '-s', 'emulator-5555', 'shell', 'getprop'], stdout: '[ro.hardware]: [goldfish]' - ) + ), ]), id: 'emulator-5555', androidConsoleSocketFactory: (String host, int port) async => @@ -256,7 +256,7 @@ flutter: const FakeCommand( command: ['adb', '-s', 'emulator-5555', 'shell', 'getprop'], stdout: '[ro.hardware]: [samsungexynos7420]' - ) + ), ]), androidConsoleSocketFactory: (String host, int port) async { socketWasCreated = true; @@ -275,7 +275,7 @@ flutter: const FakeCommand( command: ['adb', '-s', '1234', 'shell', 'getprop'], stdout: '[ro.hardware]: [goldfish]' - ) + ), ]), androidConsoleSocketFactory: (String host, int port) async { socketWasCreated = true; @@ -293,7 +293,7 @@ flutter: const FakeCommand( command: ['adb', '-s', '1234', 'shell', 'getprop'], stdout: '[ro.hardware]: [goldfish]' - ) + ), ]), androidConsoleSocketFactory: (String host, int port) => throw Exception('Fake socket error'), ); @@ -307,7 +307,7 @@ flutter: const FakeCommand( command: ['adb', '-s', '1234', 'shell', 'getprop'], stdout: '[ro.hardware]: [goldfish]' - ) + ), ]), androidConsoleSocketFactory: (String host, int port) async => FakeUnresponsiveAndroidConsoleSocket(), @@ -322,7 +322,7 @@ flutter: const FakeCommand( command: ['adb', '-s', '1234', 'shell', 'getprop'], stdout: '[ro.hardware]: [goldfish]' - ) + ), ]), androidConsoleSocketFactory: (String host, int port) async => FakeDisconnectingAndroidConsoleSocket() @@ -337,7 +337,7 @@ flutter: const FakeCommand( command: ['adb', '-s', '1234', 'shell', '-x', 'logcat', '-v', 'time', '-t', '1'], exitCode: 1, - ) + ), ]) ); @@ -357,7 +357,7 @@ flutter: ), const FakeCommand( command: ['adb', '-s', '1234', 'shell', '-x', 'logcat', '-v', 'time'], - ) + ), ]) ); diff --git a/packages/flutter_tools/test/general.shard/android/android_emulator_test.dart b/packages/flutter_tools/test/general.shard/android/android_emulator_test.dart index c85b6e2c0a366..027164dcc3d7a 100644 --- a/packages/flutter_tools/test/general.shard/android/android_emulator_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_emulator_test.dart @@ -145,7 +145,7 @@ void main() { testWithoutContext('succeeds with coldboot launch', () async { final List kEmulatorLaunchColdBootCommand = [ ...kEmulatorLaunchCommand, - '-no-snapshot-load' + '-no-snapshot-load', ]; final AndroidEmulator emulator = AndroidEmulator(emulatorID, processManager: FakeProcessManager.list([ diff --git a/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart b/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart index bd90fa1730346..37246c9362b4f 100644 --- a/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart @@ -60,7 +60,7 @@ void main() { '-Pdart-obfuscation=false', '-Ptrack-widget-creation=false', '-Ptree-shake-icons=false', - 'assembleRelease' + 'assembleRelease', ], exitCode: 1, stderr: '\nSome gradle message\n', @@ -150,7 +150,7 @@ void main() { '-Pdart-obfuscation=false', '-Ptrack-widget-creation=false', '-Ptree-shake-icons=false', - 'assembleRelease' + 'assembleRelease', ], )); @@ -656,7 +656,7 @@ void main() { '-Pdart-obfuscation=false', '-Ptrack-widget-creation=false', '-Ptree-shake-icons=false', - 'assembleRelease' + 'assembleRelease', ], )); fileSystem.directory('android') @@ -788,7 +788,7 @@ void main() { '-Ptrack-widget-creation=false', '-Ptree-shake-icons=false', '-Ptarget-platform=android-arm,android-arm64,android-x64', - 'assembleAarRelease' + 'assembleAarRelease', ], )); @@ -841,7 +841,7 @@ void main() { '-Ptrack-widget-creation=false', '-Ptree-shake-icons=false', '-Ptarget-platform=android-arm,android-arm64,android-x64', - 'assembleAarRelease' + 'assembleAarRelease', ], exitCode: 108, stderr: 'Gradle task assembleAarRelease failed with exit code 108.', @@ -1119,7 +1119,7 @@ void main() { '-Pdart-obfuscation=false', '-Ptrack-widget-creation=false', '-Ptree-shake-icons=false', - 'assembleRelease' + 'assembleRelease', ], exitCode: 1, )); @@ -1192,7 +1192,7 @@ void main() { '-Pdart-obfuscation=false', '-Ptrack-widget-creation=false', '-Ptree-shake-icons=false', - 'assembleRelease' + 'assembleRelease', ], )); fileSystem.file('android/gradlew').createSync(recursive: true); @@ -1253,7 +1253,7 @@ void main() { '-Plocal-engine-build-mode=release', '-Plocal-engine-out=out/android_arm', '-Ptarget-platform=android-arm', - 'assembleAarRelease' + 'assembleAarRelease', ], )); @@ -1337,7 +1337,7 @@ void main() { '-Plocal-engine-build-mode=release', '-Plocal-engine-out=out/android_arm64', '-Ptarget-platform=android-arm64', - 'assembleAarRelease' + 'assembleAarRelease', ], )); @@ -1421,7 +1421,7 @@ void main() { '-Plocal-engine-build-mode=release', '-Plocal-engine-out=out/android_x86', '-Ptarget-platform=android-x86', - 'assembleAarRelease' + 'assembleAarRelease', ], )); @@ -1505,7 +1505,7 @@ void main() { '-Plocal-engine-build-mode=release', '-Plocal-engine-out=out/android_x64', '-Ptarget-platform=android-x64', - 'assembleAarRelease' + 'assembleAarRelease', ], )); diff --git a/packages/flutter_tools/test/general.shard/android/android_install_test.dart b/packages/flutter_tools/test/general.shard/android/android_install_test.dart index 8e889d852ddc0..ca6fc9670da99 100644 --- a/packages/flutter_tools/test/general.shard/android/android_install_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_install_test.dart @@ -31,7 +31,7 @@ const FakeCommand kInstallCommand = FakeCommand( '-r', '--user', '10', - 'app.apk' + 'app.apk', ], ); const FakeCommand kStoreShaCommand = FakeCommand( @@ -182,7 +182,7 @@ void main() { '-r', '--user', 'jane', - 'app.apk' + 'app.apk', ], exitCode: 1, stderr: 'Exception occurred while executing: java.lang.IllegalArgumentException: Bad user number: jane', diff --git a/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart b/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart index 9276230d043ba..219c945974244 100644 --- a/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart +++ b/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart @@ -427,7 +427,7 @@ Execution failed for task ':app:mergeDexDebug'. }, overrides: { FileSystem: () => MemoryFileSystem.test(), ProcessManager: () => FakeProcessManager.any(), - AnsiTerminal: () => _TestPromptTerminal('y') + AnsiTerminal: () => _TestPromptTerminal('y'), }); testUsingContext('exits if multidex support skipped', () async { @@ -493,7 +493,7 @@ Execution failed for task ':app:mergeDexDebug'. }, overrides: { FileSystem: () => MemoryFileSystem.test(), ProcessManager: () => FakeProcessManager.any(), - AnsiTerminal: () => _TestPromptTerminal('n') + AnsiTerminal: () => _TestPromptTerminal('n'), }); testUsingContext('exits if multidex support disabled', () async { diff --git a/packages/flutter_tools/test/general.shard/android/template_test.dart b/packages/flutter_tools/test/general.shard/android/template_test.dart index 138e7d505c883..4b6e031fb9d4b 100644 --- a/packages/flutter_tools/test/general.shard/android/template_test.dart +++ b/packages/flutter_tools/test/general.shard/android/template_test.dart @@ -36,7 +36,7 @@ void main() { ); final Map context = { - 'androidIdentifier': 'in.when.there' + 'androidIdentifier': 'in.when.there', }; template.render(destination, context); diff --git a/packages/flutter_tools/test/general.shard/artifact_updater_test.dart b/packages/flutter_tools/test/general.shard/artifact_updater_test.dart index 12bfef989b393..1470c0ed746e1 100644 --- a/packages/flutter_tools/test/general.shard/artifact_updater_test.dart +++ b/packages/flutter_tools/test/general.shard/artifact_updater_test.dart @@ -123,7 +123,7 @@ void main() { headers: >{ 'x-goog-hash': [ 'foo-bar-baz', - 'md5=k7iFrf4NoInN9jSQT9WfcQ==' + 'md5=k7iFrf4NoInN9jSQT9WfcQ==', ], } )), @@ -159,7 +159,7 @@ void main() { headers: >{ 'x-goog-hash': [ 'foo-bar-baz', - 'md5=k7iFrf4SQT9WfcQ==' + 'md5=k7iFrf4SQT9WfcQ==', ], } )), @@ -167,7 +167,7 @@ void main() { headers: >{ 'x-goog-hash': [ 'foo-bar-baz', - 'md5=k7iFrf4SQT9WfcQ==' + 'md5=k7iFrf4SQT9WfcQ==', ], } )), @@ -254,11 +254,11 @@ void main() { operatingSystemUtils: operatingSystemUtils, platform: FakePlatform( environment: { - 'FLUTTER_STORAGE_BASE_URL': 'foo-bar' + 'FLUTTER_STORAGE_BASE_URL': 'foo-bar', }, ), httpClient: FakeHttpClient.list([ - FakeRequest(Uri.parse('http://foo-bar/test.zip'), responseError: ArgumentError()) + FakeRequest(Uri.parse('http://foo-bar/test.zip'), responseError: ArgumentError()), ]), tempStorage: fileSystem.currentDirectory.childDirectory('temp') ..createSync(), diff --git a/packages/flutter_tools/test/general.shard/base/build_test.dart b/packages/flutter_tools/test/general.shard/base/build_test.dart index b5d95d554312f..39161065f8d81 100644 --- a/packages/flutter_tools/test/general.shard/base/build_test.dart +++ b/packages/flutter_tools/test/general.shard/base/build_test.dart @@ -76,7 +76,7 @@ void main() { FakeCommand( command: [ artifacts.getArtifactPath(Artifact.genSnapshot, platform: TargetPlatform.android_x64, mode: BuildMode.release), - '--additional_arg' + '--additional_arg', ], ), ); diff --git a/packages/flutter_tools/test/general.shard/build_info_test.dart b/packages/flutter_tools/test/general.shard/build_info_test.dart index 5ad63db9044c2..53a4e2578b581 100644 --- a/packages/flutter_tools/test/general.shard/build_info_test.dart +++ b/packages/flutter_tools/test/general.shard/build_info_test.dart @@ -210,7 +210,7 @@ void main() { '-Pbundle-sksl-path=foo/bar/baz.sksl.json', '-Pcode-size-directory=foo/code-size', '-Pfoo=bar', - '-Pfizz=bazz' + '-Pfizz=bazz', ]); }); @@ -224,19 +224,19 @@ void main() { testWithoutContext('decodeDartDefines decodes base64 encoded dart defines', () { expect(decodeDartDefines({ - kDartDefines: 'ImhlbGxvIg==' + kDartDefines: 'ImhlbGxvIg==', }, kDartDefines), ['"hello"']); expect(decodeDartDefines({ - kDartDefines: 'aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbQ==' + kDartDefines: 'aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbQ==', }, kDartDefines), ['https://www.google.com']); expect(decodeDartDefines({ - kDartDefines: 'MiwzLDQ=,NQ==' + kDartDefines: 'MiwzLDQ=,NQ==', }, kDartDefines), ['2,3,4', '5']); expect(decodeDartDefines({ - kDartDefines: 'dHJ1ZQ==,ZmFsc2U=,Zmxhc2U=' + kDartDefines: 'dHJ1ZQ==,ZmFsc2U=,Zmxhc2U=', }, kDartDefines), ['true', 'false', 'flase']); expect(decodeDartDefines({ - kDartDefines: 'MTIzMiw0NTY=,Mg==' + kDartDefines: 'MTIzMiw0NTY=,Mg==', }, kDartDefines), ['1232,456', '2']); }); } diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart index 574949724e3d4..d5b873280653e 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart @@ -78,7 +78,7 @@ void main() { kBuildMode: 'debug', }, inputs: { - kBundleSkSLPath: 'bundle.sksl' + kBundleSkSLPath: 'bundle.sksl', }, processManager: processManager, artifacts: artifacts, @@ -93,8 +93,8 @@ void main() { 'platform': 'android', 'data': { 'A': 'B', - } - } + }, + }, )); // create pre-requisites. @@ -265,7 +265,7 @@ void main() { '--snapshot_kind=app-aot-elf', '--elf=${environment.buildDir.childDirectory('arm64-v8a').childFile('app.so').path}', '--strip', - environment.buildDir.childFile('app.dill').path + environment.buildDir.childFile('app.dill').path, ], )); environment.buildDir.createSync(recursive: true); @@ -303,7 +303,7 @@ void main() { 'bar', '--snapshot_kind=app-aot-elf', '--elf=${environment.buildDir.childDirectory('arm64-v8a').childFile('app.so').path}', - environment.buildDir.childFile('app.dill').path + environment.buildDir.childFile('app.dill').path, ], )); environment.buildDir.createSync(recursive: true); diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/assets_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/assets_test.dart index 4d5f6a266de78..ed20556a8cbd4 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/assets_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/assets_test.dart @@ -181,8 +181,8 @@ flutter: final BufferLogger logger = BufferLogger.test(); fileSystem.file('bundle.sksl').writeAsStringSync(json.encode( { - 'engineRevision': '1' - } + 'engineRevision': '1', + }, )); expect(() => processSkSLBundle( @@ -204,7 +204,7 @@ flutter: { 'engineRevision': '2', 'platform': 'fuchsia-arm64', - 'data': {} + 'data': {}, } )); @@ -228,8 +228,8 @@ flutter: { 'engineRevision': '2', 'platform': 'android', - 'data': {} - } + 'data': {}, + }, )); final DevFSContent content = processSkSLBundle( diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart index 257f1f70f1213..a4c34293b6a21 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart @@ -369,7 +369,7 @@ void main() { '--no-sim-use-hardfp', '--no-use-integer-division', '$build/app.dill', - ]) + ]), ]); androidEnvironment.buildDir.childFile('app.dill').createSync(recursive: true); @@ -397,7 +397,7 @@ void main() { '--no-sim-use-hardfp', '--no-use-integer-division', '$build/app.dill', - ]) + ]), ]); androidEnvironment.buildDir.childFile('app.dill').createSync(recursive: true); diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart index 38bdb0501736e..2603e69425a5b 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart @@ -186,8 +186,8 @@ void main() { 'platform': 'ios', 'data': { 'A': 'B', - } - } + }, + }, )); final Directory frameworkDirectory = environment.outputDir.childDirectory('App.framework'); diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/linux_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/linux_test.dart index 4f29ea1a74740..963c217e9c03a 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/linux_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/linux_test.dart @@ -123,8 +123,8 @@ void main() { 'platform': 'ios', 'data': { 'A': 'B', - } - } + }, + }, )); await const DebugBundleLinuxAssets(TargetPlatform.linux_x64).build(testEnvironment); diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/macos_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/macos_test.dart index ff8463760a4cf..6922195b9c9f6 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/macos_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/macos_test.dart @@ -229,8 +229,8 @@ void main() { 'platform': 'ios', 'data': { 'A': 'B', - } - } + }, + }, )); final String inputKernel = '${environment.buildDir.path}/app.dill'; @@ -389,7 +389,7 @@ void main() { '--snapshot_kind=app-aot-assembly', '--assembly=${environment.buildDir.childFile('arm64/snapshot_assembly.S').path}', '--strip', - environment.buildDir.childFile('app.dill').path + environment.buildDir.childFile('app.dill').path, ]), FakeCommand(command: [ 'Artifact.genSnapshot.TargetPlatform.darwin.release_x64', @@ -397,17 +397,17 @@ void main() { '--snapshot_kind=app-aot-assembly', '--assembly=${environment.buildDir.childFile('x86_64/snapshot_assembly.S').path}', '--strip', - environment.buildDir.childFile('app.dill').path + environment.buildDir.childFile('app.dill').path, ]), FakeCommand(command: [ 'xcrun', 'cc', '-arch', 'arm64', '-c', environment.buildDir.childFile('arm64/snapshot_assembly.S').path, - '-o', environment.buildDir.childFile('arm64/snapshot_assembly.o').path + '-o', environment.buildDir.childFile('arm64/snapshot_assembly.o').path, ]), FakeCommand(command: [ 'xcrun', 'cc', '-arch', 'x86_64', '-c', environment.buildDir.childFile('x86_64/snapshot_assembly.S').path, - '-o', environment.buildDir.childFile('x86_64/snapshot_assembly.o').path + '-o', environment.buildDir.childFile('x86_64/snapshot_assembly.o').path, ]), FakeCommand(command: [ 'xcrun', 'clang', '-arch', 'arm64', '-dynamiclib', '-Xlinker', '-rpath', @@ -415,7 +415,7 @@ void main() { '-Xlinker', '@loader_path/Frameworks', '-install_name', '@rpath/App.framework/App', '-o', environment.buildDir.childFile('arm64/App.framework/App').path, - environment.buildDir.childFile('arm64/snapshot_assembly.o').path + environment.buildDir.childFile('arm64/snapshot_assembly.o').path, ]), FakeCommand(command: [ 'xcrun', 'clang', '-arch', 'x86_64', '-dynamiclib', '-Xlinker', '-rpath', @@ -423,7 +423,7 @@ void main() { '-Xlinker', '@loader_path/Frameworks', '-install_name', '@rpath/App.framework/App', '-o', environment.buildDir.childFile('x86_64/App.framework/App').path, - environment.buildDir.childFile('x86_64/snapshot_assembly.o').path + environment.buildDir.childFile('x86_64/snapshot_assembly.o').path, ]), FakeCommand(command: [ 'lipo', diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart index d88647f7dd2fc..e3f09feb55194 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart @@ -156,8 +156,8 @@ void main() { 'platform': 'ios', 'data': { 'A': 'B', - } - } + }, + }, )); await const DebugBundleWindowsAssets().build(environment); diff --git a/packages/flutter_tools/test/general.shard/cache_test.dart b/packages/flutter_tools/test/general.shard/cache_test.dart index a21cafc1e33d3..9de6f614c203b 100644 --- a/packages/flutter_tools/test/general.shard/cache_test.dart +++ b/packages/flutter_tools/test/general.shard/cache_test.dart @@ -499,7 +499,7 @@ void main() { const FakeCommand( command: [ 'which', - 'sysctl' + 'sysctl', ], stdout: '/sbin/sysctl', ), @@ -798,7 +798,7 @@ void main() { fileSystem: fileSystem, platform: FakePlatform( environment: { - 'FLUTTER_STORAGE_BASE_URL': 'https://flutter.storage.com/override' + 'FLUTTER_STORAGE_BASE_URL': 'https://flutter.storage.com/override', }, ), ); @@ -820,7 +820,7 @@ void main() { expect(downloads, [ 'https://flutter.storage.com/override/flutter_infra_release/flutter/hijklmnop/flutter-web-sdk-linux-x64.zip', - 'https://flutter.storage.com/override/flutter_infra_release/cipd/flutter/web/canvaskit_bundle/+/abcdefg' + 'https://flutter.storage.com/override/flutter_infra_release/cipd/flutter/web/canvaskit_bundle/+/abcdefg', ]); }); @@ -1006,9 +1006,9 @@ void main() { '--project-cache-dir', 'cache/bin/cache/flutter_gradle_wrapper.rand0', 'resolveDependencies', - ]) + ]), ]), - AndroidSdk: () => fakeAndroidSdk + AndroidSdk: () => fakeAndroidSdk, }); testUsingContext('AndroidMavenArtifacts is a no-op if the Android SDK is absent', () async { @@ -1022,7 +1022,7 @@ void main() { Cache: () => cache, FileSystem: () => memoryFileSystem, ProcessManager: () => FakeProcessManager.empty(), - AndroidSdk: () => null // Android SDK was not located. + AndroidSdk: () => null, // Android SDK was not located. }); }); } diff --git a/packages/flutter_tools/test/general.shard/commands/flutter_root_test.dart b/packages/flutter_tools/test/general.shard/commands/flutter_root_test.dart index 5a44537f3eded..0a5aa8c1fd80d 100644 --- a/packages/flutter_tools/test/general.shard/commands/flutter_root_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/flutter_root_test.dart @@ -13,13 +13,13 @@ import '../../src/common.dart'; void main() { testWithoutContext('Cache can initialize flutter root from environment variable', () { final String defaultFlutterRoot = Cache.defaultFlutterRoot( - fileSystem: MemoryFileSystem.test(), - userMessages: UserMessages(), - platform: FakePlatform( - environment: { - 'FLUTTER_ROOT': 'path/to/flutter' - } - ) + fileSystem: MemoryFileSystem.test(), + userMessages: UserMessages(), + platform: FakePlatform( + environment: { + 'FLUTTER_ROOT': 'path/to/flutter', + }, + ), ); expect(defaultFlutterRoot, '/path/to/flutter'); diff --git a/packages/flutter_tools/test/general.shard/compile_batch_test.dart b/packages/flutter_tools/test/general.shard/compile_batch_test.dart index cb2700305742f..3c9d3f4b07747 100644 --- a/packages/flutter_tools/test/general.shard/compile_batch_test.dart +++ b/packages/flutter_tools/test/general.shard/compile_batch_test.dart @@ -66,7 +66,7 @@ void main() { '--no-link-platform', '--packages', '.packages', - 'file:///path/to/main.dart' + 'file:///path/to/main.dart', ], completer: completer), ]), stdoutHandler: stdoutHandler, @@ -111,7 +111,7 @@ void main() { '--no-link-platform', '--packages', '.packages', - 'file:///path/to/main.dart' + 'file:///path/to/main.dart', ], completer: completer), ]), stdoutHandler: stdoutHandler, @@ -156,7 +156,7 @@ void main() { '--no-link-platform', '--packages', '.packages', - 'file:///path/to/main.dart' + 'file:///path/to/main.dart', ], completer: completer, exitCode: 127), ]), stdoutHandler: stdoutHandler, @@ -202,7 +202,7 @@ void main() { '--tfa', '--packages', '.packages', - 'file:///path/to/main.dart' + 'file:///path/to/main.dart', ], completer: completer), ]), stdoutHandler: stdoutHandler, @@ -249,7 +249,7 @@ void main() { '--tfa', '--packages', '.packages', - 'file:///path/to/main.dart' + 'file:///path/to/main.dart', ], completer: completer), ]), stdoutHandler: stdoutHandler, diff --git a/packages/flutter_tools/test/general.shard/compile_expression_test.dart b/packages/flutter_tools/test/general.shard/compile_expression_test.dart index 981989eb1f5b0..c91e04380906b 100644 --- a/packages/flutter_tools/test/general.shard/compile_expression_test.dart +++ b/packages/flutter_tools/test/general.shard/compile_expression_test.dart @@ -68,7 +68,9 @@ void main() { processManager.process.stdout = Stream>.fromFutures( >>[ compileResponseCompleter.future, - compileExpressionResponseCompleter.future]); + compileExpressionResponseCompleter.future, + ], + ); compileResponseCompleter.complete(Future>.value(utf8.encode( 'result abc\nline1\nline2\nabc\nabc /path/to/main.dart.dill 0\n' ))); diff --git a/packages/flutter_tools/test/general.shard/coverage_collector_test.dart b/packages/flutter_tools/test/general.shard/coverage_collector_test.dart index 488ba6c8fd0bf..df502786f6fdc 100644 --- a/packages/flutter_tools/test/general.shard/coverage_collector_test.dart +++ b/packages/flutter_tools/test/general.shard/coverage_collector_test.dart @@ -23,7 +23,7 @@ void main() { jsonResponse: (VM.parse({}) ..isolates = [ IsolateRef.parse({ - 'id': '1' + 'id': '1', }), ] ).toJson(), @@ -34,9 +34,9 @@ void main() { 'isolateId': '1', }, jsonResponse: { - 'type': 'Sentinel' - } - ) + 'type': 'Sentinel', + }, + ), ], ); @@ -64,7 +64,7 @@ void main() { jsonResponse: (VM.parse({}) ..isolates = [ IsolateRef.parse({ - 'id': '1' + 'id': '1', }), ] ).toJson(), @@ -131,19 +131,22 @@ void main() { }, ); - expect(result, {'type': 'CodeCoverage', 'coverage': [ - { - 'source': 'foo.dart', - 'script': { - 'type': '@Script', - 'fixedId': true, - 'id': 'libraries/1/scripts/foo.dart', - 'uri': 'foo.dart', - '_kind': 'library', + expect(result, { + 'type': 'CodeCoverage', + 'coverage': [ + { + 'source': 'foo.dart', + 'script': { + 'type': '@Script', + 'fixedId': true, + 'id': 'libraries/1/scripts/foo.dart', + 'uri': 'foo.dart', + '_kind': 'library', + }, + 'hits': [], }, - 'hits': [], - }, - ]}); + ], + }); expect(fakeVmServiceHost.hasRemainingExpectations, false); }); @@ -159,7 +162,7 @@ void main() { jsonResponse: (VM.parse({}) ..isolates = [ IsolateRef.parse({ - 'id': '1' + 'id': '1', }), ] ).toJson(), @@ -214,19 +217,22 @@ void main() { }, ); - expect(result, {'type': 'CodeCoverage', 'coverage': [ - { - 'source': 'foo.dart', - 'script': { - 'type': '@Script', - 'fixedId': true, - 'id': 'libraries/1/scripts/foo.dart', - 'uri': 'foo.dart', - '_kind': 'library', + expect(result, { + 'type': 'CodeCoverage', + 'coverage': [ + { + 'source': 'foo.dart', + 'script': { + 'type': '@Script', + 'fixedId': true, + 'id': 'libraries/1/scripts/foo.dart', + 'uri': 'foo.dart', + '_kind': 'library', + }, + 'hits': [1, 1, 3, 1, 2, 0], }, - 'hits': [1, 1, 3, 1, 2, 0], - }, - ]}); + ], + }); expect(fakeVmServiceHost.hasRemainingExpectations, false); }); } diff --git a/packages/flutter_tools/test/general.shard/custom_devices/custom_device_test.dart b/packages/flutter_tools/test/general.shard/custom_devices/custom_device_test.dart index 53c32cba22f8f..34e550abb59b7 100644 --- a/packages/flutter_tools/test/general.shard/custom_devices/custom_device_test.dart +++ b/packages/flutter_tools/test/general.shard/custom_devices/custom_device_test.dart @@ -36,7 +36,7 @@ void _writeCustomDevicesConfigFile(Directory dir, List confi final File file = dir.childFile('.flutter_custom_devices.json'); file.writeAsStringSync(jsonEncode( { - 'custom-devices': configs.map((CustomDeviceConfig c) => c.toJson()).toList() + 'custom-devices': configs.map((CustomDeviceConfig c) => c.toJson()).toList(), } )); } @@ -56,11 +56,11 @@ void main() { ['scp', r'${localPath}', r'/tmp/${appName}', 'pi@raspberrypi'], { 'localPath': 'build/flutter_assets', - 'appName': 'hello_world' - } + 'appName': 'hello_world', + }, ), [ - 'scp', 'build/flutter_assets', '/tmp/hello_world', 'pi@raspberrypi' + 'scp', 'build/flutter_assets', '/tmp/hello_world', 'pi@raspberrypi', ] ); @@ -69,11 +69,11 @@ void main() { [r'${test1}', r' ${test2}', r'${test3}'], { 'test1': '_test1', - 'test2': '_test2' - } + 'test2': '_test2', + }, ), [ - '_test1', ' _test2', r'' + '_test1', ' _test2', r'', ] ); @@ -82,15 +82,15 @@ void main() { [r'${test1}', r' ${test2}', r'${test3}'], { 'test1': '_test1', - 'test2': '_test2' + 'test2': '_test2', }, additionalReplacementValues: { 'test2': '_nottest2', - 'test3': '_test3' + 'test3': '_test3', } ), [ - '_test1', ' _test2', r'_test3' + '_test1', ' _test2', r'_test3', ] ); }); @@ -108,7 +108,7 @@ void main() { runDebugCommand: const ['testrundebug'], forwardPortCommand: const ['testforwardport'], forwardPortSuccessRegex: RegExp('testforwardportsuccess'), - screenshotCommand: const ['testscreenshot'] + screenshotCommand: const ['testscreenshot'], ); const String testConfigPingSuccessOutput = 'testpingsuccess\n'; @@ -150,7 +150,7 @@ void main() { }, overrides: { FileSystem: () => MemoryFileSystem.test(), - ProcessManager: () => FakeProcessManager.any() + ProcessManager: () => FakeProcessManager.any(), } ); @@ -321,7 +321,7 @@ void main() { logger: BufferLogger.test(), processManager: FakeProcessManager.list([ FakeCommand(command: testConfig.uninstallCommand), - FakeCommand(command: testConfig.installCommand, onRun: () => bothCommandsWereExecuted = true) + FakeCommand(command: testConfig.installCommand, onRun: () => bothCommandsWereExecuted = true), ]) ); @@ -330,7 +330,7 @@ void main() { }, overrides: { FileSystem: () => MemoryFileSystem.test(), - ProcessManager: () => FakeProcessManager.any() + ProcessManager: () => FakeProcessManager.any(), } ); @@ -346,8 +346,8 @@ void main() { FakeCommand( command: testConfig.forwardPortCommand, stdout: testConfigForwardPortSuccessOutput, - completer: forwardPortCommandCompleter - ) + completer: forwardPortCommandCompleter, + ), ]) ); @@ -376,7 +376,7 @@ void main() { command: testConfig.forwardPortCommand, completer: forwardPortCompleter, stdout: testConfigForwardPortSuccessOutput, - ) + ), ]); final CustomDeviceAppSession appSession = CustomDeviceAppSession( @@ -461,8 +461,8 @@ void main() { FakeCommand( command: testConfig.forwardPortCommand, completer: forwardPortCompleter, - stdout: testConfigForwardPortSuccessOutput - ) + stdout: testConfigForwardPortSuccessOutput, + ), ] ); @@ -515,7 +515,7 @@ void main() { }, overrides: { FileSystem: () => MemoryFileSystem.test(), - ProcessManager: () => FakeProcessManager.any() + ProcessManager: () => FakeProcessManager.any(), } ); @@ -526,7 +526,7 @@ void main() { FakeCommand( command: testConfig.screenshotCommand, onRun: () => screenshotCommandWasExecuted = true, - ) + ), ]); final MemoryFileSystem fs = MemoryFileSystem.test(); @@ -552,7 +552,7 @@ void main() { FakeCommand( command: testConfig.screenshotCommand, onRun: () => screenshotCommandWasExecuted = true, - ) + ), ]); final MemoryFileSystem fs = MemoryFileSystem.test(); diff --git a/packages/flutter_tools/test/general.shard/custom_devices/custom_devices_config_test.dart b/packages/flutter_tools/test/general.shard/custom_devices/custom_devices_config_test.dart index 38eefe97c53d0..bc7fbc03c66b5 100644 --- a/packages/flutter_tools/test/general.shard/custom_devices/custom_devices_config_test.dart +++ b/packages/flutter_tools/test/general.shard/custom_devices/custom_devices_config_test.dart @@ -44,7 +44,7 @@ void main() { writeCustomDevicesConfigFile( directory, json: { - 'test': 'testvalue' + 'test': 'testvalue', } ); @@ -78,7 +78,7 @@ void main() { writeCustomDevicesConfigFile( directory, json: [ - testConfigJson + testConfigJson, ], ); @@ -105,7 +105,7 @@ void main() { copyJsonObjectWith( testConfigJson, { - 'id': null + 'id': null, }, ), ], @@ -114,7 +114,7 @@ void main() { final CustomDevicesConfig customDevicesConfig = CustomDevicesConfig.test( fileSystem: fileSystem, directory: directory, - logger: logger + logger: logger, ); const String msg = 'Could not load custom device from config index 0: Expected id to be a string.'; @@ -133,7 +133,7 @@ void main() { copyJsonObjectWith( testConfigJson, { - 'id': 1 + 'id': 1, }, ), ], @@ -142,7 +142,7 @@ void main() { final CustomDevicesConfig customDevicesConfig = CustomDevicesConfig.test( fileSystem: fileSystem, directory: directory, - logger: logger + logger: logger, ); const String msg = 'Could not load custom device from config index 0: Expected id to be a string.'; @@ -161,7 +161,7 @@ void main() { copyJsonObjectWith( testConfigJson, { - 'label': 1 + 'label': 1, }, ), ], @@ -170,7 +170,7 @@ void main() { final CustomDevicesConfig customDevicesConfig = CustomDevicesConfig.test( fileSystem: fileSystem, directory: directory, - logger: logger + logger: logger, ); const String msg = 'Could not load custom device from config index 0: Expected label to be a string.'; @@ -189,7 +189,7 @@ void main() { copyJsonObjectWith( testConfigJson, { - 'postBuild': null + 'postBuild': null, }, ), ], @@ -216,7 +216,7 @@ void main() { testConfigJson, { 'forwardPort': null, - 'forwardPortSuccessRegex': null + 'forwardPortSuccessRegex': null, }, ), ], @@ -245,7 +245,7 @@ void main() { copyJsonObjectWith( testConfigJson, { - 'forwardPortSuccessRegex': null + 'forwardPortSuccessRegex': null, }, ), ], diff --git a/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart b/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart index 2876f8cf4ce1c..9770183e3c1e9 100644 --- a/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart +++ b/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart @@ -55,7 +55,7 @@ void main() { '--verbosity=warning', 'get', '--no-precompile', - ]) + ]), ]); final BufferLogger logger = BufferLogger.test(); final MemoryFileSystem fileSystem = MemoryFileSystem.test(); @@ -102,7 +102,7 @@ void main() { '--verbosity=warning', 'get', '--no-precompile', - ]) + ]), ]); final BufferLogger logger = BufferLogger.test(); final MemoryFileSystem fileSystem = MemoryFileSystem.test(); @@ -149,7 +149,7 @@ void main() { '--verbosity=warning', 'get', '--no-precompile', - ]) + ]), ]); final BufferLogger logger = BufferLogger.test(); final MemoryFileSystem fileSystem = MemoryFileSystem.test(); @@ -259,7 +259,7 @@ void main() { '--verbosity=warning', 'get', '--no-precompile', - ]) + ]), ]); final BufferLogger logger = BufferLogger.test(); final MemoryFileSystem fileSystem = MemoryFileSystem.test(); @@ -297,7 +297,7 @@ void main() { '--verbosity=warning', 'get', '--no-precompile', - ]) + ]), ]); final BufferLogger logger = BufferLogger.test(); final MemoryFileSystem fileSystem = MemoryFileSystem.test(); @@ -336,7 +336,7 @@ void main() { '--no-precompile', ], onRun: () { fileSystem.file('.dart_tool/package_config.json').createSync(recursive: true); - }) + }), ]); final BufferLogger logger = BufferLogger.test(); @@ -406,7 +406,7 @@ void main() { '--verbosity=warning', 'get', '--no-precompile', - ]) + ]), ]); final BufferLogger logger = BufferLogger.test(); final MemoryFileSystem fileSystem = MemoryFileSystem.test(); @@ -444,7 +444,7 @@ void main() { '--verbosity=warning', 'get', '--no-precompile', - ]) + ]), ]); final BufferLogger logger = BufferLogger.test(); final MemoryFileSystem fileSystem = MemoryFileSystem.test(); diff --git a/packages/flutter_tools/test/general.shard/dart_plugin_test.dart b/packages/flutter_tools/test/general.shard/dart_plugin_test.dart index 0bd3de9fcc733..74c1de28bf921 100644 --- a/packages/flutter_tools/test/general.shard/dart_plugin_test.dart +++ b/packages/flutter_tools/test/general.shard/dart_plugin_test.dart @@ -669,7 +669,7 @@ void main() { platforms: macos: dartPluginClass: AwesomeMacOS -''' +''', }); final Directory libDir = flutterProject.directory.childDirectory('lib'); @@ -803,7 +803,7 @@ void main() { platforms: macos: invalid: -''' +''', }); final Directory libDir = flutterProject.directory.childDirectory('lib'); @@ -844,7 +844,7 @@ void main() { flutter: plugin: implements: url_launcher -''' +''', }); final Directory libDir = flutterProject.directory.childDirectory('lib'); @@ -944,7 +944,7 @@ void main() { platforms: macos: dartPluginClass: MacOSPlugin -''' +''', }); final Directory libDir = flutterProject.directory.childDirectory('lib'); diff --git a/packages/flutter_tools/test/general.shard/desktop_device_test.dart b/packages/flutter_tools/test/general.shard/desktop_device_test.dart index 764049493e107..bd19c1b8956af 100644 --- a/packages/flutter_tools/test/general.shard/desktop_device_test.dart +++ b/packages/flutter_tools/test/general.shard/desktop_device_test.dart @@ -162,7 +162,7 @@ void main() { 'FLUTTER_ENGINE_SWITCH_17': 'dart-flags=--null_assertions', 'FLUTTER_ENGINE_SWITCH_18': 'use-test-fonts=true', 'FLUTTER_ENGINE_SWITCH_19': 'verbose-logging=true', - 'FLUTTER_ENGINE_SWITCHES': '19' + 'FLUTTER_ENGINE_SWITCHES': '19', } ), ]); @@ -209,7 +209,7 @@ void main() { 'FLUTTER_ENGINE_SWITCH_2': 'trace-startup=true', 'FLUTTER_ENGINE_SWITCH_3': 'trace-allowlist=foo,bar', 'FLUTTER_ENGINE_SWITCH_4': 'cache-sksl=true', - 'FLUTTER_ENGINE_SWITCHES': '4' + 'FLUTTER_ENGINE_SWITCHES': '4', } ), ]); diff --git a/packages/flutter_tools/test/general.shard/devfs_test.dart b/packages/flutter_tools/test/general.shard/devfs_test.dart index 620dd7ee8004e..9d1d2401554d5 100644 --- a/packages/flutter_tools/test/general.shard/devfs_test.dart +++ b/packages/flutter_tools/test/general.shard/devfs_test.dart @@ -212,7 +212,7 @@ void main() { FakeRequest(Uri.parse('http://localhost'), method: HttpMethod.put, responseError: const OSError('Connection Reset by peer')), FakeRequest(Uri.parse('http://localhost'), method: HttpMethod.put, responseError: const OSError('Connection Reset by peer')), // This is the value of `[1, 2, 3, 4, 5]` run through `osUtils.gzipLevel1Stream`. - FakeRequest(Uri.parse('http://localhost'), method: HttpMethod.put, body: [for (List chunk in expectedEncoded) ...chunk]) + FakeRequest(Uri.parse('http://localhost'), method: HttpMethod.put, body: [for (List chunk in expectedEncoded) ...chunk]), ]), uploadRetryThrottle: Duration.zero, ); diff --git a/packages/flutter_tools/test/general.shard/device_test.dart b/packages/flutter_tools/test/general.shard/device_test.dart index 3b498cd09cc3c..a21e3410e0569 100644 --- a/packages/flutter_tools/test/general.shard/device_test.dart +++ b/packages/flutter_tools/test/general.shard/device_test.dart @@ -222,7 +222,7 @@ void main() { final List filtered = await deviceManager.findTargetDevices(FakeFlutterProject()); expect(filtered, [ - nonEphemeralOne + nonEphemeralOne, ]); }); @@ -242,7 +242,7 @@ void main() { final List filtered = await deviceManager.findTargetDevices(FakeFlutterProject()); expect(filtered, [ - nonEphemeralTwo + nonEphemeralTwo, ]); }); @@ -263,7 +263,7 @@ void main() { final List filtered = await deviceManager.findTargetDevices(FakeFlutterProject()); expect(filtered, [ - ephemeralOne + ephemeralOne, ]); }); @@ -283,7 +283,7 @@ void main() { final List filtered = await deviceManager.findTargetDevices(FakeFlutterProject()); expect(filtered, [ - ephemeralTwo + ephemeralTwo, ]); }); @@ -307,7 +307,7 @@ void main() { final List filtered = await deviceManager.findTargetDevices(FakeFlutterProject()); expect(filtered, [ - nonEphemeralOne + nonEphemeralOne, ]); }); @@ -450,7 +450,7 @@ void main() { final DeviceManager deviceManager = TestDeviceManager( [], deviceDiscoveryOverrides: [ - deviceDiscovery + deviceDiscovery, ], logger: BufferLogger.test(), terminal: Terminal.test(), @@ -476,7 +476,7 @@ void main() { final DeviceManager deviceManager = TestDeviceManager( [], deviceDiscoveryOverrides: [ - deviceDiscovery + deviceDiscovery, ], logger: BufferLogger.test(), terminal: Terminal.test(), diff --git a/packages/flutter_tools/test/general.shard/devtools_launcher_test.dart b/packages/flutter_tools/test/general.shard/devtools_launcher_test.dart index 4b835cc0aa6b2..dfdfc3e639011 100644 --- a/packages/flutter_tools/test/general.shard/devtools_launcher_test.dart +++ b/packages/flutter_tools/test/general.shard/devtools_launcher_test.dart @@ -86,7 +86,7 @@ void main() { 'devtools', '--no-launch-browser', '--vm-uri=localhost:8181/abcdefg', - '--profile-memory=foo' + '--profile-memory=foo', ], stdout: 'Serving DevTools at http://127.0.0.1:9100\n', ), @@ -118,7 +118,7 @@ void main() { '--vm-uri=http://127.0.0.1:1234/abcdefg', ], exception: ProcessException('pub', []), - ) + ), ]), ); diff --git a/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart b/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart index 16d453af7c4ba..a10344e5c46d8 100644 --- a/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart +++ b/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart @@ -141,7 +141,7 @@ void main() { exitCode: 23, environment: { 'FOO': 'BAR', - 'VM_SERVICE_URL': 'http://127.0.0.1:1234/' // dds forwarded URI + 'VM_SERVICE_URL': 'http://127.0.0.1:1234/', // dds forwarded URI }, ), ]); @@ -166,7 +166,7 @@ void main() { exitCode: 23, environment: { 'FOO': 'BAR', - 'VM_SERVICE_URL': 'http://127.0.0.1:1234/' // dds forwarded URI + 'VM_SERVICE_URL': 'http://127.0.0.1:1234/', // dds forwarded URI }, ), ]); @@ -196,7 +196,7 @@ void main() { exitCode: 23, environment: { 'FOO': 'BAR', - 'VM_SERVICE_URL': 'http://127.0.0.1:1234/' // dds forwarded URI + 'VM_SERVICE_URL': 'http://127.0.0.1:1234/', // dds forwarded URI }, ), ]); @@ -229,7 +229,7 @@ void main() { exitCode: 23, environment: { 'FOO': 'BAR', - 'VM_SERVICE_URL': 'http://127.0.0.1:1234/' // dds forwarded URI + 'VM_SERVICE_URL': 'http://127.0.0.1:1234/', // dds forwarded URI }, ), ]); @@ -259,7 +259,7 @@ void main() { command: ['dart', 'foo.test', '-rexpanded'], exitCode: 11, environment: { - 'VM_SERVICE_URL': 'http://127.0.0.1:63426/1UasC_ihpXY=/' + 'VM_SERVICE_URL': 'http://127.0.0.1:63426/1UasC_ihpXY=/', }, ), ]); @@ -311,13 +311,13 @@ void main() { const FakeVmServiceRequest( method: '_flutter.getSkSLs', args: { - 'viewId': 'a' + 'viewId': 'a', }, jsonResponse: { 'SkSLs': { 'A': 'B', - } - } + }, + }, ), ]); final FakeProcessManager processManager = FakeProcessManager.empty(); @@ -335,10 +335,10 @@ void main() { 'platform': 'android', 'name': 'test', 'engineRevision': 'abcdefghijklmnopqrstuvwxyz', - 'data': {'A': 'B'} + 'data': {'A': 'B'}, }); }, overrides: { - FlutterVersion: () => FakeFlutterVersion() + FlutterVersion: () => FakeFlutterVersion(), }); testWithoutContext('Can connect to existing application and stop it during cleanup', () async { @@ -349,8 +349,8 @@ void main() { method: 'ext.flutter.exit', args: { 'isolateId': '1', - } - ) + }, + ), ]); final FakeProcessManager processManager = FakeProcessManager.empty(); final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService); @@ -373,8 +373,8 @@ void main() { method: 'ext.flutter.exit', args: { 'isolateId': '1', - } - ) + }, + ), ]); final FakeProcessManager processManager = FakeProcessManager.empty(); final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService); @@ -397,8 +397,8 @@ void main() { method: 'ext.flutter.exit', args: { 'isolateId': '1', - } - ) + }, + ), ]); final FakeProcessManager processManager = FakeProcessManager.empty(); final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService); @@ -421,8 +421,8 @@ void main() { method: 'ext.flutter.exit', args: { 'isolateId': '1', - } - ) + }, + ), ]); final FakeProcessManager processManager = FakeProcessManager.empty(); final DriverService driverService = setUpDriverService(processManager: processManager, vmService: fakeVmServiceHost.vmService); diff --git a/packages/flutter_tools/test/general.shard/drive/web_driver_service_test.dart b/packages/flutter_tools/test/general.shard/drive/web_driver_service_test.dart index af6adb2359dbe..dad555c138214 100644 --- a/packages/flutter_tools/test/general.shard/drive/web_driver_service_test.dart +++ b/packages/flutter_tools/test/general.shard/drive/web_driver_service_test.dart @@ -45,15 +45,15 @@ void main() { '--no-default-browser-check', '--no-sandbox', '--no-first-run', - '--headless' + '--headless', ], 'perfLoggingPrefs': { 'traceCategories': 'devtools.timeline,' - 'v8,blink.console,benchmark,blink,' - 'blink.user_timing' - } - } + 'v8,blink.console,benchmark,blink,' + 'blink.user_timing', + }, + }, }; expect(getDesiredCapabilities(Browser.chrome, true), expected); @@ -85,10 +85,10 @@ void main() { 'perfLoggingPrefs': { 'traceCategories': 'devtools.timeline,' - 'v8,blink.console,benchmark,blink,' - 'blink.user_timing' - } - } + 'v8,blink.console,benchmark,blink,' + 'blink.user_timing', + }, + }, }; expect(getDesiredCapabilities(Browser.chrome, false, chromeBinary), expected); @@ -109,10 +109,10 @@ void main() { 'media.gmp-provider.enabled': false, 'network.captive-portal-service.enabled': false, 'security.insecure_field_warning.contextual.enabled': false, - 'test.currentTimeOffsetSeconds': 11491200 + 'test.currentTimeOffsetSeconds': 11491200, }, - 'log': {'level': 'trace'} - } + 'log': {'level': 'trace'}, + }, }; expect(getDesiredCapabilities(Browser.firefox, true), expected); @@ -132,10 +132,10 @@ void main() { 'media.gmp-provider.enabled': false, 'network.captive-portal-service.enabled': false, 'security.insecure_field_warning.contextual.enabled': false, - 'test.currentTimeOffsetSeconds': 11491200 + 'test.currentTimeOffsetSeconds': 11491200, }, - 'log': {'level': 'trace'} - } + 'log': {'level': 'trace'}, + }, }; expect(getDesiredCapabilities(Browser.firefox, false), expected); @@ -162,7 +162,7 @@ void main() { final Map expected = { 'platformName': 'ios', 'browserName': 'safari', - 'safari:useSimulator': true + 'safari:useSimulator': true, }; expect(getDesiredCapabilities(Browser.iosSafari, false), expected); @@ -174,7 +174,7 @@ void main() { 'platformName': 'android', 'goog:chromeOptions': { 'androidPackage': 'com.android.chrome', - 'args': ['--disable-fullscreen'] + 'args': ['--disable-fullscreen'], }, }; diff --git a/packages/flutter_tools/test/general.shard/emulator_test.dart b/packages/flutter_tools/test/general.shard/emulator_test.dart index d8ab35ef4bba3..2dd966e7392a5 100644 --- a/packages/flutter_tools/test/general.shard/emulator_test.dart +++ b/packages/flutter_tools/test/general.shard/emulator_test.dart @@ -170,7 +170,7 @@ void main() { '-d', 'pixel', ], - ) + ), ]), androidSdk: sdk, androidWorkflow: AndroidWorkflow( @@ -207,7 +207,7 @@ void main() { '-d', 'pixel', ], - ) + ), ]), androidSdk: sdk, androidWorkflow: AndroidWorkflow( @@ -245,8 +245,8 @@ void main() { ], exitCode: 1, stderr: "Error: Android Virtual Device 'existing-avd-1' already exists.\n" - 'Use --force if you want to replace it.' - ) + 'Use --force if you want to replace it.', + ), ]), androidSdk: sdk, androidWorkflow: AndroidWorkflow( @@ -288,7 +288,7 @@ void main() { '-d', 'pixel', ], - ) + ), ]), androidSdk: sdk, androidWorkflow: AndroidWorkflow( @@ -323,7 +323,7 @@ void main() { 'open', '-a', '/fake/Xcode.app/Contents/Developer/Applications/Simulator.app', - ]) + ]), ], ); diff --git a/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart index b2817aec32aba..b9cb05d25d576 100644 --- a/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart +++ b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart @@ -1066,11 +1066,11 @@ flutter: expect(flutterManifest.isPlugin, true); final Map validSupportedPlatforms = flutterManifest.validSupportedPlatforms!; - expect(validSupportedPlatforms['ios'], - {'pluginClass': 'SomeClass'}); - expect(validSupportedPlatforms['android'], - {'pluginClass': 'SomeClass', - 'package': 'com.example'}); + expect(validSupportedPlatforms['ios'], {'pluginClass': 'SomeClass'}); + expect(validSupportedPlatforms['android'], { + 'pluginClass': 'SomeClass', + 'package': 'com.example', + }); }); testWithoutContext('FlutterManifest validates a platform section that is a list ' diff --git a/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart b/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart index 57965ed2fa6f6..a2adeca2cda21 100644 --- a/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart +++ b/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart @@ -132,7 +132,7 @@ void main() { '--non-interactive', '--use-test-fonts', '--packages=.dart_tool/package_config.json', - 'example.dill' + 'example.dill', ], environment: { 'FLUTTER_TEST': expectedFlutterTestValue, 'FONTCONFIG_FILE': device.fontConfigManager.fontConfigFile.path, @@ -206,11 +206,11 @@ void main() { '--packages=.dart_tool/package_config.json', '--foo', '--bar', - 'example.dill' + 'example.dill', ], stdout: 'success', stderr: 'failure', - ) + ), ]); device = createDevice(dartEntrypointArgs: ['--foo', '--bar']); }); @@ -245,11 +245,11 @@ void main() { '--non-interactive', '--use-test-fonts', '--packages=.dart_tool/package_config.json', - 'example.dill' + 'example.dill', ], stdout: 'The Dart VM service is listening on http://localhost:1234', stderr: 'failure', - ) + ), ]); device = createDevice(enableObservatory: true); }); diff --git a/packages/flutter_tools/test/general.shard/flutter_validator_test.dart b/packages/flutter_tools/test/general.shard/flutter_validator_test.dart index fa8db110cc471..abb7e95c5c136 100644 --- a/packages/flutter_tools/test/general.shard/flutter_validator_test.dart +++ b/packages/flutter_tools/test/general.shard/flutter_validator_test.dart @@ -54,7 +54,7 @@ void main() { const FakeCommand( command: ['Artifact.genSnapshot'], exitCode: 1, - ) + ), ]) ); fileSystem.file(artifacts.getArtifactPath(Artifact.genSnapshot)).createSync(recursive: true); diff --git a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_start_test.dart b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_start_test.dart index a395ab2aa2b7e..f87718c4b5fbe 100644 --- a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_start_test.dart +++ b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_start_test.dart @@ -267,7 +267,7 @@ void main() { '--deterministic', '--snapshot_kind=app-aot-elf', '--elf=build/fuchsia/elf.aotsnapshot', - 'build/fuchsia/app_name.dil' + 'build/fuchsia/app_name.dil', ], ), FakeCommand( @@ -300,7 +300,7 @@ void main() { '--deterministic', '--snapshot_kind=app-aot-elf', '--elf=build/fuchsia/elf.aotsnapshot', - 'build/fuchsia/app_name.dil' + 'build/fuchsia/app_name.dil', ], ), FakeCommand( diff --git a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart index be5f9b5fdd350..8a4361d171c4a 100644 --- a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart +++ b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart @@ -657,7 +657,7 @@ void main() { jsonResponse: { 'views': [ for (FlutterView view in views) - view.toJson() + view.toJson(), ], }, ), diff --git a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_pm_test.dart b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_pm_test.dart index 26cba71d67655..834e023d50256 100644 --- a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_pm_test.dart +++ b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_pm_test.dart @@ -55,7 +55,7 @@ void main() { '-l', '[fe80::ec4:7aff:fecc:ea8f%eno2]:43819', '-c', - '2' + '2', ])); await FuchsiaPM().serve('', 'fe80::ec4:7aff:fecc:ea8f%eno2', 43819); diff --git a/packages/flutter_tools/test/general.shard/intellij/intellij_validator_test.dart b/packages/flutter_tools/test/general.shard/intellij/intellij_validator_test.dart index 3792c0474c31f..c8b91054186ba 100644 --- a/packages/flutter_tools/test/general.shard/intellij/intellij_validator_test.dart +++ b/packages/flutter_tools/test/general.shard/intellij/intellij_validator_test.dart @@ -22,7 +22,7 @@ final Platform macPlatform = FakePlatform( ); final Platform linuxPlatform = FakePlatform( environment: { - 'HOME': '/foo/bar' + 'HOME': '/foo/bar', }, ); final Platform windowsPlatform = FakePlatform( @@ -30,7 +30,7 @@ final Platform windowsPlatform = FakePlatform( environment: { 'USERPROFILE': r'C:\Users\foo', 'APPDATA': r'C:\Users\foo\AppData\Roaming', - 'LOCALAPPDATA': r'C:\Users\foo\AppData\Local' + 'LOCALAPPDATA': r'C:\Users\foo\AppData\Local', }, ); @@ -49,7 +49,7 @@ void main() { ValidationMessage.error('Flutter plugin version 0.1.3 - the recommended minimum version is 16.0.0'), ValidationMessage('Dart plugin version 162.2485'), ValidationMessage('For information about installing plugins, see\n' - 'https://flutter.dev/intellij-setup/#installing-the-plugins') + 'https://flutter.dev/intellij-setup/#installing-the-plugins'), ]); }); diff --git a/packages/flutter_tools/test/general.shard/ios/code_signing_test.dart b/packages/flutter_tools/test/general.shard/ios/code_signing_test.dart index ef23d3b6fb140..d22ee5ec214df 100644 --- a/packages/flutter_tools/test/general.shard/ios/code_signing_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/code_signing_test.dart @@ -174,7 +174,7 @@ void main() { stdin: IOSink(controller.sink), stdout: 'subject= /CN=iPhone Developer: Profile 1 (1111AAAA11)/OU=3333CCCC33/O=My Team/C=US', completer: completer, - ) + ), ]); // Verify that certificate value is passed into openssl command. @@ -228,7 +228,7 @@ void main() { stdin: IOSink(controller.sink), stdout: 'subject= /CN=iPhone Developer: Profile 1 (1111AAAA11)/OU=3333CCCC33/O=My Team/C=US', completer: completer, - ) + ), ]); // Verify that certificate value is passed into openssl command. @@ -279,7 +279,7 @@ void main() { stdin: IOSink(controller.sink), stdout: 'subject= /CN=iPhone Developer: Profile 1 (1111AAAA11)/OU=3333CCCC33/O=My Team/C=US', completer: completer, - ) + ), ]); // Verify that certificate value is passed into openssl command. @@ -328,7 +328,7 @@ void main() { stdin: IOSink(controller.sink), stdout: 'subject= /CN=iPhone Developer: Profile 3 (3333CCCC33)/OU=4444DDDD44/O=My Team/C=US', completer: completer, - ) + ), ]); // Verify that certificate value is passed into openssl command. @@ -385,7 +385,7 @@ void main() { stdin: IOSink(controller.sink), stdout: 'subject= /CN=iPhone Developer: Profile 3 (1111AAAA11)/OU=5555EEEE55/O=My Team/C=US', completer: completer, - ) + ), ]); // Verify that certificate value is passed into openssl command. @@ -437,7 +437,7 @@ void main() { stdin: IOSink(controller.sink), stdout: 'subject= /CN=iPhone Developer: Profile 3 (3333CCCC33)/OU=4444DDDD44/O=My Team/C=US', completer: completer, - ) + ), ]); // Verify that certificate value is passed into openssl command. @@ -494,7 +494,7 @@ void main() { stdin: IOSink(controller.sink), stdout: 'subject= /CN=iPhone Developer: Profile 3 (3333CCCC33)/OU=4444DDDD44/O=My Team/C=US', completer: completer, - ) + ), ]); // Verify that certificate value is passed into openssl command. diff --git a/packages/flutter_tools/test/general.shard/ios/devices_test.dart b/packages/flutter_tools/test/general.shard/ios/devices_test.dart index 9a892ef64d31c..c7964f13fe571 100644 --- a/packages/flutter_tools/test/general.shard/ios/devices_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/devices_test.dart @@ -436,7 +436,7 @@ void main() { expect(xcdevice.deviceEventController.hasListener, isTrue); xcdevice.deviceEventController.add({ - XCDeviceEvent.attach: 'd83d5bc53967baa0ee18626ba87b6254b2ab5418' + XCDeviceEvent.attach: 'd83d5bc53967baa0ee18626ba87b6254b2ab5418', }); await added.future; expect(iosDevices.deviceNotifier!.items.length, 2); @@ -444,7 +444,7 @@ void main() { expect(iosDevices.deviceNotifier!.items, contains(device2)); xcdevice.deviceEventController.add({ - XCDeviceEvent.detach: 'd83d5bc53967baa0ee18626ba87b6254b2ab5418' + XCDeviceEvent.detach: 'd83d5bc53967baa0ee18626ba87b6254b2ab5418', }); await removed.future; expect(iosDevices.deviceNotifier!.items, [device2]); @@ -452,7 +452,7 @@ void main() { // Remove stream will throw over-completion if called more than once // which proves this is ignored. xcdevice.deviceEventController.add({ - XCDeviceEvent.detach: 'bogus' + XCDeviceEvent.detach: 'bogus', }); expect(addedCount, 2); diff --git a/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart index b313e690f74c5..76dce321ccea7 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart @@ -114,7 +114,7 @@ void main () { 'Log on attach2', '', '', - 'Log after process stop' + 'Log after process stop', ])); expect(stdin.stream.transform(const Utf8Decoder()), emitsInOrder([ 'thread backtrace all', @@ -409,7 +409,7 @@ process continue '--uninstall_only', '--bundle_id', bundleId, - ]) + ]), ]); final IOSDeploy iosDeploy = setUpIOSDeploy(processManager, artifacts: artifacts); final int exitCode = await iosDeploy.uninstallApp( @@ -432,7 +432,7 @@ process continue '--uninstall_only', '--bundle_id', bundleId, - ], exitCode: 1) + ], exitCode: 1), ]); final IOSDeploy iosDeploy = setUpIOSDeploy(processManager, artifacts: artifacts); final int exitCode = await iosDeploy.uninstallApp( @@ -452,7 +452,7 @@ IOSDeploy setUpIOSDeploy(ProcessManager processManager, { final FakePlatform macPlatform = FakePlatform( operatingSystem: 'macos', environment: { - 'PATH': '/usr/local/bin:/usr/bin' + 'PATH': '/usr/local/bin:/usr/bin', } ); final Cache cache = Cache.test( diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart index 846ccde0a2c62..4a69d1763afe5 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart @@ -47,17 +47,20 @@ void main() { applicationPackage: bundleDirectory, ); final FakeProcessManager processManager = FakeProcessManager.list([ - FakeCommand(command: [ - iosDeployPath, - '--id', - '1234', - '--bundle', - '/', - '--no-wifi', - ], environment: const { - 'PATH': '/usr/bin:null', - ...kDyLdLibEntry, - }) + FakeCommand( + command: [ + iosDeployPath, + '--id', + '1234', + '--bundle', + '/', + '--no-wifi', + ], + environment: const { + 'PATH': '/usr/bin:null', + ...kDyLdLibEntry, + }, + ), ]); final IOSDevice device = setUpIOSDevice( processManager: processManager, @@ -78,16 +81,19 @@ void main() { applicationPackage: bundleDirectory, ); final FakeProcessManager processManager = FakeProcessManager.list([ - FakeCommand(command: [ - iosDeployPath, - '--id', - '1234', - '--bundle', - '/', - ], environment: const { - 'PATH': '/usr/bin:null', - ...kDyLdLibEntry, - }) + FakeCommand( + command: [ + iosDeployPath, + '--id', + '1234', + '--bundle', + '/', + ], + environment: const { + 'PATH': '/usr/bin:null', + ...kDyLdLibEntry, + }, + ), ]); final IOSDevice device = setUpIOSDevice( processManager: processManager, @@ -108,17 +114,20 @@ void main() { applicationPackage: bundleDirectory, ); final FakeProcessManager processManager = FakeProcessManager.list([ - FakeCommand(command: [ - iosDeployPath, - '--id', - '1234', - '--uninstall_only', - '--bundle_id', - 'app', - ], environment: const { - 'PATH': '/usr/bin:null', - ...kDyLdLibEntry, - }) + FakeCommand( + command: [ + iosDeployPath, + '--id', + '1234', + '--uninstall_only', + '--bundle_id', + 'app', + ], + environment: const { + 'PATH': '/usr/bin:null', + ...kDyLdLibEntry, + }, + ), ]); final IOSDevice device = setUpIOSDevice(processManager: processManager, artifacts: artifacts); final bool wasUninstalled = await device.uninstallApp(iosApp); @@ -163,19 +172,22 @@ void main() { applicationPackage: bundleDirectory, ); final FakeProcessManager processManager = FakeProcessManager.list([ - FakeCommand(command: [ - iosDeployPath, - '--id', - '1234', - '--exists', - '--timeout', - '10', - '--bundle_id', - 'app', - ], environment: const { - 'PATH': '/usr/bin:null', - ...kDyLdLibEntry, - }) + FakeCommand( + command: [ + iosDeployPath, + '--id', + '1234', + '--exists', + '--timeout', + '10', + '--bundle_id', + 'app', + ], + environment: const { + 'PATH': '/usr/bin:null', + ...kDyLdLibEntry, + }, + ), ]); final IOSDevice device = setUpIOSDevice(processManager: processManager, artifacts: artifacts); final bool isAppInstalled = await device.isAppInstalled(iosApp); @@ -191,19 +203,23 @@ void main() { applicationPackage: bundleDirectory, ); final FakeProcessManager processManager = FakeProcessManager.list([ - FakeCommand(command: [ - iosDeployPath, - '--id', - '1234', - '--exists', - '--timeout', - '10', - '--bundle_id', - 'app', - ], environment: const { - 'PATH': '/usr/bin:null', - ...kDyLdLibEntry, - }, exitCode: 255) + FakeCommand( + command: [ + iosDeployPath, + '--id', + '1234', + '--exists', + '--timeout', + '10', + '--bundle_id', + 'app', + ], + environment: const { + 'PATH': '/usr/bin:null', + ...kDyLdLibEntry, + }, + exitCode: 255, + ), ]); final BufferLogger logger = BufferLogger.test(); final IOSDevice device = setUpIOSDevice(processManager: processManager, logger: logger, artifacts: artifacts); @@ -222,20 +238,24 @@ void main() { ); const String stderr = '2020-03-26 17:48:43.484 ios-deploy[21518:5501783] [ !! ] Timed out waiting for device'; final FakeProcessManager processManager = FakeProcessManager.list([ - FakeCommand(command: [ - iosDeployPath, - '--id', - '1234', - '--exists', - '--timeout', - '10', - '--bundle_id', - 'app', - ], environment: const { - 'PATH': '/usr/bin:null', - ...kDyLdLibEntry, - }, stderr: stderr, - exitCode: 253) + FakeCommand( + command: [ + iosDeployPath, + '--id', + '1234', + '--exists', + '--timeout', + '10', + '--bundle_id', + 'app', + ], + environment: const { + 'PATH': '/usr/bin:null', + ...kDyLdLibEntry, + }, + stderr: stderr, + exitCode: 253, + ), ]); final BufferLogger logger = BufferLogger.test(); final IOSDevice device = setUpIOSDevice(processManager: processManager, logger: logger, artifacts: artifacts); diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart index 61601e93c8379..1ea8d69eee622 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart @@ -231,7 +231,7 @@ Runner(libsystem_asl.dylib)[297] : libMobileGestalt iosDeployDebugger.debuggerAttached = true; final Stream debuggingLogs = Stream.fromIterable([ - 'Message from debugger' + 'Message from debugger', ]); iosDeployDebugger.logLines = debuggingLogs; logReader.debuggerStream = iosDeployDebugger; diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart index 0acb7ec80ce79..24ec5fbaf1e2c 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart @@ -209,7 +209,7 @@ void main() { const [ '--enable-dart-profiling', '--disable-service-auth-codes', - ].join(' ') + ].join(' '), ]) ); @@ -265,7 +265,7 @@ void main() { const [ '--enable-dart-profiling', '--disable-service-auth-codes', - ].join(' ') + ].join(' '), ]) ); diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart index 0bac487f5abcc..896721306d42b 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart @@ -58,7 +58,7 @@ const FakeCommand kLaunchDebugCommand = FakeCommand(command: [ '--no-wifi', '--justlaunch', '--args', - '--enable-dart-profiling --disable-service-auth-codes --enable-checked-mode --verify-entry-points' + '--enable-dart-profiling --disable-service-auth-codes --enable-checked-mode --verify-entry-points', ], environment: { 'PATH': '/usr/bin:null', 'DYLD_LIBRARY_PATH': '/path/to/libraries', @@ -299,12 +299,13 @@ void main() { '--purge-persistent-cache', '--enable-impeller', ].join(' '), - ], environment: const { - 'PATH': '/usr/bin:null', - 'DYLD_LIBRARY_PATH': '/path/to/libraries', - }, + ], + environment: const { + 'PATH': '/usr/bin:null', + 'DYLD_LIBRARY_PATH': '/path/to/libraries', + }, stdout: '(lldb) run\nsuccess', - ) + ), ]); final IOSDevice device = setUpIOSDevice( sdkVersion: '13.3', diff --git a/packages/flutter_tools/test/general.shard/ios/mac_test.dart b/packages/flutter_tools/test/general.shard/ios/mac_test.dart index 44845eae805f8..bcc4713ee85f3 100644 --- a/packages/flutter_tools/test/general.shard/ios/mac_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/mac_test.dart @@ -388,7 +388,7 @@ Could not build the precompiled application for the device.''', '-d', 'com.apple.FinderInfo', projectDirectory.path, - ]) + ]), ]); await removeFinderExtendedAttributes(projectDirectory, ProcessUtils(processManager: processManager, logger: logger), logger); @@ -397,14 +397,16 @@ Could not build the precompiled application for the device.''', testWithoutContext('ignores errors', () async { final FakeProcessManager processManager = FakeProcessManager.list([ - FakeCommand(command: [ - 'xattr', - '-r', - '-d', - 'com.apple.FinderInfo', - projectDirectory.path, - ], exitCode: 1, - ) + FakeCommand( + command: [ + 'xattr', + '-r', + '-d', + 'com.apple.FinderInfo', + projectDirectory.path, + ], + exitCode: 1, + ), ]); await removeFinderExtendedAttributes(projectDirectory, ProcessUtils(processManager: processManager, logger: logger), logger); diff --git a/packages/flutter_tools/test/general.shard/ios/simulators_test.dart b/packages/flutter_tools/test/general.shard/ios/simulators_test.dart index 5f389bc9c63a3..f943ce552973c 100644 --- a/packages/flutter_tools/test/general.shard/ios/simulators_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/simulators_test.dart @@ -29,7 +29,7 @@ import '../../src/fakes.dart'; final Platform macosPlatform = FakePlatform( operatingSystem: 'macos', environment: { - 'HOME': '/' + 'HOME': '/', }, ); @@ -604,7 +604,7 @@ Dec 20 17:04:32 md32-11-vm1 Another App[88374]: Ignore this text''' 'Multi line message again', ' and it goes...', ' and goes...', - 'Single line message, not the part of the above' + 'Single line message, not the part of the above', ]); expect(fakeProcessManager.hasRemainingExpectations, isFalse); }, overrides: { @@ -670,7 +670,7 @@ Dec 20 17:04:32 md32-11-vm1 Another App[88374]: Ignore this text''' final List lines = await logReader.logLines.toList(); expect(lines, [ 'Single line message', 'Multi line message\n continues...\n continues...', - 'Single line message, not the part of the above' + 'Single line message, not the part of the above', ]); expect(fakeProcessManager.hasRemainingExpectations, isFalse); }, overrides: { diff --git a/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart b/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart index 0eacb84f692d2..52046d48d8795 100644 --- a/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart @@ -364,7 +364,7 @@ void main() { testUsingContext('xcodebuild build settings contains Flutter Xcode environment variables', () async { platform.environment = const { 'FLUTTER_XCODE_CODE_SIGN_STYLE': 'Manual', - 'FLUTTER_XCODE_ARCHS': 'arm64' + 'FLUTTER_XCODE_ARCHS': 'arm64', }; fakeProcessManager.addCommands([ kWhichSysctlCommand, @@ -382,7 +382,7 @@ void main() { '-showBuildSettings', 'BUILD_DIR=${fileSystem.path.absolute('build', 'ios')}', 'CODE_SIGN_STYLE=Manual', - 'ARCHS=arm64' + 'ARCHS=arm64', ], ), ]); @@ -398,7 +398,7 @@ void main() { testWithoutContext('xcodebuild clean contains Flutter Xcode environment variables', () async { platform.environment = const { 'FLUTTER_XCODE_CODE_SIGN_STYLE': 'Manual', - 'FLUTTER_XCODE_ARCHS': 'arm64' + 'FLUTTER_XCODE_ARCHS': 'arm64', }; fakeProcessManager.addCommands(const [ @@ -415,7 +415,7 @@ void main() { '-quiet', 'clean', 'CODE_SIGN_STYLE=Manual', - 'ARCHS=arm64' + 'ARCHS=arm64', ], ), ]); @@ -669,7 +669,7 @@ Information about project "Runner": 'Ignored': 'Bogus', 'FLUTTER_NOT_XCODE': 'Bogus', 'FLUTTER_XCODE_CODE_SIGN_STYLE': 'Manual', - 'FLUTTER_XCODE_ARCHS': 'arm64' + 'FLUTTER_XCODE_ARCHS': 'arm64', }; final List environmentVariablesAsBuildSettings = environmentVariablesAsXcodeBuildSettings(platform); expect(environmentVariablesAsBuildSettings, ['CODE_SIGN_STYLE=Manual', 'ARCHS=arm64']); diff --git a/packages/flutter_tools/test/general.shard/license_collector_test.dart b/packages/flutter_tools/test/general.shard/license_collector_test.dart index 8ba90228ecd2f..5bc1a3419e59e 100644 --- a/packages/flutter_tools/test/general.shard/license_collector_test.dart +++ b/packages/flutter_tools/test/general.shard/license_collector_test.dart @@ -271,19 +271,19 @@ void main() { 'name': 'foo', 'rootUri': 'file:///foo/', 'packageUri': 'lib/', - 'languageVersion': '2.2' + 'languageVersion': '2.2', }, { 'name': 'bar', 'rootUri': 'file:///bar/', 'packageUri': 'lib/', - 'languageVersion': '2.2' + 'languageVersion': '2.2', }, { 'name': 'fizz', 'rootUri': 'file:///fizz/', 'packageUri': 'lib/', - 'languageVersion': '2.2' + 'languageVersion': '2.2', }, ], } @@ -306,7 +306,7 @@ void main() { expect(filePaths, unorderedEquals([ '/foo/NOTICES', '/bar/NOTICES', - '/fizz/LICENSE' + '/fizz/LICENSE', ])); }); @@ -329,13 +329,13 @@ void main() { 'name': 'foo', 'rootUri': 'file:///foo/', 'packageUri': 'lib/', - 'languageVersion': '2.2' + 'languageVersion': '2.2', }, { 'name': 'bar', 'rootUri': 'file:///bar/', 'packageUri': 'lib/', - 'languageVersion': '2.2' + 'languageVersion': '2.2', }, ], } @@ -376,7 +376,7 @@ void main() { 'name': 'foo', 'rootUri': 'file:///foo/', 'packageUri': 'lib/', - 'languageVersion': '2.2' + 'languageVersion': '2.2', }, ], } @@ -391,7 +391,7 @@ void main() { expect(licenseResult.dependencies, isEmpty); expect(licenseResult.errorMessages, [ 'package foo specified an additional license at /foo.txt, but this file does not exist.', - 'package foo specified an additional license at /foo_2.txt, but this file does not exist.' + 'package foo specified an additional license at /foo_2.txt, but this file does not exist.', ]); }); @@ -412,7 +412,7 @@ void main() { 'name': 'foo', 'rootUri': 'file:///foo/', 'packageUri': 'lib/', - 'languageVersion': '2.2' + 'languageVersion': '2.2', }, ], } diff --git a/packages/flutter_tools/test/general.shard/macos/macos_device_test.dart b/packages/flutter_tools/test/general.shard/macos/macos_device_test.dart index fba1bc5fda40d..abc5ee704f7af 100644 --- a/packages/flutter_tools/test/general.shard/macos/macos_device_test.dart +++ b/packages/flutter_tools/test/general.shard/macos/macos_device_test.dart @@ -61,7 +61,7 @@ void main() { stdout: 'Hello World\n', stderr: 'Goodnight, Moon\n', completer: completer, - ) + ), ]), logger: BufferLogger.test(), operatingSystemUtils: FakeOperatingSystemUtils(), diff --git a/packages/flutter_tools/test/general.shard/plugins_test.dart b/packages/flutter_tools/test/general.shard/plugins_test.dart index 9eeadf7dea580..521795cbc2d22 100644 --- a/packages/flutter_tools/test/general.shard/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/plugins_test.dart @@ -476,7 +476,7 @@ dependencies: 'plugin_d', 'plugin_a', '/local_plugins/plugin_c', - '/local_plugins/plugin_b' + '/local_plugins/plugin_b', ]); iosProject.testExists = true; @@ -530,7 +530,7 @@ dependencies: 'native_build': true, 'dependencies': [ 'plugin-b', - 'plugin-c' + 'plugin-c', ], }, { @@ -538,7 +538,7 @@ dependencies: 'path': '${pluginB.path}/', 'native_build': true, 'dependencies': [ - 'plugin-c' + 'plugin-c', ], }, { @@ -560,18 +560,18 @@ dependencies: 'name': 'plugin-a', 'dependencies': [ 'plugin-b', - 'plugin-c' - ] + 'plugin-c', + ], }, { 'name': 'plugin-b', 'dependencies': [ - 'plugin-c' - ] + 'plugin-c', + ], }, { 'name': 'plugin-c', - 'dependencies': [] + 'dependencies': [], }, ]; @@ -592,7 +592,7 @@ dependencies: FileSystem: () => fs, ProcessManager: () => FakeProcessManager.any(), SystemClock: () => systemClock, - FlutterVersion: () => flutterVersion + FlutterVersion: () => flutterVersion, }); testUsingContext( @@ -637,7 +637,7 @@ dependencies: FileSystem: () => fs, ProcessManager: () => FakeProcessManager.any(), SystemClock: () => systemClock, - FlutterVersion: () => flutterVersion + FlutterVersion: () => flutterVersion, }); testUsingContext('Changes to the plugin list invalidates the Cocoapod lockfiles', () async { @@ -654,7 +654,7 @@ dependencies: FileSystem: () => fs, ProcessManager: () => FakeProcessManager.any(), SystemClock: () => systemClock, - FlutterVersion: () => flutterVersion + FlutterVersion: () => flutterVersion, }); testUsingContext('No changes to the plugin list does not invalidate the Cocoapod lockfiles', () async { @@ -677,7 +677,7 @@ dependencies: FileSystem: () => fs, ProcessManager: () => FakeProcessManager.any(), SystemClock: () => systemClock, - FlutterVersion: () => flutterVersion + FlutterVersion: () => flutterVersion, }); }); @@ -1291,7 +1291,7 @@ flutter: 'plugin_d', 'plugin_a', '/local_plugins/plugin_c', - '/local_plugins/plugin_b' + '/local_plugins/plugin_b', ]); await injectPlugins(flutterProject, linuxPlatform: true); @@ -1376,7 +1376,7 @@ flutter: 'plugin_d', 'plugin_a', '/local_plugins/plugin_c', - '/local_plugins/plugin_b' + '/local_plugins/plugin_b', ]); await injectPlugins(flutterProject, windowsPlatform: true); @@ -1583,21 +1583,21 @@ flutter: '''; _createPubspecFile(pluginYaml); validatePubspecForPlugin(projectDir: projectDir.absolute.path, pluginClass: 'SomePlugin', expectedPlatforms: [ - 'ios', 'macos', 'windows', 'linux', 'android', 'web' + 'ios', 'macos', 'windows', 'linux', 'android', 'web', ], androidIdentifier: 'AndroidPackage', webFileName: 'lib/SomeFile.dart'); }); testUsingContext('createPlatformsYamlMap should create the correct map', () async { final YamlMap map = Plugin.createPlatformsYamlMap(['ios', 'android', 'linux'], 'PluginClass', 'some.android.package'); expect(map['ios'], { - 'pluginClass' : 'PluginClass' + 'pluginClass' : 'PluginClass', }); expect(map['android'], { 'pluginClass' : 'PluginClass', 'package': 'some.android.package', }); expect(map['linux'], { - 'pluginClass' : 'PluginClass' + 'pluginClass' : 'PluginClass', }); }); diff --git a/packages/flutter_tools/test/general.shard/preview_device_test.dart b/packages/flutter_tools/test/general.shard/preview_device_test.dart index ff6e9f34736f7..440d6e29856b7 100644 --- a/packages/flutter_tools/test/general.shard/preview_device_test.dart +++ b/packages/flutter_tools/test/general.shard/preview_device_test.dart @@ -59,11 +59,11 @@ void main() { processManager: FakeProcessManager.list([ FakeCommand( command: const [ - '/.tmp_rand0/flutter_preview.rand0/splash' + '/.tmp_rand0/flutter_preview.rand0/splash', ], stdout: 'The Dart VM service is listening on http://127.0.0.1:64494/fZ_B2N6JRwY=/\n', completer: completer, - ) + ), ]), logger: logger, platform: FakePlatform(), diff --git a/packages/flutter_tools/test/general.shard/project_test.dart b/packages/flutter_tools/test/general.shard/project_test.dart index 12dbd9a298703..66478c729a592 100644 --- a/packages/flutter_tools/test/general.shard/project_test.dart +++ b/packages/flutter_tools/test/general.shard/project_test.dart @@ -571,14 +571,14 @@ apply plugin: 'kotlin-android' }, overrides: { FileSystem: () => fs, ProcessManager: () => FakeProcessManager.any(), - XcodeProjectInterpreter: () => mockXcodeProjectInterpreter + XcodeProjectInterpreter: () => mockXcodeProjectInterpreter, }); testUsingContext('app product name xcodebuild settings', () async { final FlutterProject project = await someProject(); project.ios.xcodeProject.createSync(); mockXcodeProjectInterpreter.buildSettings = { - 'FULL_PRODUCT_NAME': 'My App.app' + 'FULL_PRODUCT_NAME': 'My App.app', }; mockXcodeProjectInterpreter.xcodeProjectInfo = XcodeProjectInfo([], [], ['Runner'], logger); @@ -586,7 +586,7 @@ apply plugin: 'kotlin-android' }, overrides: { FileSystem: () => fs, ProcessManager: () => FakeProcessManager.any(), - XcodeProjectInterpreter: () => mockXcodeProjectInterpreter + XcodeProjectInterpreter: () => mockXcodeProjectInterpreter, }); }); @@ -888,7 +888,7 @@ void _testInMemory(String description, Future Function() testMethod) { 'name': 'flutter_template_images', 'rootUri': dummyTemplateImagesDirectory.uri.toString(), 'packageUri': 'lib/', - 'languageVersion': '2.6' + 'languageVersion': '2.6', }, ], })); diff --git a/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart b/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart index 9e11593f00cca..95c90749117b6 100644 --- a/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart @@ -70,7 +70,7 @@ final FakeVmServiceRequest listViews = FakeVmServiceRequest( FlutterView( id: 'a', uiIsolate: isolate, - ).toJson() + ).toJson(), ], }, ); diff --git a/packages/flutter_tools/test/general.shard/resident_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_runner_test.dart index 3204ff58b458f..092476d222406 100644 --- a/packages/flutter_tools/test/general.shard/resident_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_runner_test.dart @@ -587,7 +587,7 @@ void main() { args: { 'isolateId': '1', 'pause': false, - 'rootLibUri': 'main.dart.incremental.dill' + 'rootLibUri': 'main.dart.incremental.dill', }, jsonResponse: { 'type': 'ReloadReport', @@ -647,15 +647,15 @@ void main() { args: { 'isolateId': '1', 'pause': false, - 'rootLibUri': 'main.dart.incremental.dill' + 'rootLibUri': 'main.dart.incremental.dill', }, jsonResponse: { 'type': 'ReloadReport', 'success': false, 'notices': [ { - 'message': 'Failed to hot reload' - } + 'message': 'Failed to hot reload', + }, ], 'details': {}, }, @@ -711,7 +711,7 @@ void main() { args: { 'isolateId': '1', 'pause': false, - 'rootLibUri': 'main.dart.incremental.dill' + 'rootLibUri': 'main.dart.incremental.dill', }, jsonResponse: { 'type': 'ReloadReport', @@ -883,7 +883,7 @@ void main() { timestamp: 0, kind: vm_service.EventKind.kIsolateRunnable, ) - ) + ), ]); final Completer futureConnectionInfo = Completer.sync(); final Completer futureAppStart = Completer.sync(); @@ -962,8 +962,8 @@ void main() { event: vm_service.Event( timestamp: 0, kind: vm_service.EventKind.kIsolateRunnable, - ) - ) + ), + ), ]); final Completer futureConnectionInfo = Completer.sync(); final Completer futureAppStart = Completer.sync(); @@ -1084,7 +1084,7 @@ void main() { timestamp: 0, kind: vm_service.EventKind.kIsolateRunnable, ), - ) + ), ]); final Completer futureConnectionInfo = Completer.sync(); final Completer futureAppStart = Completer.sync(); @@ -1404,7 +1404,7 @@ flutter: commandHelp.hWithDetails, commandHelp.c, commandHelp.q, - '' + '', ].join('\n') )); })); @@ -1437,7 +1437,7 @@ flutter: commandHelp.hWithoutDetails, commandHelp.c, commandHelp.q, - '' + '', ].join('\n') )); })); @@ -1451,7 +1451,7 @@ flutter: 'viewId': fakeFlutterView.id, }, jsonResponse: { - 'SkSLs': {} + 'SkSLs': {}, } ), ]); @@ -1472,9 +1472,9 @@ flutter: jsonResponse: { 'SkSLs': { 'A': 'B', - } - } - ) + }, + }, + ), ]); await residentRunner.writeSkSL(); @@ -1484,7 +1484,7 @@ flutter: 'platform': 'android', 'name': 'FakeDevice', 'engineRevision': 'abcdefg', - 'data': {'A': 'B'} + 'data': {'A': 'B'}, }); expect(fakeVmServiceHost.hasRemainingExpectations, false); }, overrides: { @@ -1492,7 +1492,7 @@ flutter: fileSystem: globals.fs, platform: globals.platform, ), - FlutterVersion: () => FakeFlutterVersion(engineRevision: 'abcdefg') + FlutterVersion: () => FakeFlutterVersion(engineRevision: 'abcdefg'), })); testUsingContext('ResidentRunner ignores DevtoolsLauncher when attaching with enableDevTools: false - cold mode', () => testbed.run(() async { @@ -1868,7 +1868,7 @@ flutter: Artifacts: () => Artifacts.test(), FileSystem: () => MemoryFileSystem.test(), ProcessManager: () => FakeProcessManager.any(), - FeatureFlags: () => TestFeatureFlags(isSingleWidgetReloadEnabled: true) + FeatureFlags: () => TestFeatureFlags(isSingleWidgetReloadEnabled: true), }); testUsingContext('FlutterDevice passes alternative-invalidation-strategy flag', () async { diff --git a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart index 87a9fd14a2897..0bf8dcdebbf92 100644 --- a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart @@ -55,14 +55,14 @@ const List kAttachLogExpectations = args: { 'streamId': 'Stderr', }, - ) + ), ]; const List kAttachIsolateExpectations = [ FakeVmServiceRequest( method: 'streamListen', args: { - 'streamId': 'Isolate' + 'streamId': 'Isolate', } ), FakeVmServiceRequest( @@ -732,8 +732,8 @@ void main() { method: 'hotRestart', jsonResponse: { 'type': 'Failed', - } - ) + }, + ), ]); _setupMocks(); final Completer connectionInfoCompleter = Completer(); diff --git a/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart b/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart index c3dcd006bdeb3..7522d37fbb255 100644 --- a/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart @@ -415,7 +415,7 @@ void main() { subForSigTerm: signalUnderTest, exitSignals: [signalUnderTest], ), - Usage: () => usage + Usage: () => usage, }); }); diff --git a/packages/flutter_tools/test/general.shard/runner/runner_test.dart b/packages/flutter_tools/test/general.shard/runner/runner_test.dart index 12177b2a17755..cef421e083192 100644 --- a/packages/flutter_tools/test/general.shard/runner/runner_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/runner_test.dart @@ -98,7 +98,7 @@ void main() { ProcessManager: () => FakeProcessManager.any(), Usage: () => CrashingUsage(), Artifacts: () => Artifacts.test(), - HttpClientFactory: () => () => FakeHttpClient.any() + HttpClientFactory: () => () => FakeHttpClient.any(), }); // This Completer completes when CrashingFlutterCommand.runCommand @@ -141,7 +141,7 @@ void main() { ProcessManager: () => FakeProcessManager.any(), CrashReporter: () => WaitingCrashReporter(commandCompleter.future), Artifacts: () => Artifacts.test(), - HttpClientFactory: () => () => FakeHttpClient.any() + HttpClientFactory: () => () => FakeHttpClient.any(), }); testUsingContext('create local report', () async { @@ -211,7 +211,7 @@ void main() { UserMessages: () => CustomBugInstructions(), Artifacts: () => Artifacts.test(), CrashReporter: () => WaitingCrashReporter(Future.value()), - HttpClientFactory: () => () => FakeHttpClient.any() + HttpClientFactory: () => () => FakeHttpClient.any(), }); }); } diff --git a/packages/flutter_tools/test/general.shard/terminal_handler_test.dart b/packages/flutter_tools/test/general.shard/terminal_handler_test.dart index bc86f07a01e5d..b821ec8ab43f0 100644 --- a/packages/flutter_tools/test/general.shard/terminal_handler_test.dart +++ b/packages/flutter_tools/test/general.shard/terminal_handler_test.dart @@ -148,17 +148,17 @@ void main() { 'isolateId': '1', }, jsonResponse: { - 'enabled': 'false' + 'enabled': 'false', }, ), const FakeVmServiceRequest( method: 'ext.flutter.profileWidgetBuilds', args: { 'isolateId': '1', - 'enabled': 'true' + 'enabled': 'true', }, jsonResponse: { - 'enabled': 'true' + 'enabled': 'true', }, ), ]); @@ -175,17 +175,17 @@ void main() { 'isolateId': '1', }, jsonResponse: { - 'enabled': 'false' + 'enabled': 'false', }, ), const FakeVmServiceRequest( method: 'ext.flutter.profileWidgetBuilds', args: { 'isolateId': '1', - 'enabled': 'true' + 'enabled': 'true', }, jsonResponse: { - 'enabled': 'true' + 'enabled': 'true', }, ), ], web: true); @@ -420,7 +420,7 @@ void main() { 'isolateId': '1', }, jsonResponse: { - 'value': 'iOS' + 'value': 'iOS', }, ), listViews, @@ -431,7 +431,7 @@ void main() { 'value': 'fuchsia', }, jsonResponse: { - 'value': 'fuchsia' + 'value': 'fuchsia', }, ), // Request 2. @@ -442,7 +442,7 @@ void main() { 'isolateId': '1', }, jsonResponse: { - 'value': 'android' + 'value': 'android', }, ), listViews, @@ -453,7 +453,7 @@ void main() { 'value': 'iOS', }, jsonResponse: { - 'value': 'iOS' + 'value': 'iOS', }, ), ]); @@ -474,7 +474,7 @@ void main() { 'isolateId': '1', }, jsonResponse: { - 'value': 'iOS' + 'value': 'iOS', }, ), listViews, @@ -485,7 +485,7 @@ void main() { 'value': 'fuchsia', }, jsonResponse: { - 'value': 'fuchsia' + 'value': 'fuchsia', }, ), // Request 2. @@ -496,7 +496,7 @@ void main() { 'isolateId': '1', }, jsonResponse: { - 'value': 'android' + 'value': 'android', }, ), listViews, @@ -507,7 +507,7 @@ void main() { 'value': 'iOS', }, jsonResponse: { - 'value': 'iOS' + 'value': 'iOS', }, ), ], web: true); @@ -971,7 +971,7 @@ void main() { 'isolateId': fakeUnpausedIsolate.id, 'enabled': 'true', }, - ) + ), ], logger: logger, supportsScreenshot: true); await terminalHandler.processTerminalInput('s'); @@ -1004,7 +1004,7 @@ void main() { 'isolateId': fakeUnpausedIsolate.id, 'enabled': 'true', }, - ) + ), ], logger: logger, fileSystem: fileSystem); await terminalHandler.processTerminalInput('s'); @@ -1038,7 +1038,7 @@ void main() { 'isolateId': fakeUnpausedIsolate.id, 'enabled': 'true', }, - ) + ), ], logger: logger, web: true, fileSystem: fileSystem); await terminalHandler.processTerminalInput('s'); diff --git a/packages/flutter_tools/test/general.shard/tracing_test.dart b/packages/flutter_tools/test/general.shard/tracing_test.dart index a3bf74aae0e50..966d979bc015e 100644 --- a/packages/flutter_tools/test/general.shard/tracing_test.dart +++ b/packages/flutter_tools/test/general.shard/tracing_test.dart @@ -71,7 +71,7 @@ final List vmServiceSetup = [ 'isolateId': '1', }, jsonResponse: { - 'enabled': 'true' + 'enabled': 'true', }, ), ]; diff --git a/packages/flutter_tools/test/general.shard/update_packages_test.dart b/packages/flutter_tools/test/general.shard/update_packages_test.dart index 52b7044fa37a4..a6fd150e6b351 100644 --- a/packages/flutter_tools/test/general.shard/update_packages_test.dart +++ b/packages/flutter_tools/test/general.shard/update_packages_test.dart @@ -190,7 +190,7 @@ void main() { 'sky_engine: ', 'gallery: ', 'flutter_test: ', - 'flutter_goldens: ' + 'flutter_goldens: ', })); expect( pubspecYaml.dependencies @@ -202,7 +202,7 @@ void main() { 'typed_data: 1.1.6', 'vector_math: 2.0.8', 'sky_engine: ', - 'gallery: ' + 'gallery: ', })); }); } diff --git a/packages/flutter_tools/test/general.shard/vmservice_test.dart b/packages/flutter_tools/test/general.shard/vmservice_test.dart index d391a8e8b03dd..3d1cda85d9a77 100644 --- a/packages/flutter_tools/test/general.shard/vmservice_test.dart +++ b/packages/flutter_tools/test/general.shard/vmservice_test.dart @@ -254,7 +254,7 @@ void main() { containsPair('viewId', 'abc'), containsPair('assetDirectory', '/abc'), containsPair('isolateId', 'def'), - ])) + ])), ])); }); @@ -276,7 +276,7 @@ void main() { containsPair('method', kGetSkSLsMethod), containsPair('params', allOf([ containsPair('viewId', 'abc'), - ])) + ])), ])); }); @@ -298,7 +298,7 @@ void main() { containsPair('method', kFlushUIThreadTasksMethod), containsPair('params', allOf([ containsPair('isolateId', 'def'), - ])) + ])), ])); }); @@ -306,7 +306,7 @@ void main() { final FakeVmServiceHost fakeVmServiceHost = FakeVmServiceHost( requests: [ const FakeVmServiceRequest(method: 'streamListen', args: { - 'streamId': 'Isolate' + 'streamId': 'Isolate', }), const FakeVmServiceRequest(method: kRunInViewMethod, args: { 'viewId': '1234', @@ -337,7 +337,7 @@ void main() { const FakeVmServiceRequest( method: 'ext.flutter.debugDumpSemanticsTreeInTraversalOrder', args: { - 'isolateId': '1' + 'isolateId': '1', }, errorCode: RPCErrorCodes.kMethodNotFound, ), @@ -356,7 +356,7 @@ void main() { const FakeVmServiceRequest( method: 'ext.flutter.debugDumpSemanticsTreeInInverseHitTestOrder', args: { - 'isolateId': '1' + 'isolateId': '1', }, errorCode: RPCErrorCodes.kMethodNotFound, ), @@ -375,7 +375,7 @@ void main() { const FakeVmServiceRequest( method: 'ext.flutter.debugDumpLayerTree', args: { - 'isolateId': '1' + 'isolateId': '1', }, errorCode: RPCErrorCodes.kMethodNotFound, ), @@ -394,7 +394,7 @@ void main() { const FakeVmServiceRequest( method: 'ext.flutter.debugDumpRenderTree', args: { - 'isolateId': '1' + 'isolateId': '1', }, errorCode: RPCErrorCodes.kMethodNotFound, ), @@ -413,7 +413,7 @@ void main() { const FakeVmServiceRequest( method: 'ext.flutter.debugDumpApp', args: { - 'isolateId': '1' + 'isolateId': '1', }, errorCode: RPCErrorCodes.kMethodNotFound, ), @@ -523,7 +523,7 @@ void main() { { 'layer_unique_id':1512, 'duration_micros':477, - 'snapshot':'' + 'snapshot':'', }, ], }; diff --git a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart index cc0f158caecc7..ec9c38ab55b8a 100644 --- a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart +++ b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart @@ -45,7 +45,7 @@ void main() { setUpAll(() async { packages = PackageConfig([ - Package('flutter_tools', Uri.file('/flutter_tools/lib/').normalizePath()) + Package('flutter_tools', Uri.file('/flutter_tools/lib/').normalizePath()), ]); }); @@ -110,17 +110,21 @@ void main() { // Missing ending offset. final File manifestMissingOffset = globals.fs.file('manifestA') - ..writeAsStringSync(json.encode({'/foo.js': { - 'code': [0], - 'sourcemap': [0], - 'metadata': [0], - }})); + ..writeAsStringSync(json.encode({ + '/foo.js': { + 'code': [0], + 'sourcemap': [0], + 'metadata': [0], + }, + })); final File manifestOutOfBounds = globals.fs.file('manifest') - ..writeAsStringSync(json.encode({'/foo.js': { - 'code': [0, 100], - 'sourcemap': [0], - 'metadata': [0], - }})); + ..writeAsStringSync(json.encode({ + '/foo.js': { + 'code': [0, 100], + 'sourcemap': [0], + 'metadata': [0], + }, + })); expect(webAssetServer.write(source, manifestMissingOffset, sourcemap, metadata), isEmpty); expect(webAssetServer.write(source, manifestOutOfBounds, sourcemap, metadata), isEmpty); @@ -134,11 +138,13 @@ void main() { final File metadata = globals.fs.file('metadata') ..writeAsStringSync('{}'); final File manifest = globals.fs.file('manifest') - ..writeAsStringSync(json.encode({'/foo.js': { - 'code': [0, source.lengthSync()], - 'sourcemap': [0, 2], - 'metadata': [0, 2], - }})); + ..writeAsStringSync(json.encode({ + '/foo.js': { + 'code': [0, source.lengthSync()], + 'sourcemap': [0, 2], + 'metadata': [0, 2], + }, + })); webAssetServer.write(source, manifest, sourcemap, metadata); final Response response = await webAssetServer @@ -147,7 +153,7 @@ void main() { expect(response.headers, allOf([ containsPair(HttpHeaders.contentLengthHeader, source.lengthSync().toString()), containsPair(HttpHeaders.contentTypeHeader, 'application/javascript'), - containsPair(HttpHeaders.etagHeader, isNotNull) + containsPair(HttpHeaders.etagHeader, isNotNull), ])); expect((await response.read().toList()).first, source.readAsBytesSync()); }, overrides: { @@ -163,11 +169,13 @@ void main() { final File metadata = globals.fs.file('metadata') ..writeAsStringSync(metadataContents); final File manifest = globals.fs.file('manifest') - ..writeAsStringSync(json.encode({'/foo.js': { - 'code': [0, source.lengthSync()], - 'sourcemap': [0, sourcemap.lengthSync()], - 'metadata': [0, metadata.lengthSync()], - }})); + ..writeAsStringSync(json.encode({ + '/foo.js': { + 'code': [0, source.lengthSync()], + 'sourcemap': [0, sourcemap.lengthSync()], + 'metadata': [0, metadata.lengthSync()], + }, + })); webAssetServer.write(source, manifest, sourcemap, metadata); final String merged = await webAssetServer.metadataContents('main_module.ddc_merged_metadata'); @@ -195,7 +203,7 @@ void main() { containsPair(HttpHeaders.contentLengthHeader, source.lengthSync().toString()), containsPair(HttpHeaders.contentTypeHeader, 'image/png'), containsPair(HttpHeaders.etagHeader, isNotNull), - containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate') + containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate'), ])); expect((await response.read().toList()).first, source.readAsBytesSync()); })); @@ -219,7 +227,7 @@ void main() { containsPair(HttpHeaders.contentLengthHeader, source.lengthSync().toString()), containsPair(HttpHeaders.contentTypeHeader, 'image/png'), containsPair(HttpHeaders.etagHeader, isNotNull), - containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate') + containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate'), ])); expect((await response.read().toList()).first, source.readAsBytesSync()); })); @@ -357,7 +365,7 @@ void main() { containsPair(HttpHeaders.contentLengthHeader, '9'), containsPair(HttpHeaders.contentTypeHeader, 'application/javascript'), containsPair(HttpHeaders.etagHeader, isNotNull), - containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate') + containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate'), ])); expect((await response.read().toList()).first, utf8.encode('main() {}')); })); @@ -371,7 +379,7 @@ void main() { final Response cachedResponse = await webAssetServer .handleRequest(Request('GET', Uri.parse('http://foobar/foo.js'), headers: { - HttpHeaders.ifNoneMatchHeader: etag + HttpHeaders.ifNoneMatchHeader: etag, })); expect(cachedResponse.statusCode, HttpStatus.notModified); @@ -450,11 +458,13 @@ void main() { final File metadata = globals.fs.file('metadata') ..writeAsStringSync('{}'); final File manifest = globals.fs.file('manifest') - ..writeAsStringSync(json.encode({'/foo.dart.lib.js': { - 'code': [0, source.lengthSync()], - 'sourcemap': [0, 2], - 'metadata': [0, 2], - }})); + ..writeAsStringSync(json.encode({ + '/foo.dart.lib.js': { + 'code': [0, source.lengthSync()], + 'sourcemap': [0, 2], + 'metadata': [0, 2], + }, + })); webAssetServer.write(source, manifest, sourcemap, metadata); final Response response = await webAssetServer @@ -471,11 +481,13 @@ void main() { final File metadata = globals.fs.file('metadata') ..writeAsStringSync('{}'); final File manifest = globals.fs.file('manifest') - ..writeAsStringSync(json.encode({'/foo.js': { - 'code': [0, source.lengthSync()], - 'sourcemap': [0, 2], - 'metadata': [0, 2], - }})); + ..writeAsStringSync(json.encode({ + '/foo.js': { + 'code': [0, source.lengthSync()], + 'sourcemap': [0, 2], + 'metadata': [0, 2], + }, + })); webAssetServer.write(source, manifest, sourcemap, metadata); final Response response = await webAssetServer .handleRequest(Request('GET', Uri.parse('http://localhost/foo.js'))); @@ -484,7 +496,7 @@ void main() { containsPair(HttpHeaders.contentLengthHeader, source.lengthSync().toString()), containsPair(HttpHeaders.contentTypeHeader, 'application/javascript'), containsPair(HttpHeaders.etagHeader, isNotNull), - containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate') + containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate'), ])); expect((await response.read().toList()).first, source.readAsBytesSync()); }, overrides: { @@ -502,7 +514,7 @@ void main() { containsPair(HttpHeaders.contentLengthHeader, source.lengthSync().toString()), containsPair(HttpHeaders.contentTypeHeader, 'image/png'), containsPair(HttpHeaders.etagHeader, isNotNull), - containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate') + containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate'), ])); expect((await response.read().toList()).first, source.readAsBytesSync()); })); @@ -517,7 +529,7 @@ void main() { containsPair(HttpHeaders.contentLengthHeader, source.lengthSync().toString()), containsPair(HttpHeaders.contentTypeHeader, 'image/png'), containsPair(HttpHeaders.etagHeader, isNotNull), - containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate') + containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate'), ])); expect((await response.read().toList()).first, source.readAsBytesSync()); })); @@ -533,7 +545,7 @@ void main() { containsPair(HttpHeaders.contentLengthHeader, source.lengthSync().toString()), containsPair(HttpHeaders.contentTypeHeader, 'image/png'), containsPair(HttpHeaders.etagHeader, isNotNull), - containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate') + containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate'), ])); expect((await response.read().toList()).first, source.readAsBytesSync()); }, overrides: { diff --git a/packages/flutter_tools/test/general.shard/web/devices_test.dart b/packages/flutter_tools/test/general.shard/web/devices_test.dart index 6f618b07c1b8a..79ce303d92aa9 100644 --- a/packages/flutter_tools/test/general.shard/web/devices_test.dart +++ b/packages/flutter_tools/test/general.shard/web/devices_test.dart @@ -197,8 +197,8 @@ void main() { kLinuxExecutable, '--version', ], - stdout: 'ABC' - ) + stdout: 'ABC', + ), ]); final WebDevices webDevices = WebDevices( featureFlags: TestFeatureFlags(isWebEnabled: true), @@ -243,7 +243,7 @@ void main() { 'version', ], stdout: r'HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon\ version REG_SZ 74.0.0 A', - ) + ), ]); final WebDevices webDevices = WebDevices( featureFlags: TestFeatureFlags(isWebEnabled: true), diff --git a/packages/flutter_tools/test/general.shard/web/golden_comparator_test.dart b/packages/flutter_tools/test/general.shard/web/golden_comparator_test.dart index e1e5069c8736f..b5913c8723535 100644 --- a/packages/flutter_tools/test/general.shard/web/golden_comparator_test.dart +++ b/packages/flutter_tools/test/general.shard/web/golden_comparator_test.dart @@ -45,7 +45,7 @@ void main() { '--disable-observatory', '--non-interactive', '--packages=.dart_tool/package_config.json', - 'compiler_output' + 'compiler_output', ], stdout: '${jsonEncode(expectedResponse)}\n', environment: const { @@ -79,7 +79,7 @@ void main() { '--disable-observatory', '--non-interactive', '--packages=.dart_tool/package_config.json', - 'compiler_output' + 'compiler_output', ], stdout: '${jsonEncode(expectedResponse)}\n', )); @@ -112,7 +112,7 @@ void main() { '--disable-observatory', '--non-interactive', '--packages=.dart_tool/package_config.json', - 'compiler_output' + 'compiler_output', ], stdout: '${jsonEncode(expectedResponse1)}\n${jsonEncode(expectedResponse2)}\n', )); @@ -148,7 +148,7 @@ void main() { '--disable-observatory', '--non-interactive', '--packages=.dart_tool/package_config.json', - 'compiler_output' + 'compiler_output', ], stdout: '${jsonEncode(expectedResponse1)}\n', )); processManager.addCommand(FakeCommand( @@ -157,7 +157,7 @@ void main() { '--disable-observatory', '--non-interactive', '--packages=.dart_tool/package_config.json', - 'compiler_output' + 'compiler_output', ], stdout: '${jsonEncode(expectedResponse2)}\n', )); @@ -191,7 +191,7 @@ void main() { '--disable-observatory', '--non-interactive', '--packages=.dart_tool/package_config.json', - 'compiler_output' + 'compiler_output', ], stdout: '${jsonEncode(expectedResponse)}\n', stdin: stdin, )); diff --git a/packages/flutter_tools/test/general.shard/web/memory_fs_test.dart b/packages/flutter_tools/test/general.shard/web/memory_fs_test.dart index 0a44755c50469..1626ed4bd156d 100644 --- a/packages/flutter_tools/test/general.shard/web/memory_fs_test.dart +++ b/packages/flutter_tools/test/general.shard/web/memory_fs_test.dart @@ -20,11 +20,13 @@ void main() { final File metadata = fileSystem.file('metadata') ..writeAsStringSync('{}'); final File manifest = fileSystem.file('manifest') - ..writeAsStringSync(json.encode({'/foo.js': { - 'code': [0, source.lengthSync()], - 'sourcemap': [0, 2], - 'metadata': [0, 2], - }})); + ..writeAsStringSync(json.encode({ + '/foo.js': { + 'code': [0, source.lengthSync()], + 'sourcemap': [0, 2], + 'metadata': [0, 2], + }, + })); final WebMemoryFS webMemoryFS = WebMemoryFS(); webMemoryFS.write(source, manifest, sourcemap, metadata); diff --git a/packages/flutter_tools/test/general.shard/web/web_asset_server_test.dart b/packages/flutter_tools/test/general.shard/web/web_asset_server_test.dart index 38764b78b70c0..97fb1dd63759f 100644 --- a/packages/flutter_tools/test/general.shard/web/web_asset_server_test.dart +++ b/packages/flutter_tools/test/general.shard/web/web_asset_server_test.dart @@ -23,7 +23,7 @@ const List kTransparentImage = [ final Platform platform = FakePlatform( environment: { - 'HOME': '/' + 'HOME': '/', }, ); diff --git a/packages/flutter_tools/test/general.shard/windows/plugins_test.dart b/packages/flutter_tools/test/general.shard/windows/plugins_test.dart index 45702779037ad..78497d60b2282 100644 --- a/packages/flutter_tools/test/general.shard/windows/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/windows/plugins_test.dart @@ -48,7 +48,8 @@ void main() { name: 'test', pluginClass: 'Foo', variants: {PluginPlatformVariant.win32}, - )}, + ), + }, dependencies: [], isDirectDependency: true, ), diff --git a/packages/flutter_tools/test/integration.shard/analyze_once_test.dart b/packages/flutter_tools/test/integration.shard/analyze_once_test.dart index 7418a848a742a..21c2c67743bb7 100644 --- a/packages/flutter_tools/test/integration.shard/analyze_once_test.dart +++ b/packages/flutter_tools/test/integration.shard/analyze_once_test.dart @@ -119,7 +119,7 @@ void main() { 'Analyzing error.dart', "error $analyzerSeparator Target of URI doesn't exist", "error $analyzerSeparator Expected to find ';'", - 'error $analyzerSeparator Unterminated string literal' + 'error $analyzerSeparator Unterminated string literal', ], exitMessageContains: '3 issues found', exitCode: 1 @@ -133,7 +133,7 @@ void main() { 'Analyzing 2 items', "error $analyzerSeparator Target of URI doesn't exist", "error $analyzerSeparator Expected to find ';'", - 'error $analyzerSeparator Unterminated string literal' + 'error $analyzerSeparator Unterminated string literal', ], exitMessageContains: '3 issues found', exitCode: 1 diff --git a/packages/flutter_tools/test/integration.shard/analyze_size_test.dart b/packages/flutter_tools/test/integration.shard/analyze_size_test.dart index 949bf6fe30803..c6b08fa22dc51 100644 --- a/packages/flutter_tools/test/integration.shard/analyze_size_test.dart +++ b/packages/flutter_tools/test/integration.shard/analyze_size_test.dart @@ -26,7 +26,7 @@ void main() { 'build', 'apk', '--analyze-size', - '--target-platform=android-arm64' + '--target-platform=android-arm64', ], workingDirectory: workingDirectory); printOnFailure('Output of flutter build apk:'); @@ -165,7 +165,7 @@ void main() { 'apk', '--analyze-size', '--target-platform=android-arm64', - '--split-debug-info=infos' + '--split-debug-info=infos', ], workingDirectory: fileSystem.path.join(getFlutterRoot(), 'examples', 'hello_world')); expect(result.stderr.toString(), contains('"--analyze-size" cannot be combined with "--split-debug-info"')); diff --git a/packages/flutter_tools/test/integration.shard/debug_adapter/test_adapter_test.dart b/packages/flutter_tools/test/integration.shard/debug_adapter/test_adapter_test.dart index f1827a7778720..b3c2fe67dd6c5 100644 --- a/packages/flutter_tools/test/integration.shard/debug_adapter/test_adapter_test.dart +++ b/packages/flutter_tools/test/integration.shard/debug_adapter/test_adapter_test.dart @@ -50,7 +50,7 @@ void main() { output, [ startsWith('Connecting to VM Service at'), - ..._testsProjectExpectedOutput + ..._testsProjectExpectedOutput, ], allowExtras: true, // Allow for printed call stack etc. ); diff --git a/packages/flutter_tools/test/integration.shard/deferred_components_test.dart b/packages/flutter_tools/test/integration.shard/deferred_components_test.dart index 359059ba9d7e8..dc3fb5517a144 100644 --- a/packages/flutter_tools/test/integration.shard/deferred_components_test.dart +++ b/packages/flutter_tools/test/integration.shard/deferred_components_test.dart @@ -35,7 +35,7 @@ void main() { ...getLocalEngineArguments(), 'build', 'appbundle', - '--target-platform=android-arm64' + '--target-platform=android-arm64', ], workingDirectory: tempDir.path); expect(result.exitCode, 0); @@ -113,7 +113,7 @@ void main() { ...getLocalEngineArguments(), 'build', 'appbundle', - '--no-deferred-components' + '--no-deferred-components', ], workingDirectory: tempDir.path); expect(result.stdout.toString().contains('app-release.aab'), true); diff --git a/packages/flutter_tools/test/integration.shard/downgrade_upgrade_integration_test.dart b/packages/flutter_tools/test/integration.shard/downgrade_upgrade_integration_test.dart index 07497676fdc3c..395a117653400 100644 --- a/packages/flutter_tools/test/integration.shard/downgrade_upgrade_integration_test.dart +++ b/packages/flutter_tools/test/integration.shard/downgrade_upgrade_integration_test.dart @@ -86,7 +86,7 @@ void main() { flutterBin, 'upgrade', '--verbose', - '--working-directory=${testDirectory.path}' + '--working-directory=${testDirectory.path}', ], workingDirectory: testDirectory.path, trace: true); expect(exitCode, 0); @@ -107,7 +107,7 @@ void main() { flutterBin, 'downgrade', '--no-prompt', - '--working-directory=${testDirectory.path}' + '--working-directory=${testDirectory.path}', ], workingDirectory: testDirectory.path, trace: true); expect(exitCode, 0); diff --git a/packages/flutter_tools/test/integration.shard/test_data/deferred_components_project.dart b/packages/flutter_tools/test/integration.shard/test_data/deferred_components_project.dart index ea8af435671ac..27040a4115511 100644 --- a/packages/flutter_tools/test/integration.shard/test_data/deferred_components_project.dart +++ b/packages/flutter_tools/test/integration.shard/test_data/deferred_components_project.dart @@ -477,7 +477,7 @@ class BasicDeferredComponentsConfig extends DeferredComponentsConfig { 0xe5, 0x87, 0x64, 0x4d, 0x36, 0x12, 0x40, 0xc4, 0x67, 0x78, 0xce, 0x38, 0x60, 0x24, 0xdf, 0x3c, 0xc0, 0xbb, 0xf7, 0x7d, 0x2f, 0x66, 0x56, 0xfb, 0xfa, 0x75, 0x2a, 0xe5, 0x23, 0x7a, 0xad, 0x5c, 0xef, 0x2d, 0xa1, 0xb6, 0x7c, 0xbd, 0xfa, 0xb3, 0xdc, 0x68, 0x55, 0xd1, 0xa0, 0xac, 0x8c, 0x06, - 0x62, 0x21, 0xe9, 0x7d, 0x64, 0xd0, 0x60, 0xb3, 0x12, 0x2e, 0x6a, 0x50, 0xf4 + 0x62, 0x21, 0xe9, 0x7d, 0x64, 0xd0, 0x60, 0xb3, 0x12, 0x2e, 0x6a, 0x50, 0xf4, ]; @override diff --git a/packages/flutter_tools/test/integration.shard/test_driver.dart b/packages/flutter_tools/test/integration.shard/test_driver.dart index 71ebbc27a200f..9ae3dc115a840 100644 --- a/packages/flutter_tools/test/integration.shard/test_driver.dart +++ b/packages/flutter_tools/test/integration.shard/test_driver.dart @@ -520,7 +520,7 @@ class FlutterRunTestDriver extends FlutterTestDriver { ...[ 'chrome', '--web-run-headless', - if (!expressionEvaluation) '--no-web-enable-expression-evaluation' + if (!expressionEvaluation) '--no-web-enable-expression-evaluation', ] else 'flutter-tester', diff --git a/packages/flutter_tools/test/integration.shard/test_test.dart b/packages/flutter_tools/test/integration.shard/test_test.dart index c8aef8f09df4a..778b2171211e7 100644 --- a/packages/flutter_tools/test/integration.shard/test_test.dart +++ b/packages/flutter_tools/test/integration.shard/test_test.dart @@ -37,7 +37,7 @@ void main() { [ flutterBin, 'pub', - 'get' + 'get', ], workingDirectory: flutterTestDirectory ); @@ -45,7 +45,7 @@ void main() { [ flutterBin, 'pub', - 'get' + 'get', ], workingDirectory: missingDependencyDirectory ); diff --git a/packages/flutter_tools/test/src/custom_devices_common.dart b/packages/flutter_tools/test/src/custom_devices_common.dart index 18c2178a23685..4dcb19e5fb391 100644 --- a/packages/flutter_tools/test/src/custom_devices_common.dart +++ b/packages/flutter_tools/test/src/custom_devices_common.dart @@ -18,7 +18,7 @@ void writeCustomDevicesConfigFile( { 'custom-devices': configs != null ? configs.map((CustomDeviceConfig c) => c.toJson()).toList() : - json + json, }, )); } @@ -58,5 +58,5 @@ const Map testConfigJson = { 'uninstall': ['testuninstall'], 'runDebug': ['testrundebug'], 'forwardPort': ['testforwardport'], - 'forwardPortSuccessRegex': 'testforwardportsuccess' + 'forwardPortSuccessRegex': 'testforwardportsuccess', }; diff --git a/packages/flutter_tools/test/src/fake_devices.dart b/packages/flutter_tools/test/src/fake_devices.dart index ffa74fadc742f..7109d998a5fa4 100644 --- a/packages/flutter_tools/test/src/fake_devices.dart +++ b/packages/flutter_tools/test/src/fake_devices.dart @@ -28,8 +28,8 @@ List fakeDevices = [ 'fastStart': false, 'flutterExit': true, 'hardwareRendering': true, - 'startPaused': true - } + 'startPaused': true, + }, } ), FakeDeviceJsonData( @@ -50,9 +50,9 @@ List fakeDevices = [ 'fastStart': false, 'flutterExit': true, 'hardwareRendering': true, - 'startPaused': true - } - } + 'startPaused': true, + }, + }, ), ]; diff --git a/packages/flutter_tools/test/src/fake_vm_services.dart b/packages/flutter_tools/test/src/fake_vm_services.dart index 7a40580daf35d..f90bc3cd58e03 100644 --- a/packages/flutter_tools/test/src/fake_vm_services.dart +++ b/packages/flutter_tools/test/src/fake_vm_services.dart @@ -53,7 +53,7 @@ class FakeVmServiceHost { 'error': { 'code': fakeRequest.errorCode, 'message': 'error', - } + }, })); } _applyStreamListen(); diff --git a/packages/flutter_tools/test/src/fakes.dart b/packages/flutter_tools/test/src/fakes.dart index 230c0302c7d2a..0233240c1f788 100644 --- a/packages/flutter_tools/test/src/fakes.dart +++ b/packages/flutter_tools/test/src/fakes.dart @@ -22,7 +22,7 @@ class FakeDyldEnvironmentArtifact extends ArtifactSet { FakeDyldEnvironmentArtifact() : super(DevelopmentArtifact.iOS); @override Map get environment => { - 'DYLD_LIBRARY_PATH': '/path/to/libraries' + 'DYLD_LIBRARY_PATH': '/path/to/libraries', }; @override diff --git a/packages/flutter_tools/test/web.shard/chrome_test.dart b/packages/flutter_tools/test/web.shard/chrome_test.dart index 56225b365b62a..12d498d650379 100644 --- a/packages/flutter_tools/test/web.shard/chrome_test.dart +++ b/packages/flutter_tools/test/web.shard/chrome_test.dart @@ -214,7 +214,7 @@ void main() { 'example_url', ], stderr: kDevtoolsStderr, - ) + ), ]); await expectReturnsNormallyLater( @@ -253,7 +253,7 @@ void main() { 'example_url', ], stderr: kDevtoolsStderr, - ) + ), ]); await expectReturnsNormallyLater( diff --git a/packages/flutter_tools/test/web.shard/vm_service_web_test.dart b/packages/flutter_tools/test/web.shard/vm_service_web_test.dart index a0f5bd7a01ddf..6c81d04bcacf5 100644 --- a/packages/flutter_tools/test/web.shard/vm_service_web_test.dart +++ b/packages/flutter_tools/test/web.shard/vm_service_web_test.dart @@ -60,8 +60,8 @@ void main() { await Future.wait(>[ validateFlutterVersion(client1), - validateFlutterVersion(client2)] - ); + validateFlutterVersion(client2), + ]); }, skip: true); // https://github.com/flutter/flutter/issues/99003 }); diff --git a/packages/flutter_tools/tool/daemon_client.dart b/packages/flutter_tools/tool/daemon_client.dart index 8e31d7f155263..bb9ebefc05ac2 100644 --- a/packages/flutter_tools/tool/daemon_client.dart +++ b/packages/flutter_tools/tool/daemon_client.dart @@ -73,7 +73,7 @@ Future main() async { 'params': { 'emulatorId': words[1], if (words.contains('coldBoot')) - 'coldBoot': true + 'coldBoot': true, }, }); } else if (line == 'enable') { diff --git a/packages/fuchsia_remote_debug_protocol/test/src/common/network_test.dart b/packages/fuchsia_remote_debug_protocol/test/src/common/network_test.dart index cd250280dfa51..46477c57c2bbf 100644 --- a/packages/fuchsia_remote_debug_protocol/test/src/common/network_test.dart +++ b/packages/fuchsia_remote_debug_protocol/test/src/common/network_test.dart @@ -8,8 +8,11 @@ import '../../common.dart'; void main() { final List ipv4Addresses = ['127.0.0.1', '8.8.8.8']; - final List ipv6Addresses = ['::1', - 'fe80::8eae:4cff:fef4:9247', 'fe80::8eae:4cff:fef4:9247%e0']; + final List ipv6Addresses = [ + '::1', + 'fe80::8eae:4cff:fef4:9247', + 'fe80::8eae:4cff:fef4:9247%e0', + ]; group('test validation', () { test('isIpV4Address', () { diff --git a/packages/integration_test/lib/common.dart b/packages/integration_test/lib/common.dart index 67a61c3f22f54..6e0f818bae729 100644 --- a/packages/integration_test/lib/common.dart +++ b/packages/integration_test/lib/common.dart @@ -65,7 +65,7 @@ class Response { String toJson() => json.encode({ 'result': allTestsPassed.toString(), 'failureDetails': _failureDetailsAsString(), - if (data != null) 'data': data + if (data != null) 'data': data, }); /// Deserializes the result from JSON. diff --git a/packages/integration_test/lib/integration_test.dart b/packages/integration_test/lib/integration_test.dart index 157ea497e886e..d4fe3a3309055 100644 --- a/packages/integration_test/lib/integration_test.dart +++ b/packages/integration_test/lib/integration_test.dart @@ -60,7 +60,7 @@ class IntegrationTestWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding return MapEntry(name, result.details); } return MapEntry(name, result); - }) + }), }, ); } on MissingPluginException { diff --git a/packages/integration_test/test/binding_fail_test.dart b/packages/integration_test/test/binding_fail_test.dart index d293f56cc0625..f28d1f9dd98b4 100644 --- a/packages/integration_test/test/binding_fail_test.dart +++ b/packages/integration_test/test/binding_fail_test.dart @@ -80,7 +80,7 @@ Future?> _runTest(String scriptPath) async { } return >[ if (json != null) - json as Map + json as Map, ]; }) .where((Map testEvent) => testEvent['type'] == 'print') From 4cf60f7659cba379200b7d80ceb45d020dae560e Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 03:19:05 -0400 Subject: [PATCH 108/141] Roll Engine from fcc15947754b to 189cdc7df7ae (1 revision) (#102623) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 88810bbaa4a9f..c47e0a37cbac1 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -fcc15947754bb12321a260908ab8bf5bc445a5f9 +189cdc7df7ae7fbe4786407af33f867b76bf2dc9 diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index 7099c48b4dcac..83894ac690d5e 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -GPkj69-XiXEkbjYX9L7LD42YJVhQq51Tlt8Fjs3GXtsC +iisykXnbM-9g3DFfH6SEX7v1HeT9dckHjjgxXMogGR0C From 7363b29c7f83d50657f5dbe67c1ab52e1b5f220a Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 06:49:03 -0400 Subject: [PATCH 109/141] Roll Engine from 189cdc7df7ae to c5bb99941547 (4 revisions) (#102634) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index c47e0a37cbac1..5cfda5899761f 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -189cdc7df7ae7fbe4786407af33f867b76bf2dc9 +c5bb99941547a086e91cf2d0fdb6210e7156e850 diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index fadb71ff11095..3f5efc7d997d6 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -V9WZPjuRB6MuqnFOtwwCpQ836OCACOlommBDJRphsswC +0BdXJKVKfjhQxQo_1NG2ZN3gJx69Lo1HUYztIonf5zwC From 3d148821ebfda5c6c8ad74ca43c01fbb20c3415b Mon Sep 17 00:00:00 2001 From: JsouLiang <1129584401@qq.com> Date: Wed, 27 Apr 2022 20:54:06 +0800 Subject: [PATCH 110/141] Benchmark cannot run in Android12 phone (#100761) --- .../macrobenchmarks/android/app/src/main/AndroidManifest.xml | 1 + .../multiple_flutters/android/app/src/main/AndroidManifest.xml | 1 + .../android/app/src/main/AndroidManifest.xml | 1 + .../android/app/src/main/AndroidManifest.xml | 1 + 4 files changed, 4 insertions(+) diff --git a/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml b/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml index 6453a039057a8..e62c089d57b9b 100644 --- a/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml +++ b/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ found in the LICENSE file. --> android:theme="@style/Theme.MultipleFlutters"> diff --git a/dev/benchmarks/platform_views_layout/android/app/src/main/AndroidManifest.xml b/dev/benchmarks/platform_views_layout/android/app/src/main/AndroidManifest.xml index 8809178900ff0..9fb7556b2dfd2 100644 --- a/dev/benchmarks/platform_views_layout/android/app/src/main/AndroidManifest.xml +++ b/dev/benchmarks/platform_views_layout/android/app/src/main/AndroidManifest.xml @@ -9,6 +9,7 @@ found in the LICENSE file. --> Date: Wed, 27 Apr 2022 07:27:34 -0700 Subject: [PATCH 111/141] Revert "Benchmark cannot run in Android12 phone (#100761)" (#102649) This reverts commit 3d148821ebfda5c6c8ad74ca43c01fbb20c3415b. --- .../macrobenchmarks/android/app/src/main/AndroidManifest.xml | 1 - .../multiple_flutters/android/app/src/main/AndroidManifest.xml | 1 - .../android/app/src/main/AndroidManifest.xml | 1 - .../android/app/src/main/AndroidManifest.xml | 1 - 4 files changed, 4 deletions(-) diff --git a/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml b/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml index e62c089d57b9b..6453a039057a8 100644 --- a/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml +++ b/dev/benchmarks/macrobenchmarks/android/app/src/main/AndroidManifest.xml @@ -23,7 +23,6 @@ found in the LICENSE file. --> android:theme="@style/Theme.MultipleFlutters"> diff --git a/dev/benchmarks/platform_views_layout/android/app/src/main/AndroidManifest.xml b/dev/benchmarks/platform_views_layout/android/app/src/main/AndroidManifest.xml index 9fb7556b2dfd2..8809178900ff0 100644 --- a/dev/benchmarks/platform_views_layout/android/app/src/main/AndroidManifest.xml +++ b/dev/benchmarks/platform_views_layout/android/app/src/main/AndroidManifest.xml @@ -9,7 +9,6 @@ found in the LICENSE file. --> Date: Wed, 27 Apr 2022 11:19:07 -0400 Subject: [PATCH 112/141] Roll Engine from c5bb99941547 to 6abf69920824 (2 revisions) (#102646) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 5cfda5899761f..70c1ac2cc015f 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -c5bb99941547a086e91cf2d0fdb6210e7156e850 +6abf6992082482af1cb314be495a5839c98b883b From 082f13800ee9486a0e3c32633610723ccf8f293b Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 12:04:05 -0400 Subject: [PATCH 113/141] Roll Plugins from e55659835427 to 3e43f590d4d0 (3 revisions) (#102656) --- bin/internal/flutter_plugins.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/flutter_plugins.version b/bin/internal/flutter_plugins.version index 14e754218556d..26ab7f807b46c 100644 --- a/bin/internal/flutter_plugins.version +++ b/bin/internal/flutter_plugins.version @@ -1 +1 @@ -e55659835427fdc2b3c838548ce7e49267f100fd +3e43f590d4d0143972e702eb14f14658cdc2decb From bca071815f725ec3c5baaf99e47d8b0387db8703 Mon Sep 17 00:00:00 2001 From: Phil Quitslund Date: Wed, 27 Apr 2022 09:14:57 -0700 Subject: [PATCH 114/141] rename local functions with `_`s (#102615) --- .../lib/src/foundation/_isolates_io.dart | 6 +- .../lib/src/material/input_decorator.dart | 4 +- .../lib/src/material/range_slider.dart | 4 +- .../flutter/lib/src/material/scaffold.dart | 16 +- packages/flutter/lib/src/material/slider.dart | 4 +- packages/flutter/lib/src/material/time.dart | 6 +- .../lib/src/services/raw_keyboard.dart | 6 +- .../widgets/draggable_scrollable_sheet.dart | 4 +- .../lib/src/widgets/editable_text.dart | 6 +- packages/flutter/lib/src/widgets/routes.dart | 6 +- .../flutter/lib/src/widgets/scrollbar.dart | 4 +- .../lib/src/widgets/widget_inspector.dart | 4 +- .../cupertino/context_menu_action_test.dart | 32 ++-- .../test/cupertino/context_menu_test.dart | 140 ++++++++--------- .../test/cupertino/date_picker_test.dart | 8 +- .../flutter/test/cupertino/slider_test.dart | 6 +- .../text_selection_toolbar_test.dart | 68 ++++----- .../flutter/test/gestures/resampler_test.dart | 144 +++++++++--------- .../test/material/app_bar_theme_test.dart | 8 +- .../test/material/autocomplete_test.dart | 8 +- .../test/material/bottom_sheet_test.dart | 6 +- packages/flutter/test/material/card_test.dart | 12 +- .../test/material/date_picker_test.dart | 18 +-- .../test/material/date_range_picker_test.dart | 6 +- .../floating_action_button_location_test.dart | 100 ++++++------ .../input_date_picker_form_field_test.dart | 58 +++---- .../material/material_state_mixin_test.dart | 18 +-- .../test/material/navigation_bar_test.dart | 18 +-- packages/flutter/test/material/page_test.dart | 22 +-- .../persistent_bottom_sheet_test.dart | 6 +- .../test/material/popup_menu_test.dart | 8 +- .../flutter/test/material/radio_test.dart | 28 ++-- .../test/material/range_slider_test.dart | 38 ++--- .../flutter/test/material/scaffold_test.dart | 8 +- .../flutter/test/material/scrollbar_test.dart | 16 +- .../test/material/scrollbar_theme_test.dart | 4 +- .../flutter/test/material/snack_bar_test.dart | 14 +- .../test/material/snack_bar_theme_test.dart | 10 +- packages/flutter/test/material/tabs_test.dart | 16 +- .../test/material/text_field_test.dart | 22 +-- .../material/text_selection_toolbar_test.dart | 24 +-- .../flutter/test/material/will_pop_test.dart | 6 +- .../test/painting/decoration_test.dart | 4 +- .../test/painting/image_cache_test.dart | 6 +- .../image_provider_and_image_cache_test.dart | 4 +- .../image_provider_network_image_test.dart | 8 +- .../test/painting/image_provider_test.dart | 10 +- .../test/painting/image_resolution_test.dart | 28 ++-- .../flutter/test/rendering/layers_test.dart | 22 +-- .../rendering/mouse_tracker_cursor_test.dart | 20 +-- .../test/rendering/mouse_tracker_test.dart | 28 ++-- .../test/rendering/proxy_box_test.dart | 14 +- .../flutter/test/rendering/slivers_test.dart | 42 ++--- .../flutter/test/rendering/viewport_test.dart | 16 +- .../test/services/channel_buffers_test.dart | 8 +- .../default_binary_messenger_test.dart | 4 +- .../test/services/raw_keyboard_test.dart | 8 +- .../draggable_scrollable_sheet_test.dart | 102 ++++++------- .../test/widgets/editable_text_test.dart | 46 +++--- .../flutter/test/widgets/heroes_test.dart | 10 +- packages/flutter/test/widgets/image_test.dart | 6 +- .../test/widgets/mouse_region_test.dart | 12 +- .../multichildobject_with_keys_test.dart | 6 +- .../flutter/test/widgets/navigator_test.dart | 16 +- .../test/widgets/nested_scroll_view_test.dart | 46 +++--- .../flutter/test/widgets/routes_test.dart | 24 +-- .../scroll_aware_image_provider_test.dart | 22 +-- .../flutter/test/widgets/scrollbar_test.dart | 4 +- .../test/widgets/sliver_visibility_test.dart | 42 ++--- .../flutter/test/widgets/slivers_test.dart | 34 ++--- .../test/widgets/text_selection_test.dart | 40 ++--- .../flutter/test/widgets/transform_test.dart | 6 +- .../test/widgets/transitions_test.dart | 24 +-- 73 files changed, 802 insertions(+), 802 deletions(-) diff --git a/packages/flutter/lib/src/foundation/_isolates_io.dart b/packages/flutter/lib/src/foundation/_isolates_io.dart index 14eda2be0feb8..ab0b0ce1ca7c2 100644 --- a/packages/flutter/lib/src/foundation/_isolates_io.dart +++ b/packages/flutter/lib/src/foundation/_isolates_io.dart @@ -19,7 +19,7 @@ Future compute(isolates.ComputeCallback callback, Q message, { St final RawReceivePort port = RawReceivePort(); Timeline.finishSync(); - void _timeEndAndCleanup() { + void timeEndAndCleanup() { Timeline.startSync('$debugLabel: end', flow: Flow.end(flow.id)); port.close(); Timeline.finishSync(); @@ -27,7 +27,7 @@ Future compute(isolates.ComputeCallback callback, Q message, { St final Completer completer = Completer(); port.handler = (dynamic msg) { - _timeEndAndCleanup(); + timeEndAndCleanup(); completer.complete(msg); }; @@ -47,7 +47,7 @@ Future compute(isolates.ComputeCallback callback, Q message, { St debugName: debugLabel, ); } on Object { - _timeEndAndCleanup(); + timeEndAndCleanup(); rethrow; } diff --git a/packages/flutter/lib/src/material/input_decorator.dart b/packages/flutter/lib/src/material/input_decorator.dart index cbc7bcf0fade3..5edd6046beb1f 100644 --- a/packages/flutter/lib/src/material/input_decorator.dart +++ b/packages/flutter/lib/src/material/input_decorator.dart @@ -1955,7 +1955,7 @@ class _InputDecoratorState extends State with TickerProviderStat } Color _getIconColor(ThemeData themeData) { - Color _resolveIconColor(Set states) { + Color resolveIconColor(Set states) { if (states.contains(MaterialState.disabled) && !states.contains(MaterialState.focused)) return themeData.disabledColor; @@ -1970,7 +1970,7 @@ class _InputDecoratorState extends State with TickerProviderStat } } return MaterialStateProperty.resolveAs(themeData.inputDecorationTheme.iconColor, materialState) - ?? MaterialStateProperty.resolveWith(_resolveIconColor).resolve(materialState); + ?? MaterialStateProperty.resolveWith(resolveIconColor).resolve(materialState); } Color _getPrefixIconColor(ThemeData themeData) { diff --git a/packages/flutter/lib/src/material/range_slider.dart b/packages/flutter/lib/src/material/range_slider.dart index bb86fde4859cf..fdd10e1e79e5b 100644 --- a/packages/flutter/lib/src/material/range_slider.dart +++ b/packages/flutter/lib/src/material/range_slider.dart @@ -614,7 +614,7 @@ class _RangeSliderState extends State with TickerProviderStateMixin // This size is used as the max bounds for the painting of the value // indicators. It must be kept in sync with the function with the same name // in slider.dart. - Size _screenSize() => MediaQuery.of(context).size; + Size screenSize() => MediaQuery.of(context).size; return CompositedTransformTarget( link: _layerLink, @@ -624,7 +624,7 @@ class _RangeSliderState extends State with TickerProviderStateMixin labels: widget.labels, sliderTheme: sliderTheme, textScaleFactor: MediaQuery.of(context).textScaleFactor, - screenSize: _screenSize(), + screenSize: screenSize(), onChanged: (widget.onChanged != null) && (widget.max > widget.min) ? _handleChanged : null, onChangeStart: widget.onChangeStart != null ? _handleDragStart : null, onChangeEnd: widget.onChangeEnd != null ? _handleDragEnd : null, diff --git a/packages/flutter/lib/src/material/scaffold.dart b/packages/flutter/lib/src/material/scaffold.dart index 3eef5e3e71285..8aa2a72d84537 100644 --- a/packages/flutter/lib/src/material/scaffold.dart +++ b/packages/flutter/lib/src/material/scaffold.dart @@ -2064,7 +2064,7 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto // support drag or swipe to dismiss. final AnimationController animationController = BottomSheet.createAnimationController(this)..value = 1.0; LocalHistoryEntry? persistentSheetHistoryEntry; - bool _persistentBottomSheetExtentChanged(DraggableScrollableNotification notification) { + bool persistentBottomSheetExtentChanged(DraggableScrollableNotification notification) { if (notification.extent > notification.initialExtent) { if (persistentSheetHistoryEntry == null) { persistentSheetHistoryEntry = LocalHistoryEntry(onRemove: () { @@ -2086,7 +2086,7 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto _currentBottomSheet = _buildBottomSheet( (BuildContext context) { return NotificationListener( - onNotification: _persistentBottomSheetExtentChanged, + onNotification: persistentBottomSheetExtentChanged, child: DraggableScrollableActuator( child: StatefulBuilder( key: _currentBottomSheetKey, @@ -2166,7 +2166,7 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto bool removedEntry = false; bool doingDispose = false; - void _removeCurrentBottomSheet() { + void removeCurrentBottomSheet() { removedEntry = true; if (_currentBottomSheet == null) { return; @@ -2190,11 +2190,11 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto ? null : LocalHistoryEntry(onRemove: () { if (!removedEntry && _currentBottomSheet?._widget == bottomSheet && !doingDispose) { - _removeCurrentBottomSheet(); + removeCurrentBottomSheet(); } }); - void _removeEntryIfNeeded() { + void removeEntryIfNeeded() { if (!isPersistent && !removedEntry) { assert(entry != null); entry!.remove(); @@ -2211,7 +2211,7 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto return; } assert(_currentBottomSheet!._widget == bottomSheet); - _removeEntryIfNeeded(); + removeEntryIfNeeded(); }, onDismissed: () { if (_dismissedBottomSheets.contains(bottomSheet)) { @@ -2222,7 +2222,7 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto }, onDispose: () { doingDispose = true; - _removeEntryIfNeeded(); + removeEntryIfNeeded(); if (shouldDisposeAnimationController) { animationController.dispose(); } @@ -2244,7 +2244,7 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto completer, entry != null ? entry.remove - : _removeCurrentBottomSheet, + : removeCurrentBottomSheet, (VoidCallback fn) { bottomSheetKey.currentState?.setState(fn); }, !isPersistent, ); diff --git a/packages/flutter/lib/src/material/slider.dart b/packages/flutter/lib/src/material/slider.dart index 5cb0ee675dc42..449bc4a2508ce 100644 --- a/packages/flutter/lib/src/material/slider.dart +++ b/packages/flutter/lib/src/material/slider.dart @@ -715,7 +715,7 @@ class _SliderState extends State with TickerProviderStateMixin { // This size is used as the max bounds for the painting of the value // indicators It must be kept in sync with the function with the same name // in range_slider.dart. - Size _screenSize() => MediaQuery.of(context).size; + Size screenSize() => MediaQuery.of(context).size; VoidCallback? handleDidGainAccessibilityFocus; switch (theme.platform) { @@ -757,7 +757,7 @@ class _SliderState extends State with TickerProviderStateMixin { label: widget.label, sliderTheme: sliderTheme, textScaleFactor: MediaQuery.of(context).textScaleFactor, - screenSize: _screenSize(), + screenSize: screenSize(), onChanged: (widget.onChanged != null) && (widget.max > widget.min) ? _handleChanged : null, onChangeStart: _handleDragStart, onChangeEnd: _handleDragEnd, diff --git a/packages/flutter/lib/src/material/time.dart b/packages/flutter/lib/src/material/time.dart index aa96ee5256b65..246877f03a81f 100644 --- a/packages/flutter/lib/src/material/time.dart +++ b/packages/flutter/lib/src/material/time.dart @@ -124,14 +124,14 @@ class TimeOfDay { @override String toString() { - String _addLeadingZeroIfNeeded(int value) { + String addLeadingZeroIfNeeded(int value) { if (value < 10) return '0$value'; return value.toString(); } - final String hourLabel = _addLeadingZeroIfNeeded(hour); - final String minuteLabel = _addLeadingZeroIfNeeded(minute); + final String hourLabel = addLeadingZeroIfNeeded(hour); + final String minuteLabel = addLeadingZeroIfNeeded(minute); return '$TimeOfDay($hourLabel:$minuteLabel)'; } diff --git a/packages/flutter/lib/src/services/raw_keyboard.dart b/packages/flutter/lib/src/services/raw_keyboard.dart index 8753e7a3811fc..415ea7f1f24b8 100644 --- a/packages/flutter/lib/src/services/raw_keyboard.dart +++ b/packages/flutter/lib/src/services/raw_keyboard.dart @@ -288,7 +288,7 @@ abstract class RawKeyEvent with Diagnosticable { /// instead of using the message information. factory RawKeyEvent.fromMessage(Map message) { String? character; - RawKeyEventData _dataFromWeb() { + RawKeyEventData dataFromWeb() { final String? key = message['key'] as String?; if (key != null && key.isNotEmpty && key.length == 1) { character = key; @@ -304,7 +304,7 @@ abstract class RawKeyEvent with Diagnosticable { final RawKeyEventData data; if (kIsWeb) { - data = _dataFromWeb(); + data = dataFromWeb(); } else { final String keymap = message['keymap']! as String; switch (keymap) { @@ -382,7 +382,7 @@ abstract class RawKeyEvent with Diagnosticable { } break; case 'web': - data = _dataFromWeb(); + data = dataFromWeb(); break; default: /// This exception would only be hit on platforms that haven't yet diff --git a/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart b/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart index a53437444a3ca..c73296b386fdf 100644 --- a/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart +++ b/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart @@ -896,7 +896,7 @@ class _DraggableScrollableSheetScrollPosition // See: [beginActivity]. _ballisticCancelCallback = ballisticController.stop; double lastPosition = extent.currentPixels; - void _tick() { + void tick() { final double delta = ballisticController.value - lastPosition; lastPosition = ballisticController.value; extent.addPixelDelta(delta, context.notificationContext!); @@ -913,7 +913,7 @@ class _DraggableScrollableSheetScrollPosition } ballisticController - ..addListener(_tick) + ..addListener(tick) ..animateWith(simulation).whenCompleteOrCancel( () { _ballisticCancelCallback = null; diff --git a/packages/flutter/lib/src/widgets/editable_text.dart b/packages/flutter/lib/src/widgets/editable_text.dart index be622d5ba3bda..c09ded58f6b96 100644 --- a/packages/flutter/lib/src/widgets/editable_text.dart +++ b/packages/flutter/lib/src/widgets/editable_text.dart @@ -4097,7 +4097,7 @@ class _UpdateTextSelectionAction exten final bool collapseSelection = intent.collapseSelection || !state.widget.selectionEnabled; // Collapse to the logical start/end. - TextSelection _collapse(TextSelection selection) { + TextSelection collapse(TextSelection selection) { assert(selection.isValid); assert(!selection.isCollapsed); return selection.copyWith( @@ -4109,7 +4109,7 @@ class _UpdateTextSelectionAction exten if (!selection.isCollapsed && !ignoreNonCollapsedSelection && collapseSelection) { return Actions.invoke( context!, - UpdateSelectionIntent(state._value, _collapse(selection), SelectionChangedCause.keyboard), + UpdateSelectionIntent(state._value, collapse(selection), SelectionChangedCause.keyboard), ); } @@ -4121,7 +4121,7 @@ class _UpdateTextSelectionAction exten if (!textBoundarySelection.isCollapsed && !ignoreNonCollapsedSelection && collapseSelection) { return Actions.invoke( context!, - UpdateSelectionIntent(state._value, _collapse(textBoundarySelection), SelectionChangedCause.keyboard), + UpdateSelectionIntent(state._value, collapse(textBoundarySelection), SelectionChangedCause.keyboard), ); } diff --git a/packages/flutter/lib/src/widgets/routes.dart b/packages/flutter/lib/src/widgets/routes.dart index 5731297f13d5a..53cf94283e8cc 100644 --- a/packages/flutter/lib/src/widgets/routes.dart +++ b/packages/flutter/lib/src/widgets/routes.dart @@ -316,7 +316,7 @@ abstract class TransitionRoute extends OverlayRoute { // finishes. We leave a listener remover for the next call to // properly clean up the existing train hopping. TrainHoppingAnimation? newAnimation; - void _jumpOnAnimationEnd(AnimationStatus status) { + void jumpOnAnimationEnd(AnimationStatus status) { switch (status) { case AnimationStatus.completed: case AnimationStatus.dismissed: @@ -335,10 +335,10 @@ abstract class TransitionRoute extends OverlayRoute { } } _trainHoppingListenerRemover = () { - nextTrain.removeStatusListener(_jumpOnAnimationEnd); + nextTrain.removeStatusListener(jumpOnAnimationEnd); newAnimation?.dispose(); }; - nextTrain.addStatusListener(_jumpOnAnimationEnd); + nextTrain.addStatusListener(jumpOnAnimationEnd); newAnimation = TrainHoppingAnimation( currentTrain, nextTrain, diff --git a/packages/flutter/lib/src/widgets/scrollbar.dart b/packages/flutter/lib/src/widgets/scrollbar.dart index b3db9a57cc15f..ebd9e5fe27139 100644 --- a/packages/flutter/lib/src/widgets/scrollbar.dart +++ b/packages/flutter/lib/src/widgets/scrollbar.dart @@ -409,8 +409,8 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter { _lastMetrics = metrics; _lastAxisDirection = axisDirection; - bool _needPaint(ScrollMetrics? metrics) => metrics != null && metrics.maxScrollExtent > metrics.minScrollExtent; - if (!_needPaint(oldMetrics) && !_needPaint(metrics)) + bool needPaint(ScrollMetrics? metrics) => metrics != null && metrics.maxScrollExtent > metrics.minScrollExtent; + if (!needPaint(oldMetrics) && !needPaint(metrics)) return; notifyListeners(); diff --git a/packages/flutter/lib/src/widgets/widget_inspector.dart b/packages/flutter/lib/src/widgets/widget_inspector.dart index 12a54be23c569..690d3f8ae5b1f 100644 --- a/packages/flutter/lib/src/widgets/widget_inspector.dart +++ b/packages/flutter/lib/src/widgets/widget_inspector.dart @@ -2328,11 +2328,11 @@ class _WidgetInspectorState extends State _hitTestHelper(regularHits, edgeHits, position, root, root.getTransformTo(null)); // Order matches by the size of the hit area. - double _area(RenderObject object) { + double area(RenderObject object) { final Size size = object.semanticBounds.size; return size.width * size.height; } - regularHits.sort((RenderObject a, RenderObject b) => _area(a).compareTo(_area(b))); + regularHits.sort((RenderObject a, RenderObject b) => area(a).compareTo(area(b))); final Set hits = { ...edgeHits, ...regularHits, diff --git a/packages/flutter/test/cupertino/context_menu_action_test.dart b/packages/flutter/test/cupertino/context_menu_action_test.dart index 0b110605558a2..6f83ad75c2d2f 100644 --- a/packages/flutter/test/cupertino/context_menu_action_test.dart +++ b/packages/flutter/test/cupertino/context_menu_action_test.dart @@ -23,7 +23,7 @@ void main() { const Color kDestructiveActionColor = CupertinoColors.destructiveRed; const FontWeight kDefaultActionWeight = FontWeight.w600; - Widget _getApp({ + Widget getApp({ VoidCallback? onPressed, bool isDestructiveAction = false, bool isDefaultAction = false, @@ -51,7 +51,7 @@ void main() { ); } - TextStyle _getTextStyle(WidgetTester tester) { + TextStyle getTextStyle(WidgetTester tester) { final Finder finder = find.descendant( of: find.byType(CupertinoContextMenuAction), matching: find.byType(DefaultTextStyle), @@ -61,7 +61,7 @@ void main() { return defaultStyle.style; } - Icon _getIcon(WidgetTester tester) { + Icon getIcon(WidgetTester tester) { final Finder finder = find.descendant( of: find.byType(CupertinoContextMenuAction), matching: find.byType(Icon), @@ -73,7 +73,7 @@ void main() { testWidgets('responds to taps', (WidgetTester tester) async { bool wasPressed = false; - await tester.pumpWidget(_getApp(onPressed: () { + await tester.pumpWidget(getApp(onPressed: () { wasPressed = true; })); @@ -83,7 +83,7 @@ void main() { }); testWidgets('turns grey when pressed and held', (WidgetTester tester) async { - await tester.pumpWidget(_getApp()); + await tester.pumpWidget(getApp()); expect(find.byType(CupertinoContextMenuAction), paints..rect(color: kBackgroundColor.color)); final Offset actionCenterLight = tester.getCenter(find.byType(CupertinoContextMenuAction)); @@ -95,7 +95,7 @@ void main() { await tester.pump(); expect(find.byType(CupertinoContextMenuAction), paints..rect(color: kBackgroundColor.color)); - await tester.pumpWidget(_getApp(brightness: Brightness.dark)); + await tester.pumpWidget(getApp(brightness: Brightness.dark)); expect(find.byType(CupertinoContextMenuAction), paints..rect(color: kBackgroundColor.darkColor)); final Offset actionCenterDark = tester.getCenter(find.byType(CupertinoContextMenuAction)); @@ -109,27 +109,27 @@ void main() { }); testWidgets('icon and textStyle colors are correct out of the box', (WidgetTester tester) async { - await tester.pumpWidget(_getApp()); - expect(_getTextStyle(tester).color, CupertinoColors.label); - expect(_getIcon(tester).color, CupertinoColors.label); + await tester.pumpWidget(getApp()); + expect(getTextStyle(tester).color, CupertinoColors.label); + expect(getIcon(tester).color, CupertinoColors.label); }); testWidgets('icon and textStyle colors are correct for destructive actions', (WidgetTester tester) async { - await tester.pumpWidget(_getApp(isDestructiveAction: true)); - expect(_getTextStyle(tester).color, kDestructiveActionColor); - expect(_getIcon(tester).color, kDestructiveActionColor); + await tester.pumpWidget(getApp(isDestructiveAction: true)); + expect(getTextStyle(tester).color, kDestructiveActionColor); + expect(getIcon(tester).color, kDestructiveActionColor); }); testWidgets('textStyle is correct for defaultAction', (WidgetTester tester) async { - await tester.pumpWidget(_getApp(isDefaultAction: true)); - expect(_getTextStyle(tester).fontWeight, kDefaultActionWeight); + await tester.pumpWidget(getApp(isDefaultAction: true)); + expect(getTextStyle(tester).fontWeight, kDefaultActionWeight); }); testWidgets( 'Hovering over Cupertino context menu action updates cursor to clickable on Web', (WidgetTester tester) async { /// Cupertino context menu action without "onPressed" callback. - await tester.pumpWidget(_getApp()); + await tester.pumpWidget(getApp()); final Offset contextMenuAction = tester.getCenter(find.text('I am a CupertinoContextMenuAction')); final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse, pointer: 1); await gesture.addPointer(location: contextMenuAction); @@ -137,7 +137,7 @@ void main() { expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.basic); // / Cupertino context menu action with "onPressed" callback. - await tester.pumpWidget(_getApp(onPressed: (){})); + await tester.pumpWidget(getApp(onPressed: (){})); await gesture.moveTo(const Offset(10, 10)); await tester.pumpAndSettle(); expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.basic); diff --git a/packages/flutter/test/cupertino/context_menu_test.dart b/packages/flutter/test/cupertino/context_menu_test.dart index 2cf6878937827..902a11411e213 100644 --- a/packages/flutter/test/cupertino/context_menu_test.dart +++ b/packages/flutter/test/cupertino/context_menu_test.dart @@ -12,7 +12,7 @@ void main() { final TestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.ensureInitialized(); const double kOpenScale = 1.1; - Widget _getChild() { + Widget getChild() { return Container( width: 300.0, height: 100.0, @@ -20,7 +20,7 @@ void main() { ); } - Widget _getContextMenu({ + Widget getContextMenu({ Alignment alignment = Alignment.center, Size screenSize = const Size(800.0, 600.0), Widget? child, @@ -37,7 +37,7 @@ void main() { child: Text('CupertinoContextMenuAction $alignment'), ), ], - child: child ?? _getChild(), + child: child ?? getChild(), ), ), ), @@ -46,7 +46,7 @@ void main() { } // Finds the child widget that is rendered inside of _DecoyChild. - Finder _findDecoyChild(Widget child) { + Finder findDecoyChild(Widget child) { return find.descendant( of: find.byType(ShaderMask), matching: find.byWidget(child), @@ -54,23 +54,23 @@ void main() { } // Finds the child widget rendered inside of _ContextMenuRouteStatic. - Finder _findStatic() { + Finder findStatic() { return find.descendant( of: find.byType(CupertinoApp), matching: find.byWidgetPredicate((Widget w) => '${w.runtimeType}' == '_ContextMenuRouteStatic'), ); } - Finder _findStaticChild(Widget child) { + Finder findStaticChild(Widget child) { return find.descendant( - of: _findStatic(), + of: findStatic(), matching: find.byWidget(child), ); } - Finder _findStaticChildDecoration(WidgetTester tester) { + Finder findStaticChildDecoration(WidgetTester tester) { return find.descendant( - of: _findStatic(), + of: findStatic(), matching: find.byType(DecoratedBox), ); } @@ -78,7 +78,7 @@ void main() { group('CupertinoContextMenu before and during opening', () { testWidgets('An unopened CupertinoContextMenu renders child in the same place as without', (WidgetTester tester) async { // Measure the child in the scene with no CupertinoContextMenu. - final Widget child = _getChild(); + final Widget child = getChild(); await tester.pumpWidget( CupertinoApp( home: CupertinoPageScaffold( @@ -91,14 +91,14 @@ void main() { final Rect childRect = tester.getRect(find.byWidget(child)); // When wrapped in a CupertinoContextMenu, the child is rendered in the same Rect. - await tester.pumpWidget(_getContextMenu(child: child)); + await tester.pumpWidget(getContextMenu(child: child)); expect(find.byWidget(child), findsOneWidget); expect(tester.getRect(find.byWidget(child)), childRect); }); testWidgets('Can open CupertinoContextMenu by tap and hold', (WidgetTester tester) async { - final Widget child = _getChild(); - await tester.pumpWidget(_getContextMenu(child: child)); + final Widget child = getChild(); + await tester.pumpWidget(getContextMenu(child: child)); expect(find.byWidget(child), findsOneWidget); final Rect childRect = tester.getRect(find.byWidget(child)); expect(find.byType(ShaderMask), findsNothing); @@ -108,20 +108,20 @@ void main() { await tester.pump(); // The _DecoyChild is showing directly on top of the child. - expect(_findDecoyChild(child), findsOneWidget); - Rect decoyChildRect = tester.getRect(_findDecoyChild(child)); + expect(findDecoyChild(child), findsOneWidget); + Rect decoyChildRect = tester.getRect(findDecoyChild(child)); expect(childRect, equals(decoyChildRect)); expect(find.byType(ShaderMask), findsOneWidget); // After a small delay, the _DecoyChild has begun to animate. await tester.pump(const Duration(milliseconds: 100)); - decoyChildRect = tester.getRect(_findDecoyChild(child)); + decoyChildRect = tester.getRect(findDecoyChild(child)); expect(childRect, isNot(equals(decoyChildRect))); // Eventually the decoy fully scales by _kOpenSize. await tester.pump(const Duration(milliseconds: 500)); - decoyChildRect = tester.getRect(_findDecoyChild(child)); + decoyChildRect = tester.getRect(findDecoyChild(child)); expect(childRect, isNot(equals(decoyChildRect))); expect(decoyChildRect.width, childRect.width * kOpenScale); @@ -129,11 +129,11 @@ void main() { await tester.pumpAndSettle(); await gesture.up(); await tester.pumpAndSettle(); - expect(_findStatic(), findsOneWidget); + expect(findStatic(), findsOneWidget); }); testWidgets('CupertinoContextMenu is in the correct position when within a nested navigator', (WidgetTester tester) async { - final Widget child = _getChild(); + final Widget child = getChild(); await tester.pumpWidget(CupertinoApp( home: CupertinoPageScaffold( child: MediaQuery( @@ -173,20 +173,20 @@ void main() { await tester.pump(); // The _DecoyChild is showing directly on top of the child. - expect(_findDecoyChild(child), findsOneWidget); - Rect decoyChildRect = tester.getRect(_findDecoyChild(child)); + expect(findDecoyChild(child), findsOneWidget); + Rect decoyChildRect = tester.getRect(findDecoyChild(child)); expect(childRect, equals(decoyChildRect)); expect(find.byType(ShaderMask), findsOneWidget); // After a small delay, the _DecoyChild has begun to animate. await tester.pump(const Duration(milliseconds: 100)); - decoyChildRect = tester.getRect(_findDecoyChild(child)); + decoyChildRect = tester.getRect(findDecoyChild(child)); expect(childRect, isNot(equals(decoyChildRect))); // Eventually the decoy fully scales by _kOpenSize. await tester.pump(const Duration(milliseconds: 500)); - decoyChildRect = tester.getRect(_findDecoyChild(child)); + decoyChildRect = tester.getRect(findDecoyChild(child)); expect(childRect, isNot(equals(decoyChildRect))); expect(decoyChildRect.width, childRect.width * kOpenScale); @@ -194,11 +194,11 @@ void main() { await tester.pumpAndSettle(); await gesture.up(); await tester.pumpAndSettle(); - expect(_findStatic(), findsOneWidget); + expect(findStatic(), findsOneWidget); }); testWidgets('Hovering over Cupertino context menu updates cursor to clickable on Web', (WidgetTester tester) async { - final Widget child = _getChild(); + final Widget child = getChild(); await tester.pumpWidget(CupertinoApp( home: CupertinoPageScaffold( child: Center( @@ -232,7 +232,7 @@ void main() { group('CupertinoContextMenu when open', () { testWidgets('Last action does not have border', (WidgetTester tester) async { - final Widget child = _getChild(); + final Widget child = getChild(); await tester.pumpWidget(CupertinoApp( home: CupertinoPageScaffold( child: Center( @@ -253,14 +253,14 @@ void main() { await tester.pumpAndSettle(); await firstGesture.up(); await tester.pumpAndSettle(); - expect(_findStatic(), findsOneWidget); + expect(findStatic(), findsOneWidget); - expect(_findStaticChildDecoration(tester), findsNWidgets(1)); + expect(findStaticChildDecoration(tester), findsNWidgets(1)); // Close the CupertinoContextMenu. await tester.tapAt(const Offset(1.0, 1.0)); await tester.pumpAndSettle(); - expect(_findStatic(), findsNothing); + expect(findStatic(), findsNothing); await tester.pumpWidget(CupertinoApp( home: CupertinoPageScaffold( @@ -285,14 +285,14 @@ void main() { await tester.pumpAndSettle(); await secondGesture.up(); await tester.pumpAndSettle(); - expect(_findStatic(), findsOneWidget); + expect(findStatic(), findsOneWidget); - expect(_findStaticChildDecoration(tester), findsNWidgets(3)); + expect(findStaticChildDecoration(tester), findsNWidgets(3)); }); testWidgets('Can close CupertinoContextMenu by background tap', (WidgetTester tester) async { - final Widget child = _getChild(); - await tester.pumpWidget(_getContextMenu(child: child)); + final Widget child = getChild(); + await tester.pumpWidget(getContextMenu(child: child)); // Open the CupertinoContextMenu final Rect childRect = tester.getRect(find.byWidget(child)); @@ -300,17 +300,17 @@ void main() { await tester.pumpAndSettle(); await gesture.up(); await tester.pumpAndSettle(); - expect(_findStatic(), findsOneWidget); + expect(findStatic(), findsOneWidget); // Tap and ensure that the CupertinoContextMenu is closed. await tester.tapAt(const Offset(1.0, 1.0)); await tester.pumpAndSettle(); - expect(_findStatic(), findsNothing); + expect(findStatic(), findsNothing); }); testWidgets('Can close CupertinoContextMenu by dragging down', (WidgetTester tester) async { - final Widget child = _getChild(); - await tester.pumpWidget(_getContextMenu(child: child)); + final Widget child = getChild(); + await tester.pumpWidget(getContextMenu(child: child)); // Open the CupertinoContextMenu final Rect childRect = tester.getRect(find.byWidget(child)); @@ -318,11 +318,11 @@ void main() { await tester.pumpAndSettle(); await gesture.up(); await tester.pumpAndSettle(); - expect(_findStatic(), findsOneWidget); + expect(findStatic(), findsOneWidget); // Drag down not far enough and it bounces back and doesn't close. - expect(_findStaticChild(child), findsOneWidget); - Offset staticChildCenter = tester.getCenter(_findStaticChild(child)); + expect(findStaticChild(child), findsOneWidget); + Offset staticChildCenter = tester.getCenter(findStaticChild(child)); TestGesture swipeGesture = await tester.startGesture(staticChildCenter); await swipeGesture.moveBy( const Offset(0.0, 100.0), @@ -331,14 +331,14 @@ void main() { await tester.pump(); await swipeGesture.up(); await tester.pump(); - expect(tester.getCenter(_findStaticChild(child)).dy, greaterThan(staticChildCenter.dy)); + expect(tester.getCenter(findStaticChild(child)).dy, greaterThan(staticChildCenter.dy)); await tester.pumpAndSettle(); - expect(tester.getCenter(_findStaticChild(child)), equals(staticChildCenter)); - expect(_findStatic(), findsOneWidget); + expect(tester.getCenter(findStaticChild(child)), equals(staticChildCenter)); + expect(findStatic(), findsOneWidget); // Drag down far enough and it does close. - expect(_findStaticChild(child), findsOneWidget); - staticChildCenter = tester.getCenter(_findStaticChild(child)); + expect(findStaticChild(child), findsOneWidget); + staticChildCenter = tester.getCenter(findStaticChild(child)); swipeGesture = await tester.startGesture(staticChildCenter); await swipeGesture.moveBy( const Offset(0.0, 200.0), @@ -347,12 +347,12 @@ void main() { await tester.pump(); await swipeGesture.up(); await tester.pumpAndSettle(); - expect(_findStatic(), findsNothing); + expect(findStatic(), findsNothing); }); testWidgets('Can close CupertinoContextMenu by flinging down', (WidgetTester tester) async { - final Widget child = _getChild(); - await tester.pumpWidget(_getContextMenu(child: child)); + final Widget child = getChild(); + await tester.pumpWidget(getContextMenu(child: child)); // Open the CupertinoContextMenu final Rect childRect = tester.getRect(find.byWidget(child)); @@ -360,24 +360,24 @@ void main() { await tester.pumpAndSettle(); await gesture.up(); await tester.pumpAndSettle(); - expect(_findStatic(), findsOneWidget); + expect(findStatic(), findsOneWidget); // Fling up and nothing happens. - expect(_findStaticChild(child), findsOneWidget); - await tester.fling(_findStaticChild(child), const Offset(0.0, -100.0), 1000.0); + expect(findStaticChild(child), findsOneWidget); + await tester.fling(findStaticChild(child), const Offset(0.0, -100.0), 1000.0); await tester.pumpAndSettle(); - expect(_findStaticChild(child), findsOneWidget); + expect(findStaticChild(child), findsOneWidget); // Fling down to close the menu. - expect(_findStaticChild(child), findsOneWidget); - await tester.fling(_findStaticChild(child), const Offset(0.0, 100.0), 1000.0); + expect(findStaticChild(child), findsOneWidget); + await tester.fling(findStaticChild(child), const Offset(0.0, 100.0), 1000.0); await tester.pumpAndSettle(); - expect(_findStatic(), findsNothing); + expect(findStatic(), findsNothing); }); testWidgets("Backdrop is added using ModalRoute's filter parameter", (WidgetTester tester) async { - final Widget child = _getChild(); - await tester.pumpWidget(_getContextMenu(child: child)); + final Widget child = getChild(); + await tester.pumpWidget(getContextMenu(child: child)); expect(find.byType(BackdropFilter), findsNothing); // Open the CupertinoContextMenu @@ -386,7 +386,7 @@ void main() { await tester.pumpAndSettle(); await gesture.up(); await tester.pumpAndSettle(); - expect(_findStatic(), findsOneWidget); + expect(findStatic(), findsOneWidget); expect(find.byType(BackdropFilter), findsOneWidget); }); }); @@ -397,8 +397,8 @@ void main() { await binding.setSurfaceSize(portraitScreenSize); // Pump a CupertinoContextMenu in the center of the screen and open it. - final Widget child = _getChild(); - await tester.pumpWidget(_getContextMenu( + final Widget child = getChild(); + await tester.pumpWidget(getContextMenu( screenSize: portraitScreenSize, child: child, )); @@ -416,10 +416,10 @@ void main() { // Close the CupertinoContextMenu. await tester.tapAt(const Offset(1.0, 1.0)); await tester.pumpAndSettle(); - expect(_findStatic(), findsNothing); + expect(findStatic(), findsNothing); // Pump a CupertinoContextMenu on the left of the screen and open it. - await tester.pumpWidget(_getContextMenu( + await tester.pumpWidget(getContextMenu( alignment: Alignment.centerLeft, screenSize: portraitScreenSize, child: child, @@ -440,10 +440,10 @@ void main() { // Close the CupertinoContextMenu. await tester.tapAt(const Offset(1.0, 1.0)); await tester.pumpAndSettle(); - expect(_findStatic(), findsNothing); + expect(findStatic(), findsNothing); // Pump a CupertinoContextMenu on the right of the screen and open it. - await tester.pumpWidget(_getContextMenu( + await tester.pumpWidget(getContextMenu( alignment: Alignment.centerRight, screenSize: portraitScreenSize, child: child, @@ -466,8 +466,8 @@ void main() { testWidgets('Landscape', (WidgetTester tester) async { // Pump a CupertinoContextMenu in the center of the screen and open it. - final Widget child = _getChild(); - await tester.pumpWidget(_getContextMenu( + final Widget child = getChild(); + await tester.pumpWidget(getContextMenu( child: child, )); expect(find.byType(CupertinoContextMenuAction), findsNothing); @@ -485,10 +485,10 @@ void main() { // Close the CupertinoContextMenu. await tester.tapAt(const Offset(1.0, 1.0)); await tester.pumpAndSettle(); - expect(_findStatic(), findsNothing); + expect(findStatic(), findsNothing); // Pump a CupertinoContextMenu on the left of the screen and open it. - await tester.pumpWidget(_getContextMenu( + await tester.pumpWidget(getContextMenu( alignment: Alignment.centerLeft, child: child, )); @@ -508,10 +508,10 @@ void main() { // Close the CupertinoContextMenu. await tester.tapAt(const Offset(1.0, 1.0)); await tester.pumpAndSettle(); - expect(_findStatic(), findsNothing); + expect(findStatic(), findsNothing); // Pump a CupertinoContextMenu on the right of the screen and open it. - await tester.pumpWidget(_getContextMenu( + await tester.pumpWidget(getContextMenu( alignment: Alignment.centerRight, child: child, )); diff --git a/packages/flutter/test/cupertino/date_picker_test.dart b/packages/flutter/test/cupertino/date_picker_test.dart index 2822e7d575e46..4c2808389f073 100644 --- a/packages/flutter/test/cupertino/date_picker_test.dart +++ b/packages/flutter/test/cupertino/date_picker_test.dart @@ -1173,7 +1173,7 @@ void main() { }); testWidgets('DatePicker golden tests', (WidgetTester tester) async { - Widget _buildApp(CupertinoDatePickerMode mode) { + Widget buildApp(CupertinoDatePickerMode mode) { return CupertinoApp( home: Center( child: SizedBox( @@ -1192,19 +1192,19 @@ void main() { ); } - await tester.pumpWidget(_buildApp(CupertinoDatePickerMode.time)); + await tester.pumpWidget(buildApp(CupertinoDatePickerMode.time)); await expectLater( find.byType(CupertinoDatePicker), matchesGoldenFile('date_picker_test.time.initial.png'), ); - await tester.pumpWidget(_buildApp(CupertinoDatePickerMode.date)); + await tester.pumpWidget(buildApp(CupertinoDatePickerMode.date)); await expectLater( find.byType(CupertinoDatePicker), matchesGoldenFile('date_picker_test.date.initial.png'), ); - await tester.pumpWidget(_buildApp(CupertinoDatePickerMode.dateAndTime)); + await tester.pumpWidget(buildApp(CupertinoDatePickerMode.dateAndTime)); await expectLater( find.byType(CupertinoDatePicker), matchesGoldenFile('date_picker_test.datetime.initial.png'), diff --git a/packages/flutter/test/cupertino/slider_test.dart b/packages/flutter/test/cupertino/slider_test.dart index 6b763fc0e2256..ef24940eb3ab3 100644 --- a/packages/flutter/test/cupertino/slider_test.dart +++ b/packages/flutter/test/cupertino/slider_test.dart @@ -24,7 +24,7 @@ const CupertinoDynamicColor _kSystemFill = CupertinoDynamicColor( void main() { - Future _dragSlider(WidgetTester tester, Key sliderKey) { + Future dragSlider(WidgetTester tester, Key sliderKey) { final Offset topLeft = tester.getTopLeft(find.byKey(sliderKey)); const double unit = CupertinoThumbPainter.radius; const double delta = 3.0 * unit; @@ -134,7 +134,7 @@ void main() { ), ); - await _dragSlider(tester, sliderKey); + await dragSlider(tester, sliderKey); expect(numberOfTimesOnChangeStartIsCalled, equals(1)); @@ -175,7 +175,7 @@ void main() { ), ); - await _dragSlider(tester, sliderKey); + await dragSlider(tester, sliderKey); expect(numberOfTimesOnChangeEndIsCalled, equals(1)); diff --git a/packages/flutter/test/cupertino/text_selection_toolbar_test.dart b/packages/flutter/test/cupertino/text_selection_toolbar_test.dart index 9cc000e3f166c..82f30e241e9fa 100644 --- a/packages/flutter/test/cupertino/text_selection_toolbar_test.dart +++ b/packages/flutter/test/cupertino/text_selection_toolbar_test.dart @@ -65,7 +65,7 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized(); // Find by a runtimeType String, including private types. - Finder _findPrivate(String type) { + Finder findPrivate(String type) { return find.descendant( of: find.byType(CupertinoApp), matching: find.byWidgetPredicate((Widget w) => '${w.runtimeType}' == type), @@ -75,10 +75,10 @@ void main() { // Finding CupertinoTextSelectionToolbar won't give you the position as the user sees // it because it's a full-sized Stack at the top level. This method finds the // visible part of the toolbar for use in measurements. - Finder _findToolbar() => _findPrivate('_CupertinoTextSelectionToolbarContent'); + Finder findToolbar() => findPrivate('_CupertinoTextSelectionToolbarContent'); - Finder _findOverflowNextButton() => find.text('▶'); - Finder _findOverflowBackButton() => find.text('◀'); + Finder findOverflowNextButton() => find.text('▶'); + Finder findOverflowBackButton() => find.text('◀'); testWidgets('paginates children if they overflow', (WidgetTester tester) async { late StateSetter setState; @@ -102,8 +102,8 @@ void main() { // All children fit on the screen, so they are all rendered. expect(find.byType(TestBox), findsNWidgets(children.length)); - expect(_findOverflowNextButton(), findsNothing); - expect(_findOverflowBackButton(), findsNothing); + expect(findOverflowNextButton(), findsNothing); + expect(findOverflowBackButton(), findsNothing); // Adding one more child makes the children overflow. setState(() { @@ -113,30 +113,30 @@ void main() { }); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(children.length - 1)); - expect(_findOverflowNextButton(), findsOneWidget); - expect(_findOverflowBackButton(), findsNothing); + expect(findOverflowNextButton(), findsOneWidget); + expect(findOverflowBackButton(), findsNothing); // Tap the overflow next button to show the next page of children. - await tester.tap(_findOverflowNextButton()); + await tester.tap(findOverflowNextButton()); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(1)); - expect(_findOverflowNextButton(), findsOneWidget); - expect(_findOverflowBackButton(), findsOneWidget); + expect(findOverflowNextButton(), findsOneWidget); + expect(findOverflowBackButton(), findsOneWidget); // Tapping the overflow next button again does nothing because it is // disabled and there are no more children to display. - await tester.tap(_findOverflowNextButton()); + await tester.tap(findOverflowNextButton()); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(1)); - expect(_findOverflowNextButton(), findsOneWidget); - expect(_findOverflowBackButton(), findsOneWidget); + expect(findOverflowNextButton(), findsOneWidget); + expect(findOverflowBackButton(), findsOneWidget); // Tap the overflow back button to go back to the first page. - await tester.tap(_findOverflowBackButton()); + await tester.tap(findOverflowBackButton()); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(7)); - expect(_findOverflowNextButton(), findsOneWidget); - expect(_findOverflowBackButton(), findsNothing); + expect(findOverflowNextButton(), findsOneWidget); + expect(findOverflowBackButton(), findsNothing); // Adding 7 more children overflows onto a third page. setState(() { @@ -149,37 +149,37 @@ void main() { }); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(7)); - expect(_findOverflowNextButton(), findsOneWidget); - expect(_findOverflowBackButton(), findsNothing); + expect(findOverflowNextButton(), findsOneWidget); + expect(findOverflowBackButton(), findsNothing); // Tap the overflow next button to show the second page of children. - await tester.tap(_findOverflowNextButton()); + await tester.tap(findOverflowNextButton()); await tester.pumpAndSettle(); // With the back button, only six children fit on this page. expect(find.byType(TestBox), findsNWidgets(6)); - expect(_findOverflowNextButton(), findsOneWidget); - expect(_findOverflowBackButton(), findsOneWidget); + expect(findOverflowNextButton(), findsOneWidget); + expect(findOverflowBackButton(), findsOneWidget); // Tap the overflow next button again to show the third page of children. - await tester.tap(_findOverflowNextButton()); + await tester.tap(findOverflowNextButton()); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(1)); - expect(_findOverflowNextButton(), findsOneWidget); - expect(_findOverflowBackButton(), findsOneWidget); + expect(findOverflowNextButton(), findsOneWidget); + expect(findOverflowBackButton(), findsOneWidget); // Tap the overflow back button to go back to the second page. - await tester.tap(_findOverflowBackButton()); + await tester.tap(findOverflowBackButton()); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(6)); - expect(_findOverflowNextButton(), findsOneWidget); - expect(_findOverflowBackButton(), findsOneWidget); + expect(findOverflowNextButton(), findsOneWidget); + expect(findOverflowBackButton(), findsOneWidget); // Tap the overflow back button to go back to the first page. - await tester.tap(_findOverflowBackButton()); + await tester.tap(findOverflowBackButton()); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(7)); - expect(_findOverflowNextButton(), findsOneWidget); - expect(_findOverflowBackButton(), findsNothing); + expect(findOverflowNextButton(), findsOneWidget); + expect(findOverflowBackButton(), findsNothing); }, skip: kIsWeb); // [intended] We do not use Flutter-rendered context menu on the Web. testWidgets('positions itself at anchorAbove if it fits', (WidgetTester tester) async { @@ -211,7 +211,7 @@ void main() { // When the toolbar doesn't fit above aboveAnchor, it positions itself below // belowAnchor. - double toolbarY = tester.getTopLeft(_findToolbar()).dy; + double toolbarY = tester.getTopLeft(findToolbar()).dy; expect(toolbarY, equals(anchorBelowY + _kToolbarContentDistance)); // Even when it barely doesn't fit. @@ -219,7 +219,7 @@ void main() { anchorAboveY = 50.0; }); await tester.pump(); - toolbarY = tester.getTopLeft(_findToolbar()).dy; + toolbarY = tester.getTopLeft(findToolbar()).dy; expect(toolbarY, equals(anchorBelowY + _kToolbarContentDistance)); // When it does fit above aboveAnchor, it positions itself there. @@ -227,7 +227,7 @@ void main() { anchorAboveY = 60.0; }); await tester.pump(); - toolbarY = tester.getTopLeft(_findToolbar()).dy; + toolbarY = tester.getTopLeft(findToolbar()).dy; expect(toolbarY, equals(anchorAboveY - height - _kToolbarContentDistance)); }, skip: kIsWeb); // [intended] We do not use Flutter-rendered context menu on the Web. diff --git a/packages/flutter/test/gestures/resampler_test.dart b/packages/flutter/test/gestures/resampler_test.dart index 673b34291e03f..c138d121e75ad 100644 --- a/packages/flutter/test/gestures/resampler_test.dart +++ b/packages/flutter/test/gestures/resampler_test.dart @@ -6,7 +6,7 @@ import 'package:flutter/gestures.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { - PointerEvent _createSimulatedPointerAddedEvent( + PointerEvent createSimulatedPointerAddedEvent( int timeStampUs, double x, double y, @@ -17,7 +17,7 @@ void main() { ); } - PointerEvent _createSimulatedPointerRemovedEvent( + PointerEvent createSimulatedPointerRemovedEvent( int timeStampUs, double x, double y, @@ -28,7 +28,7 @@ void main() { ); } - PointerEvent _createSimulatedPointerDownEvent( + PointerEvent createSimulatedPointerDownEvent( int timeStampUs, double x, double y, @@ -39,7 +39,7 @@ void main() { ); } - PointerEvent _createSimulatedPointerMoveEvent( + PointerEvent createSimulatedPointerMoveEvent( int timeStampUs, double x, double y, @@ -53,7 +53,7 @@ void main() { ); } - PointerEvent _createSimulatedPointerHoverEvent( + PointerEvent createSimulatedPointerHoverEvent( int timeStampUs, double x, double y, @@ -67,7 +67,7 @@ void main() { ); } - PointerEvent _createSimulatedPointerUpEvent( + PointerEvent createSimulatedPointerUpEvent( int timeStampUs, double x, double y, @@ -80,15 +80,15 @@ void main() { test('basic', () { final PointerEventResampler resampler = PointerEventResampler(); - final PointerEvent event0 = _createSimulatedPointerAddedEvent(1000, 0.0, 50.0); - final PointerEvent event1 = _createSimulatedPointerHoverEvent(2000, 10.0, 40.0, 10.0, -10.0); - final PointerEvent event2 = _createSimulatedPointerDownEvent(2000, 10.0, 40.0); - final PointerEvent event3 = _createSimulatedPointerMoveEvent(3000, 20.0, 30.0, 10.0, -10.0); - final PointerEvent event4 = _createSimulatedPointerMoveEvent(4000, 30.0, 20.0, 10.0, -10.0); - final PointerEvent event5 = _createSimulatedPointerUpEvent(4000, 30.0, 20.0); - final PointerEvent event6 = _createSimulatedPointerHoverEvent(5000, 40.0, 10.0, 10.0, -10.0); - final PointerEvent event7 = _createSimulatedPointerHoverEvent(6000, 50.0, 0.0, 10.0, -10.0); - final PointerEvent event8 = _createSimulatedPointerRemovedEvent(6000, 50.0, 0.0); + final PointerEvent event0 = createSimulatedPointerAddedEvent(1000, 0.0, 50.0); + final PointerEvent event1 = createSimulatedPointerHoverEvent(2000, 10.0, 40.0, 10.0, -10.0); + final PointerEvent event2 = createSimulatedPointerDownEvent(2000, 10.0, 40.0); + final PointerEvent event3 = createSimulatedPointerMoveEvent(3000, 20.0, 30.0, 10.0, -10.0); + final PointerEvent event4 = createSimulatedPointerMoveEvent(4000, 30.0, 20.0, 10.0, -10.0); + final PointerEvent event5 = createSimulatedPointerUpEvent(4000, 30.0, 20.0); + final PointerEvent event6 = createSimulatedPointerHoverEvent(5000, 40.0, 10.0, 10.0, -10.0); + final PointerEvent event7 = createSimulatedPointerHoverEvent(6000, 50.0, 0.0, 10.0, -10.0); + final PointerEvent event8 = createSimulatedPointerRemovedEvent(6000, 50.0, 0.0); resampler ..addEvent(event0) @@ -194,15 +194,15 @@ void main() { test('stream', () { final PointerEventResampler resampler = PointerEventResampler(); - final PointerEvent event0 = _createSimulatedPointerAddedEvent(1000, 0.0, 50.0); - final PointerEvent event1 = _createSimulatedPointerHoverEvent(2000, 10.0, 40.0, 10.0, -10.0); - final PointerEvent event2 = _createSimulatedPointerDownEvent(2000, 10.0, 40.0); - final PointerEvent event3 = _createSimulatedPointerMoveEvent(3000, 20.0, 30.0, 10.0, -10.0); - final PointerEvent event4 = _createSimulatedPointerMoveEvent(4000, 30.0, 20.0, 10.0, -10.0); - final PointerEvent event5 = _createSimulatedPointerUpEvent(4000, 30.0, 20.0); - final PointerEvent event6 = _createSimulatedPointerHoverEvent(5000, 40.0, 10.0, 10.0, -10.0); - final PointerEvent event7 = _createSimulatedPointerHoverEvent(6000, 50.0, 0.0, 10.0, -10.0); - final PointerEvent event8 = _createSimulatedPointerRemovedEvent(6000, 50.0, 0.0); + final PointerEvent event0 = createSimulatedPointerAddedEvent(1000, 0.0, 50.0); + final PointerEvent event1 = createSimulatedPointerHoverEvent(2000, 10.0, 40.0, 10.0, -10.0); + final PointerEvent event2 = createSimulatedPointerDownEvent(2000, 10.0, 40.0); + final PointerEvent event3 = createSimulatedPointerMoveEvent(3000, 20.0, 30.0, 10.0, -10.0); + final PointerEvent event4 = createSimulatedPointerMoveEvent(4000, 30.0, 20.0, 10.0, -10.0); + final PointerEvent event5 = createSimulatedPointerUpEvent(4000, 30.0, 20.0); + final PointerEvent event6 = createSimulatedPointerHoverEvent(5000, 40.0, 10.0, 10.0, -10.0); + final PointerEvent event7 = createSimulatedPointerHoverEvent(6000, 50.0, 0.0, 10.0, -10.0); + final PointerEvent event8 = createSimulatedPointerRemovedEvent(6000, 50.0, 0.0); resampler.addEvent(event0); @@ -370,10 +370,10 @@ void main() { test('quick tap', () { final PointerEventResampler resampler = PointerEventResampler(); - final PointerEvent event0 = _createSimulatedPointerAddedEvent(1000, 0.0, 0.0); - final PointerEvent event1 = _createSimulatedPointerDownEvent(1000, 0.0, 0.0); - final PointerEvent event2 = _createSimulatedPointerUpEvent(1000, 0.0, 0.0); - final PointerEvent event3 = _createSimulatedPointerRemovedEvent(1000, 0.0, 0.0); + final PointerEvent event0 = createSimulatedPointerAddedEvent(1000, 0.0, 0.0); + final PointerEvent event1 = createSimulatedPointerDownEvent(1000, 0.0, 0.0); + final PointerEvent event2 = createSimulatedPointerUpEvent(1000, 0.0, 0.0); + final PointerEvent event3 = createSimulatedPointerRemovedEvent(1000, 0.0, 0.0); resampler ..addEvent(event0) @@ -407,12 +407,12 @@ void main() { test('advance slowly', () { final PointerEventResampler resampler = PointerEventResampler(); - final PointerEvent event0 = _createSimulatedPointerAddedEvent(1000, 0.0, 0.0); - final PointerEvent event1 = _createSimulatedPointerDownEvent(1000, 0.0, 0.0); - final PointerEvent event2 = _createSimulatedPointerMoveEvent(2000, 10.0, 0.0, 10.0, 0.0); - final PointerEvent event3 = _createSimulatedPointerMoveEvent(3000, 20.0, 0.0, 10.0, 0.0); - final PointerEvent event4 = _createSimulatedPointerUpEvent(3000, 20.0, 0.0); - final PointerEvent event5 = _createSimulatedPointerRemovedEvent(3000, 20.0, 0.0); + final PointerEvent event0 = createSimulatedPointerAddedEvent(1000, 0.0, 0.0); + final PointerEvent event1 = createSimulatedPointerDownEvent(1000, 0.0, 0.0); + final PointerEvent event2 = createSimulatedPointerMoveEvent(2000, 10.0, 0.0, 10.0, 0.0); + final PointerEvent event3 = createSimulatedPointerMoveEvent(3000, 20.0, 0.0, 10.0, 0.0); + final PointerEvent event4 = createSimulatedPointerUpEvent(3000, 20.0, 0.0); + final PointerEvent event5 = createSimulatedPointerRemovedEvent(3000, 20.0, 0.0); resampler ..addEvent(event0) @@ -486,12 +486,12 @@ void main() { test('advance fast', () { final PointerEventResampler resampler = PointerEventResampler(); - final PointerEvent event0 = _createSimulatedPointerAddedEvent(1000, 0.0, 0.0); - final PointerEvent event1 = _createSimulatedPointerDownEvent(1000, 0.0, 0.0); - final PointerEvent event2 = _createSimulatedPointerMoveEvent(2000, 5.0, 0.0, 5.0, 0.0); - final PointerEvent event3 = _createSimulatedPointerMoveEvent(3000, 20.0, 0.0, 15.0, 0.0); - final PointerEvent event4 = _createSimulatedPointerUpEvent(4000, 30.0, 0.0); - final PointerEvent event5 = _createSimulatedPointerRemovedEvent(4000, 30.0, 0.0); + final PointerEvent event0 = createSimulatedPointerAddedEvent(1000, 0.0, 0.0); + final PointerEvent event1 = createSimulatedPointerDownEvent(1000, 0.0, 0.0); + final PointerEvent event2 = createSimulatedPointerMoveEvent(2000, 5.0, 0.0, 5.0, 0.0); + final PointerEvent event3 = createSimulatedPointerMoveEvent(3000, 20.0, 0.0, 15.0, 0.0); + final PointerEvent event4 = createSimulatedPointerUpEvent(4000, 30.0, 0.0); + final PointerEvent event5 = createSimulatedPointerRemovedEvent(4000, 30.0, 0.0); resampler ..addEvent(event0) @@ -543,15 +543,15 @@ void main() { test('skip', () { final PointerEventResampler resampler = PointerEventResampler(); - final PointerEvent event0 = _createSimulatedPointerAddedEvent(1000, 0.0, 0.0); - final PointerEvent event1 = _createSimulatedPointerDownEvent(1000, 0.0, 0.0); - final PointerEvent event2 = _createSimulatedPointerMoveEvent(2000, 10.0, 0.0, 10.0, 0.0); - final PointerEvent event3 = _createSimulatedPointerUpEvent(3000, 10.0, 0.0); - final PointerEvent event4 = _createSimulatedPointerHoverEvent(4000, 20.0, 0.0, 10.0, 0.0); - final PointerEvent event5 = _createSimulatedPointerDownEvent(4000, 20.0, 0.0); - final PointerEvent event6 = _createSimulatedPointerMoveEvent(5000, 30.0, 0.0, 10.0, 0.0); - final PointerEvent event7 = _createSimulatedPointerUpEvent(5000, 30.0, 0.0); - final PointerEvent event8 = _createSimulatedPointerRemovedEvent(5000, 30.0, 0.0); + final PointerEvent event0 = createSimulatedPointerAddedEvent(1000, 0.0, 0.0); + final PointerEvent event1 = createSimulatedPointerDownEvent(1000, 0.0, 0.0); + final PointerEvent event2 = createSimulatedPointerMoveEvent(2000, 10.0, 0.0, 10.0, 0.0); + final PointerEvent event3 = createSimulatedPointerUpEvent(3000, 10.0, 0.0); + final PointerEvent event4 = createSimulatedPointerHoverEvent(4000, 20.0, 0.0, 10.0, 0.0); + final PointerEvent event5 = createSimulatedPointerDownEvent(4000, 20.0, 0.0); + final PointerEvent event6 = createSimulatedPointerMoveEvent(5000, 30.0, 0.0, 10.0, 0.0); + final PointerEvent event7 = createSimulatedPointerUpEvent(5000, 30.0, 0.0); + final PointerEvent event8 = createSimulatedPointerRemovedEvent(5000, 30.0, 0.0); resampler ..addEvent(event0) @@ -614,11 +614,11 @@ void main() { test('skip all', () { final PointerEventResampler resampler = PointerEventResampler(); - final PointerEvent event0 = _createSimulatedPointerAddedEvent(1000, 0.0, 0.0); - final PointerEvent event1 = _createSimulatedPointerDownEvent(1000, 0.0, 0.0); - final PointerEvent event2 = _createSimulatedPointerMoveEvent(4000, 30.0, 0.0, 30.0, 0.0); - final PointerEvent event3 = _createSimulatedPointerUpEvent(4000, 30.0, 0.0); - final PointerEvent event4 = _createSimulatedPointerRemovedEvent(4000, 30.0, 0.0); + final PointerEvent event0 = createSimulatedPointerAddedEvent(1000, 0.0, 0.0); + final PointerEvent event1 = createSimulatedPointerDownEvent(1000, 0.0, 0.0); + final PointerEvent event2 = createSimulatedPointerMoveEvent(4000, 30.0, 0.0, 30.0, 0.0); + final PointerEvent event3 = createSimulatedPointerUpEvent(4000, 30.0, 0.0); + final PointerEvent event4 = createSimulatedPointerRemovedEvent(4000, 30.0, 0.0); resampler ..addEvent(event0) @@ -663,12 +663,12 @@ void main() { test('stop', () { final PointerEventResampler resampler = PointerEventResampler(); - final PointerEvent event0 = _createSimulatedPointerAddedEvent(1000, 0.0, 0.0); - final PointerEvent event1 = _createSimulatedPointerDownEvent(2000, 0.0, 0.0); - final PointerEvent event2 = _createSimulatedPointerMoveEvent(3000, 10.0, 0.0, 10.0, 0.0); - final PointerEvent event3 = _createSimulatedPointerMoveEvent(4000, 20.0, 0.0, 10.0, 0.0); - final PointerEvent event4 = _createSimulatedPointerUpEvent(4000, 20.0, 0.0); - final PointerEvent event5 = _createSimulatedPointerRemovedEvent(5000, 20.0, 0.0); + final PointerEvent event0 = createSimulatedPointerAddedEvent(1000, 0.0, 0.0); + final PointerEvent event1 = createSimulatedPointerDownEvent(2000, 0.0, 0.0); + final PointerEvent event2 = createSimulatedPointerMoveEvent(3000, 10.0, 0.0, 10.0, 0.0); + final PointerEvent event3 = createSimulatedPointerMoveEvent(4000, 20.0, 0.0, 10.0, 0.0); + final PointerEvent event4 = createSimulatedPointerUpEvent(4000, 20.0, 0.0); + final PointerEvent event5 = createSimulatedPointerRemovedEvent(5000, 20.0, 0.0); resampler ..addEvent(event0) @@ -727,11 +727,11 @@ void main() { test('synthetic move', () { final PointerEventResampler resampler = PointerEventResampler(); - final PointerEvent event0 = _createSimulatedPointerAddedEvent(1000, 0.0, 0.0); - final PointerEvent event1 = _createSimulatedPointerDownEvent(2000, 0.0, 0.0); - final PointerEvent event2 = _createSimulatedPointerMoveEvent(3000, 10.0, 0.0, 10.0, 0.0); - final PointerEvent event3 = _createSimulatedPointerUpEvent(4000, 10.0, 0.0); - final PointerEvent event4 = _createSimulatedPointerRemovedEvent(5000, 10.0, 0.0); + final PointerEvent event0 = createSimulatedPointerAddedEvent(1000, 0.0, 0.0); + final PointerEvent event1 = createSimulatedPointerDownEvent(2000, 0.0, 0.0); + final PointerEvent event2 = createSimulatedPointerMoveEvent(3000, 10.0, 0.0, 10.0, 0.0); + final PointerEvent event3 = createSimulatedPointerUpEvent(4000, 10.0, 0.0); + final PointerEvent event4 = createSimulatedPointerRemovedEvent(5000, 10.0, 0.0); resampler ..addEvent(event0) @@ -788,13 +788,13 @@ void main() { test('next sample time', () { final PointerEventResampler resampler = PointerEventResampler(); - final PointerEvent event0 = _createSimulatedPointerAddedEvent(1000, 0.0, 0.0); - final PointerEvent event1 = _createSimulatedPointerDownEvent(1000, 0.0, 0.0); - final PointerEvent event2 = _createSimulatedPointerMoveEvent(2000, 10.0, 0.0, 10.0, 0.0); - final PointerEvent event3 = _createSimulatedPointerMoveEvent(3000, 20.0, 0.0, 10.0, 0.0); - final PointerEvent event4 = _createSimulatedPointerUpEvent(3000, 20.0, 0.0); - final PointerEvent event5 = _createSimulatedPointerHoverEvent(4000, 30.0, 0.0, 10.0, 0.0); - final PointerEvent event6 = _createSimulatedPointerRemovedEvent(4000, 30.0, 0.0); + final PointerEvent event0 = createSimulatedPointerAddedEvent(1000, 0.0, 0.0); + final PointerEvent event1 = createSimulatedPointerDownEvent(1000, 0.0, 0.0); + final PointerEvent event2 = createSimulatedPointerMoveEvent(2000, 10.0, 0.0, 10.0, 0.0); + final PointerEvent event3 = createSimulatedPointerMoveEvent(3000, 20.0, 0.0, 10.0, 0.0); + final PointerEvent event4 = createSimulatedPointerUpEvent(3000, 20.0, 0.0); + final PointerEvent event5 = createSimulatedPointerHoverEvent(4000, 30.0, 0.0, 10.0, 0.0); + final PointerEvent event6 = createSimulatedPointerRemovedEvent(4000, 30.0, 0.0); resampler ..addEvent(event0) diff --git a/packages/flutter/test/material/app_bar_theme_test.dart b/packages/flutter/test/material/app_bar_theme_test.dart index 171dbe5594136..58c8519ccdb18 100644 --- a/packages/flutter/test/material/app_bar_theme_test.dart +++ b/packages/flutter/test/material/app_bar_theme_test.dart @@ -90,7 +90,7 @@ void main() { foregroundColor: Colors.black, ); - Widget _buildWithBackwardsCompatibility([bool? enabled]) => MaterialApp( + Widget buildWithBackwardsCompatibility([bool? enabled]) => MaterialApp( theme: ThemeData(appBarTheme: appBarTheme), home: Scaffold(body: CustomScrollView( slivers: [ @@ -106,17 +106,17 @@ void main() { ); // Backwards compatibility enabled, AppBar should be built with true. - await tester.pumpWidget(_buildWithBackwardsCompatibility(true)); + await tester.pumpWidget(buildWithBackwardsCompatibility(true)); AppBar appBar = tester.widget(find.byType(AppBar)); expect(appBar.backwardsCompatibility, true); // Backwards compatibility disabled, AppBar should be built with false. - await tester.pumpWidget(_buildWithBackwardsCompatibility(false)); + await tester.pumpWidget(buildWithBackwardsCompatibility(false)); appBar = tester.widget(find.byType(AppBar)); expect(appBar.backwardsCompatibility, false); // Backwards compatibility unspecified, AppBar should be built with null. - await tester.pumpWidget(_buildWithBackwardsCompatibility()); + await tester.pumpWidget(buildWithBackwardsCompatibility()); appBar = tester.widget(find.byType(AppBar)); expect(appBar.backwardsCompatibility, null); diff --git a/packages/flutter/test/material/autocomplete_test.dart b/packages/flutter/test/material/autocomplete_test.dart index 641befef4016d..ab77b522ec67e 100644 --- a/packages/flutter/test/material/autocomplete_test.dart +++ b/packages/flutter/test/material/autocomplete_test.dart @@ -310,7 +310,7 @@ void main() { testWidgets('The height of options shrinks to height of resulting items, if less than maxHeight', (WidgetTester tester) async { // Returns a Future with the height of the default [Autocomplete] options widget // after the provided text had been entered into the [Autocomplete] field. - Future _getDefaultOptionsHeight( + Future getDefaultOptionsHeight( WidgetTester tester, String enteredText) async { final Finder listFinder = find.byType(ListView); final Finder inputFinder = find.byType(TextFormField); @@ -341,17 +341,17 @@ void main() { // Entering `a` returns 9 items(height > `maxOptionsHeight`) from the kOptions // so height gets restricted to `maxOptionsHeight =250`. - final double nineItemsHeight = await _getDefaultOptionsHeight(tester, 'a'); + final double nineItemsHeight = await getDefaultOptionsHeight(tester, 'a'); expect(nineItemsHeight, equals(maxOptionsHeight)); // Returns 2 Items (height < `maxOptionsHeight`) // so options height shrinks to 2 Items combined height. - final double twoItemsHeight = await _getDefaultOptionsHeight(tester, 'el'); + final double twoItemsHeight = await getDefaultOptionsHeight(tester, 'el'); expect(twoItemsHeight, lessThan(maxOptionsHeight)); // Returns 1 item (height < `maxOptionsHeight`) from `kOptions` // so options height shrinks to 1 items height. - final double oneItemsHeight = await _getDefaultOptionsHeight(tester, 'elep'); + final double oneItemsHeight = await getDefaultOptionsHeight(tester, 'elep'); expect(oneItemsHeight, lessThan(twoItemsHeight)); }); diff --git a/packages/flutter/test/material/bottom_sheet_test.dart b/packages/flutter/test/material/bottom_sheet_test.dart index 53011dd979e6c..5b2bd8fcac412 100644 --- a/packages/flutter/test/material/bottom_sheet_test.dart +++ b/packages/flutter/test/material/bottom_sheet_test.dart @@ -12,7 +12,7 @@ import '../widgets/semantics_tester.dart'; void main() { // Pumps and ensures that the BottomSheet animates non-linearly. - Future _checkNonLinearAnimation(WidgetTester tester) async { + Future checkNonLinearAnimation(WidgetTester tester) async { final Offset firstPosition = tester.getCenter(find.text('BottomSheet')); await tester.pump(const Duration(milliseconds: 30)); final Offset secondPosition = tester.getCenter(find.text('BottomSheet')); @@ -360,13 +360,13 @@ void main() { ); await tester.pump(); - await _checkNonLinearAnimation(tester); + await checkNonLinearAnimation(tester); await tester.pumpAndSettle(); // Tap above the bottom sheet to dismiss it. await tester.tapAt(const Offset(20.0, 20.0)); await tester.pump(); - await _checkNonLinearAnimation(tester); + await checkNonLinearAnimation(tester); await tester.pumpAndSettle(); // Bottom sheet dismiss animation. expect(find.text('BottomSheet'), findsNothing); }); diff --git a/packages/flutter/test/material/card_test.dart b/packages/flutter/test/material/card_test.dart index 6eb4823d2b1de..aec9a5a99c031 100644 --- a/packages/flutter/test/material/card_test.dart +++ b/packages/flutter/test/material/card_test.dart @@ -187,7 +187,7 @@ void main() { }); testWidgets('Card shadowColor', (WidgetTester tester) async { - Material _getCardMaterial(WidgetTester tester) { + Material getCardMaterial(WidgetTester tester) { return tester.widget( find.descendant( of: find.byType(Card), @@ -196,7 +196,7 @@ void main() { ); } - Card _getCard(WidgetTester tester) { + Card getCard(WidgetTester tester) { return tester.widget( find.byType(Card), ); @@ -206,8 +206,8 @@ void main() { const Card(), ); - expect(_getCard(tester).shadowColor, null); - expect(_getCardMaterial(tester).shadowColor, const Color(0xFF000000)); + expect(getCard(tester).shadowColor, null); + expect(getCardMaterial(tester).shadowColor, const Color(0xFF000000)); await tester.pumpWidget( const Card( @@ -215,7 +215,7 @@ void main() { ), ); - expect(_getCardMaterial(tester).shadowColor, _getCard(tester).shadowColor); - expect(_getCardMaterial(tester).shadowColor, Colors.red); + expect(getCardMaterial(tester).shadowColor, getCard(tester).shadowColor); + expect(getCardMaterial(tester).shadowColor, Colors.red); }); } diff --git a/packages/flutter/test/material/date_picker_test.dart b/packages/flutter/test/material/date_picker_test.dart index 525148fb82cf7..c508efb60ba4b 100644 --- a/packages/flutter/test/material/date_picker_test.dart +++ b/packages/flutter/test/material/date_picker_test.dart @@ -1086,7 +1086,7 @@ void main() { const Size kSmallScreenSizePortrait = Size(320, 521); const Size kSmallScreenSizeLandscape = Size(521, 320); - Future _showPicker(WidgetTester tester, Size size, [double textScaleFactor = 1.0]) async { + Future showPicker(WidgetTester tester, Size size, [double textScaleFactor = 1.0]) async { tester.binding.window.physicalSizeTestValue = size; addTearDown(tester.binding.window.clearPhysicalSizeTestValue); tester.binding.window.devicePixelRatioTestValue = 1.0; @@ -1098,42 +1098,42 @@ void main() { } testWidgets('common screen size - portrait', (WidgetTester tester) async { - await _showPicker(tester, kCommonScreenSizePortrait); + await showPicker(tester, kCommonScreenSizePortrait); expect(tester.takeException(), isNull); }); testWidgets('common screen size - landscape', (WidgetTester tester) async { - await _showPicker(tester, kCommonScreenSizeLandscape); + await showPicker(tester, kCommonScreenSizeLandscape); expect(tester.takeException(), isNull); }); testWidgets('common screen size - portrait - textScale 1.3', (WidgetTester tester) async { - await _showPicker(tester, kCommonScreenSizePortrait, 1.3); + await showPicker(tester, kCommonScreenSizePortrait, 1.3); expect(tester.takeException(), isNull); }); testWidgets('common screen size - landscape - textScale 1.3', (WidgetTester tester) async { - await _showPicker(tester, kCommonScreenSizeLandscape, 1.3); + await showPicker(tester, kCommonScreenSizeLandscape, 1.3); expect(tester.takeException(), isNull); }); testWidgets('small screen size - portrait', (WidgetTester tester) async { - await _showPicker(tester, kSmallScreenSizePortrait); + await showPicker(tester, kSmallScreenSizePortrait); expect(tester.takeException(), isNull); }); testWidgets('small screen size - landscape', (WidgetTester tester) async { - await _showPicker(tester, kSmallScreenSizeLandscape); + await showPicker(tester, kSmallScreenSizeLandscape); expect(tester.takeException(), isNull); }); testWidgets('small screen size - portrait -textScale 1.3', (WidgetTester tester) async { - await _showPicker(tester, kSmallScreenSizePortrait, 1.3); + await showPicker(tester, kSmallScreenSizePortrait, 1.3); expect(tester.takeException(), isNull); }); testWidgets('small screen size - landscape - textScale 1.3', (WidgetTester tester) async { - await _showPicker(tester, kSmallScreenSizeLandscape, 1.3); + await showPicker(tester, kSmallScreenSizeLandscape, 1.3); expect(tester.takeException(), isNull); }); }); diff --git a/packages/flutter/test/material/date_range_picker_test.dart b/packages/flutter/test/material/date_range_picker_test.dart index be7c138e8e34a..6eed83e280228 100644 --- a/packages/flutter/test/material/date_range_picker_test.dart +++ b/packages/flutter/test/material/date_range_picker_test.dart @@ -796,7 +796,7 @@ void main() { // Given a custom paint for an input decoration, extract the border and // fill color and test them against the expected values. - void _testInputDecorator(CustomPaint decoratorPaint, InputBorder expectedBorder, Color expectedContainerColor) { + void testInputDecorator(CustomPaint decoratorPaint, InputBorder expectedBorder, Color expectedContainerColor) { final dynamic/*_InputBorderPainter*/ inputBorderPainter = decoratorPaint.foregroundPainter; // ignore: avoid_dynamic_calls final dynamic/*_InputBorderTween*/ inputBorderTween = inputBorderPainter.border; @@ -851,10 +851,10 @@ void main() { ); // Test the start date text field - _testInputDecorator(tester.widget(borderContainers.first), border, Colors.transparent); + testInputDecorator(tester.widget(borderContainers.first), border, Colors.transparent); // Test the end date text field - _testInputDecorator(tester.widget(borderContainers.last), border, Colors.transparent); + testInputDecorator(tester.widget(borderContainers.last), border, Colors.transparent); }); }); diff --git a/packages/flutter/test/material/floating_action_button_location_test.dart b/packages/flutter/test/material/floating_action_button_location_test.dart index 8cbf3f1a79712..b1ffb854af4d4 100644 --- a/packages/flutter/test/material/floating_action_button_location_test.dart +++ b/packages/flutter/test/material/floating_action_button_location_test.dart @@ -610,7 +610,7 @@ void main() { }); group('Locations account for safe interactive areas', () { - Widget _buildTest( + Widget buildTest( FloatingActionButtonLocation location, MediaQueryData data, Key key, { @@ -672,7 +672,7 @@ void main() { // - with BottomSheet // - with BottomSheet and resizeToAvoidBottomInset: false // - with SnackBar - Future _runFloatTests( + Future runFloatTests( WidgetTester tester, FloatingActionButtonLocation location, { required Rect defaultRect, @@ -686,7 +686,7 @@ void main() { final Key floatingActionButton = UniqueKey(); const double bottomNavHeight = 106.0; // Default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData(viewPadding: EdgeInsets.only(bottom: viewPadding)), floatingActionButton, @@ -697,7 +697,7 @@ void main() { rectMoreOrLessEquals(defaultRect), ); // Present keyboard and check position, should change - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( viewPadding: EdgeInsets.only(bottom: viewPadding), @@ -716,7 +716,7 @@ void main() { // With resizeToAvoidBottomInset: false // With keyboard presented, should maintain default position - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( viewPadding: EdgeInsets.only(bottom: viewPadding), @@ -732,7 +732,7 @@ void main() { ); // BottomNavigationBar default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -747,7 +747,7 @@ void main() { rectMoreOrLessEquals(bottomNavigationBarRect), ); // Present keyboard and check position, FAB position changes - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -768,7 +768,7 @@ void main() { // BottomNavigationBar with resizeToAvoidBottomInset: false // With keyboard presented, should maintain default position - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -786,7 +786,7 @@ void main() { ); // BottomNavigationBar + BottomSheet default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -805,7 +805,7 @@ void main() { )), ); // Present keyboard and check position, FAB position changes - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -827,7 +827,7 @@ void main() { // BottomNavigationBar + BottomSheet with resizeToAvoidBottomInset: false // With keyboard presented, should maintain default position - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -849,7 +849,7 @@ void main() { ); // BottomSheet default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData(viewPadding: EdgeInsets.only(bottom: viewPadding)), floatingActionButton, @@ -861,7 +861,7 @@ void main() { rectMoreOrLessEquals(bottomSheetRect), ); // Present keyboard and check position, bottomSheet and FAB both resize - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( viewPadding: EdgeInsets.only(bottom: viewPadding), @@ -878,7 +878,7 @@ void main() { // bottomSheet with resizeToAvoidBottomInset: false // With keyboard presented, should maintain default bottomSheet position - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( viewPadding: EdgeInsets.only(bottom: viewPadding), @@ -895,7 +895,7 @@ void main() { ); // SnackBar default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData(viewPadding: EdgeInsets.only(bottom: viewPadding)), floatingActionButton, @@ -909,7 +909,7 @@ void main() { ); // SnackBar when resized for presented keyboard - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( viewPadding: EdgeInsets.only(bottom: viewPadding), @@ -934,7 +934,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(16.0, 472.0, 72.0, 528.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(16.0, 478.0, 72.0, 534.0); - await _runFloatTests( + await runFloatTests( tester, FloatingActionButtonLocation.startFloat, defaultRect: defaultRect, @@ -952,7 +952,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(12.0, 480.0, 60.0, 528.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(12.0, 490.0, 60.0, 538.0); - await _runFloatTests( + await runFloatTests( tester, FloatingActionButtonLocation.miniStartFloat, defaultRect: defaultRect, @@ -971,7 +971,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(372.0, 472.0, 428.0, 528.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(372.0, 478.0, 428.0, 534.0); - await _runFloatTests( + await runFloatTests( tester, FloatingActionButtonLocation.centerFloat, defaultRect: defaultRect, @@ -989,7 +989,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(376.0, 480.0, 424.0, 528.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(376.0, 490.0, 424.0, 538.0); - await _runFloatTests( + await runFloatTests( tester, FloatingActionButtonLocation.miniCenterFloat, defaultRect: defaultRect, @@ -1008,7 +1008,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(728.0, 472.0, 784.0, 528.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(728.0, 478.0, 784.0, 534.0); - await _runFloatTests( + await runFloatTests( tester, FloatingActionButtonLocation.endFloat, defaultRect: defaultRect, @@ -1026,7 +1026,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(740.0, 480.0, 788.0, 528.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(740.0, 490.0, 788.0, 538.0); - await _runFloatTests( + await runFloatTests( tester, FloatingActionButtonLocation.miniEndFloat, defaultRect: defaultRect, @@ -1047,7 +1047,7 @@ void main() { // - docked with BottomNavigationBar & BottomSheet // - docked with BottomNavigationBar & BottomSheet, resizeToAvoidBottomInset: false // - with SnackBar - Future _runDockedTests( + Future runDockedTests( WidgetTester tester, FloatingActionButtonLocation location, { required Rect defaultRect, @@ -1063,7 +1063,7 @@ void main() { final Key floatingActionButton = UniqueKey(); final double fabHeight = mini ? 48.0 : 56.0; // Default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData(viewPadding: EdgeInsets.only(bottom: viewPadding)), floatingActionButton, @@ -1074,7 +1074,7 @@ void main() { rectMoreOrLessEquals(defaultRect), ); // Present keyboard and check position, should change - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( viewPadding: EdgeInsets.only(bottom: viewPadding), @@ -1098,7 +1098,7 @@ void main() { // With resizeToAvoidBottomInset: false // With keyboard presented, should maintain default position - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( viewPadding: EdgeInsets.only(bottom: viewPadding), @@ -1114,7 +1114,7 @@ void main() { ); // BottomNavigationBar default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -1129,7 +1129,7 @@ void main() { rectMoreOrLessEquals(bottomNavigationBarRect), ); // Present keyboard and check position, FAB position changes - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -1155,7 +1155,7 @@ void main() { // BottomNavigationBar with resizeToAvoidBottomInset: false // With keyboard presented, should maintain default position - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -1173,7 +1173,7 @@ void main() { ); // BottomNavigationBar + BottomSheet default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -1189,7 +1189,7 @@ void main() { rectMoreOrLessEquals(bottomSheetRect), ); // Present keyboard and check position, FAB position changes - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -1216,7 +1216,7 @@ void main() { // BottomNavigationBar + BottomSheet with resizeToAvoidBottomInset: false // With keyboard presented, should maintain default position - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -1235,7 +1235,7 @@ void main() { ); // SnackBar default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData(viewPadding: EdgeInsets.only(bottom: viewPadding)), floatingActionButton, @@ -1249,7 +1249,7 @@ void main() { ); // SnackBar with BottomNavigationBar - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( padding: EdgeInsets.only(bottom: viewPadding), @@ -1267,7 +1267,7 @@ void main() { ); // SnackBar when resized for presented keyboard - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData( viewPadding: EdgeInsets.only(bottom: viewPadding), @@ -1297,7 +1297,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(16.0, 366.0, 72.0, 422.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(16.0, 486.0, 72.0, 542.0); - await _runDockedTests( + await runDockedTests( tester, FloatingActionButtonLocation.startDocked, defaultRect: defaultRect, @@ -1315,7 +1315,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(12.0, 370.0, 60.0, 418.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(12.0, 494.0, 60.0, 542.0); - await _runDockedTests( + await runDockedTests( tester, FloatingActionButtonLocation.miniStartDocked, defaultRect: defaultRect, @@ -1334,7 +1334,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(372.0, 366.0, 428.0, 422.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(372.0, 486.0, 428.0, 542.0); - await _runDockedTests( + await runDockedTests( tester, FloatingActionButtonLocation.centerDocked, defaultRect: defaultRect, @@ -1352,7 +1352,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(376.0, 370.0, 424.0, 418.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(376.0, 494.0, 424.0, 542.0); - await _runDockedTests( + await runDockedTests( tester, FloatingActionButtonLocation.miniCenterDocked, defaultRect: defaultRect, @@ -1371,7 +1371,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(728.0, 366.0, 784.0, 422.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(728.0, 486.0, 784.0, 542.0); - await _runDockedTests( + await runDockedTests( tester, FloatingActionButtonLocation.endDocked, defaultRect: defaultRect, @@ -1389,7 +1389,7 @@ void main() { const Rect bottomSheetRect = Rect.fromLTRB(740.0, 370.0, 788.0, 418.0); // Positioned relative to SnackBar const Rect snackBarRect = Rect.fromLTRB(740.0, 494.0, 788.0, 542.0); - await _runDockedTests( + await runDockedTests( tester, FloatingActionButtonLocation.miniEndDocked, defaultRect: defaultRect, @@ -1403,7 +1403,7 @@ void main() { // Test top locations, for each (6): // - Default // - with an AppBar - Future _runTopTests( + Future runTopTests( WidgetTester tester, FloatingActionButtonLocation location, { required Rect defaultRect, @@ -1413,7 +1413,7 @@ void main() { const double viewPadding = 50.0; final Key floatingActionButton = UniqueKey(); // Default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData(viewPadding: EdgeInsets.only(top: viewPadding)), floatingActionButton, @@ -1425,7 +1425,7 @@ void main() { ); // AppBar default - await tester.pumpWidget(_buildTest( + await tester.pumpWidget(buildTest( location, const MediaQueryData(viewPadding: EdgeInsets.only(top: viewPadding)), floatingActionButton, @@ -1442,7 +1442,7 @@ void main() { const Rect defaultRect = Rect.fromLTRB(16.0, 50.0, 72.0, 106.0); // Positioned relative to AppBar const Rect appBarRect = Rect.fromLTRB(16.0, 28.0, 72.0, 84.0); - await _runTopTests( + await runTopTests( tester, FloatingActionButtonLocation.startTop, defaultRect: defaultRect, @@ -1454,7 +1454,7 @@ void main() { const Rect defaultRect = Rect.fromLTRB(12.0, 50.0, 60.0, 98.0); // Positioned relative to AppBar const Rect appBarRect = Rect.fromLTRB(12.0, 32.0, 60.0, 80.0); - await _runTopTests( + await runTopTests( tester, FloatingActionButtonLocation.miniStartTop, defaultRect: defaultRect, @@ -1467,7 +1467,7 @@ void main() { const Rect defaultRect = Rect.fromLTRB(372.0, 50.0, 428.0, 106.0); // Positioned relative to AppBar const Rect appBarRect = Rect.fromLTRB(372.0, 28.0, 428.0, 84.0); - await _runTopTests( + await runTopTests( tester, FloatingActionButtonLocation.centerTop, defaultRect: defaultRect, @@ -1479,7 +1479,7 @@ void main() { const Rect defaultRect = Rect.fromLTRB(376.0, 50.0, 424.0, 98.0); // Positioned relative to AppBar const Rect appBarRect = Rect.fromLTRB(376.0, 32.0, 424.0, 80.0); - await _runTopTests( + await runTopTests( tester, FloatingActionButtonLocation.miniCenterTop, defaultRect: defaultRect, @@ -1492,7 +1492,7 @@ void main() { const Rect defaultRect = Rect.fromLTRB(728.0, 50.0, 784.0, 106.0); // Positioned relative to AppBar const Rect appBarRect = Rect.fromLTRB(728.0, 28.0, 784.0, 84.0); - await _runTopTests( + await runTopTests( tester, FloatingActionButtonLocation.endTop, defaultRect: defaultRect, @@ -1504,7 +1504,7 @@ void main() { const Rect defaultRect = Rect.fromLTRB(740.0, 50.0, 788.0, 98.0); // Positioned relative to AppBar const Rect appBarRect = Rect.fromLTRB(740.0, 32.0, 788.0, 80.0); - await _runTopTests( + await runTopTests( tester, FloatingActionButtonLocation.miniEndTop, defaultRect: defaultRect, diff --git a/packages/flutter/test/material/input_date_picker_form_field_test.dart b/packages/flutter/test/material/input_date_picker_form_field_test.dart index a440bd0aa987b..d1432d4eb656c 100644 --- a/packages/flutter/test/material/input_date_picker_form_field_test.dart +++ b/packages/flutter/test/material/input_date_picker_form_field_test.dart @@ -12,7 +12,7 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized(); final MockClipboard mockClipboard = MockClipboard(); - Widget _inputDatePickerField({ + Widget inputDatePickerField({ Key? key, DateTime? initialDate, DateTime? firstDate, @@ -52,15 +52,15 @@ void main() { ); } - TextField _textField(WidgetTester tester) { + TextField textField(WidgetTester tester) { return tester.widget(find.byType(TextField)); } - TextEditingController _textFieldController(WidgetTester tester) { - return _textField(tester).controller!; + TextEditingController textFieldController(WidgetTester tester) { + return textField(tester).controller!; } - double _textOpacity(WidgetTester tester, String textValue) { + double textOpacity(WidgetTester tester, String textValue) { final FadeTransition opacityWidget = tester.widget( find.ancestor( of: find.text(textValue), @@ -76,12 +76,12 @@ void main() { final GlobalKey formKey = GlobalKey(); final DateTime initialDate = DateTime(2016, DateTime.february, 21); DateTime? inputDate; - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( initialDate: initialDate, onDateSaved: (DateTime date) => inputDate = date, formKey: formKey, )); - expect(_textFieldController(tester).value.text, equals('02/21/2016')); + expect(textFieldController(tester).value.text, equals('02/21/2016')); formKey.currentState!.save(); expect(inputDate, equals(initialDate)); }); @@ -89,27 +89,27 @@ void main() { testWidgets('Changing initial date is reflected in text value', (WidgetTester tester) async { final DateTime initialDate = DateTime(2016, DateTime.february, 21); final DateTime updatedInitialDate = DateTime(2016, DateTime.february, 23); - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( initialDate: initialDate, )); - expect(_textFieldController(tester).value.text, equals('02/21/2016')); + expect(textFieldController(tester).value.text, equals('02/21/2016')); - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( initialDate: updatedInitialDate, )); await tester.pumpAndSettle(); - expect(_textFieldController(tester).value.text, equals('02/23/2016')); + expect(textFieldController(tester).value.text, equals('02/23/2016')); }); testWidgets('Valid date entry', (WidgetTester tester) async { final GlobalKey formKey = GlobalKey(); DateTime? inputDate; - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( onDateSaved: (DateTime date) => inputDate = date, formKey: formKey, )); - _textFieldController(tester).text = '02/21/2016'; + textFieldController(tester).text = '02/21/2016'; formKey.currentState!.save(); expect(inputDate, equals(DateTime(2016, DateTime.february, 21))); }); @@ -117,7 +117,7 @@ void main() { testWidgets('Invalid text entry shows errorFormat text', (WidgetTester tester) async { final GlobalKey formKey = GlobalKey(); DateTime? inputDate; - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( onDateSaved: (DateTime date) => inputDate = date, formKey: formKey, )); @@ -130,7 +130,7 @@ void main() { expect(find.text('Invalid format.'), findsOneWidget); // Change to a custom errorFormat text - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( onDateSaved: (DateTime date) => inputDate = date, errorFormatText: 'That is not a date.', formKey: formKey, @@ -144,7 +144,7 @@ void main() { testWidgets('Valid text entry, but date outside first or last date shows bounds shows errorInvalid text', (WidgetTester tester) async { final GlobalKey formKey = GlobalKey(); DateTime? inputDate; - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( firstDate: DateTime(1966, DateTime.february, 21), lastDate: DateTime(2040, DateTime.february, 23), onDateSaved: (DateTime date) => inputDate = date, @@ -165,7 +165,7 @@ void main() { expect(inputDate, isNull); expect(find.text('Out of range.'), findsOneWidget); - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( onDateSaved: (DateTime date) => inputDate = date, errorInvalidText: 'Not in given range.', formKey: formKey, @@ -179,7 +179,7 @@ void main() { testWidgets('selectableDatePredicate will be used to show errorInvalid if date is not selectable', (WidgetTester tester) async { final GlobalKey formKey = GlobalKey(); DateTime? inputDate; - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( initialDate: DateTime(2016, DateTime.january, 16), onDateSaved: (DateTime date) => inputDate = date, selectableDayPredicate: (DateTime date) => date.day.isEven, @@ -203,34 +203,34 @@ void main() { }); testWidgets('Empty field shows hint text when focused', (WidgetTester tester) async { - await tester.pumpWidget(_inputDatePickerField()); + await tester.pumpWidget(inputDatePickerField()); // Focus on it await tester.tap(find.byType(TextField)); await tester.pumpAndSettle(); // Hint text should be invisible - expect(_textOpacity(tester, 'mm/dd/yyyy'), equals(0.0)); - _textFieldController(tester).clear(); + expect(textOpacity(tester, 'mm/dd/yyyy'), equals(0.0)); + textFieldController(tester).clear(); await tester.pumpAndSettle(); // Hint text should be visible - expect(_textOpacity(tester, 'mm/dd/yyyy'), equals(1.0)); + expect(textOpacity(tester, 'mm/dd/yyyy'), equals(1.0)); // Change to a different hint text - await tester.pumpWidget(_inputDatePickerField(fieldHintText: 'Enter some date')); + await tester.pumpWidget(inputDatePickerField(fieldHintText: 'Enter some date')); await tester.pumpAndSettle(); expect(find.text('mm/dd/yyyy'), findsNothing); - expect(_textOpacity(tester, 'Enter some date'), equals(1.0)); + expect(textOpacity(tester, 'Enter some date'), equals(1.0)); await tester.enterText(find.byType(TextField), 'foobar'); await tester.pumpAndSettle(); - expect(_textOpacity(tester, 'Enter some date'), equals(0.0)); + expect(textOpacity(tester, 'Enter some date'), equals(0.0)); }); testWidgets('Label text', (WidgetTester tester) async { - await tester.pumpWidget(_inputDatePickerField()); + await tester.pumpWidget(inputDatePickerField()); // Default label expect(find.text('Enter Date'), findsOneWidget); - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( fieldLabelText: 'Give me a date!', )); expect(find.text('Enter Date'), findsNothing); @@ -247,7 +247,7 @@ void main() { await Clipboard.setData(const ClipboardData(text: 'Clipboard data')); addTearDown(() => tester.binding.defaultBinaryMessenger.setMockMethodCallHandler(SystemChannels.platform, null)); - await tester.pumpWidget(_inputDatePickerField(autofocus: true)); + await tester.pumpWidget(inputDatePickerField(autofocus: true)); await tester.pumpAndSettle(); expect(tester.getSemantics(find.byType(EditableText)), matchesSemantics( @@ -268,7 +268,7 @@ void main() { testWidgets('InputDecorationTheme is honored', (WidgetTester tester) async { const InputBorder border = InputBorder.none; - await tester.pumpWidget(_inputDatePickerField( + await tester.pumpWidget(inputDatePickerField( theme: ThemeData.from(colorScheme: const ColorScheme.light()).copyWith( inputDecorationTheme: const InputDecorationTheme( border: border, diff --git a/packages/flutter/test/material/material_state_mixin_test.dart b/packages/flutter/test/material/material_state_mixin_test.dart index 9b59dc78208c9..a5e9a56a73dd0 100644 --- a/packages/flutter/test/material/material_state_mixin_test.dart +++ b/packages/flutter/test/material/material_state_mixin_test.dart @@ -71,7 +71,7 @@ class _MyWidgetState extends State<_MyWidget> with MaterialStateMixin { void main() { - Future _verify(WidgetTester tester, Widget widget, StreamController controller,) async { + Future verify(WidgetTester tester, Widget widget, StreamController controller,) async { await tester.pumpWidget(MaterialApp(home: Scaffold(body: widget))); // Set the value to True controller.sink.add(true); @@ -91,7 +91,7 @@ void main() { evaluator: (_MyWidgetState state) => state.isPressed, materialState: MaterialState.pressed, ); - await _verify(tester, widget, controller); + await verify(tester, widget, controller); }); testWidgets('MaterialState.focused is tracked', (WidgetTester tester) async { @@ -101,7 +101,7 @@ void main() { evaluator: (_MyWidgetState state) => state.isFocused, materialState: MaterialState.focused, ); - await _verify(tester, widget, controller); + await verify(tester, widget, controller); }); testWidgets('MaterialState.hovered is tracked', (WidgetTester tester) async { @@ -111,7 +111,7 @@ void main() { evaluator: (_MyWidgetState state) => state.isHovered, materialState: MaterialState.hovered, ); - await _verify(tester, widget, controller); + await verify(tester, widget, controller); }); testWidgets('MaterialState.disabled is tracked', (WidgetTester tester) async { @@ -121,7 +121,7 @@ void main() { evaluator: (_MyWidgetState state) => state.isDisabled, materialState: MaterialState.disabled, ); - await _verify(tester, widget, controller); + await verify(tester, widget, controller); }); testWidgets('MaterialState.selected is tracked', (WidgetTester tester) async { @@ -131,7 +131,7 @@ void main() { evaluator: (_MyWidgetState state) => state.isSelected, materialState: MaterialState.selected, ); - await _verify(tester, widget, controller); + await verify(tester, widget, controller); }); testWidgets('MaterialState.scrolledUnder is tracked', (WidgetTester tester) async { @@ -141,7 +141,7 @@ void main() { evaluator: (_MyWidgetState state) => state.isScrolledUnder, materialState: MaterialState.scrolledUnder, ); - await _verify(tester, widget, controller); + await verify(tester, widget, controller); }); testWidgets('MaterialState.dragged is tracked', (WidgetTester tester) async { @@ -151,7 +151,7 @@ void main() { evaluator: (_MyWidgetState state) => state.isDragged, materialState: MaterialState.dragged, ); - await _verify(tester, widget, controller); + await verify(tester, widget, controller); }); testWidgets('MaterialState.error is tracked', (WidgetTester tester) async { @@ -161,6 +161,6 @@ void main() { evaluator: (_MyWidgetState state) => state.isErrored, materialState: MaterialState.error, ); - await _verify(tester, widget, controller); + await verify(tester, widget, controller); }); } diff --git a/packages/flutter/test/material/navigation_bar_test.dart b/packages/flutter/test/material/navigation_bar_test.dart index d8fb87c57f0fa..14276a2f8bebf 100644 --- a/packages/flutter/test/material/navigation_bar_test.dart +++ b/packages/flutter/test/material/navigation_bar_test.dart @@ -292,7 +292,7 @@ void main() { testWidgets('Navigation bar semantics', (WidgetTester tester) async { - Widget _widget({int selectedIndex = 0}) { + Widget widget({int selectedIndex = 0}) { return _buildWidget( NavigationBar( selectedIndex: selectedIndex, @@ -310,7 +310,7 @@ void main() { ); } - await tester.pumpWidget(_widget()); + await tester.pumpWidget(widget()); expect( tester.getSemantics(find.text('AC')), @@ -332,7 +332,7 @@ void main() { ), ); - await tester.pumpWidget(_widget(selectedIndex: 1)); + await tester.pumpWidget(widget(selectedIndex: 1)); expect( tester.getSemantics(find.text('AC')), @@ -356,7 +356,7 @@ void main() { }); testWidgets('Navigation bar semantics with some labels hidden', (WidgetTester tester) async { - Widget _widget({int selectedIndex = 0}) { + Widget widget({int selectedIndex = 0}) { return _buildWidget( NavigationBar( labelBehavior: NavigationDestinationLabelBehavior.onlyShowSelected, @@ -375,7 +375,7 @@ void main() { ); } - await tester.pumpWidget(_widget()); + await tester.pumpWidget(widget()); expect( tester.getSemantics(find.text('AC')), @@ -397,7 +397,7 @@ void main() { ), ); - await tester.pumpWidget(_widget(selectedIndex: 1)); + await tester.pumpWidget(widget(selectedIndex: 1)); expect( tester.getSemantics(find.text('AC')), @@ -423,7 +423,7 @@ void main() { testWidgets('Navigation bar does not grow with text scale factor', (WidgetTester tester) async { const int animationMilliseconds = 800; - Widget _widget({double textScaleFactor = 1}) { + Widget widget({double textScaleFactor = 1}) { return _buildWidget( MediaQuery( data: MediaQueryData(textScaleFactor: textScaleFactor), @@ -444,10 +444,10 @@ void main() { ); } - await tester.pumpWidget(_widget()); + await tester.pumpWidget(widget()); final double initialHeight = tester.getSize(find.byType(NavigationBar)).height; - await tester.pumpWidget(_widget(textScaleFactor: 2)); + await tester.pumpWidget(widget(textScaleFactor: 2)); final double newHeight = tester.getSize(find.byType(NavigationBar)).height; expect(newHeight, equals(initialHeight)); diff --git a/packages/flutter/test/material/page_test.dart b/packages/flutter/test/material/page_test.dart index dd69a5479bcb8..42b63de600b8d 100644 --- a/packages/flutter/test/material/page_test.dart +++ b/packages/flutter/test/material/page_test.dart @@ -156,20 +156,20 @@ void main() { }, variant: const TargetPlatformVariant({ TargetPlatform.iOS, TargetPlatform.macOS })); testWidgets('test page transition (_ZoomPageTransition)', (WidgetTester tester) async { - Iterable _findWidgets(Finder of) { + Iterable findWidgets(Finder of) { return tester.widgetList( find.ancestor(of: of, matching: find.byType(T)), ); } - FadeTransition _findForwardFadeTransition(Finder of) { - return _findWidgets(of).where( + FadeTransition findForwardFadeTransition(Finder of) { + return findWidgets(of).where( (FadeTransition t) => t.opacity.status == AnimationStatus.forward, ).first; } - ScaleTransition _findForwardScaleTransition(Finder of) { - return _findWidgets(of).where( + ScaleTransition findForwardScaleTransition(Finder of) { + return findWidgets(of).where( (ScaleTransition t) => t.scale.status == AnimationStatus.forward, ).first; } @@ -189,9 +189,9 @@ void main() { await tester.pump(); await tester.pump(const Duration(milliseconds: 50)); - ScaleTransition widget1Scale = _findForwardScaleTransition(find.text('Page 1')); - ScaleTransition widget2Scale = _findForwardScaleTransition(find.text('Page 2')); - FadeTransition widget2Opacity = _findForwardFadeTransition(find.text('Page 2')); + ScaleTransition widget1Scale = findForwardScaleTransition(find.text('Page 1')); + ScaleTransition widget2Scale = findForwardScaleTransition(find.text('Page 2')); + FadeTransition widget2Opacity = findForwardFadeTransition(find.text('Page 2')); // Page 1 is enlarging, starts from 1.0. expect(widget1Scale.scale.value, greaterThan(1.0)); @@ -211,9 +211,9 @@ void main() { await tester.pump(); await tester.pump(const Duration(milliseconds: 100)); - widget1Scale = _findForwardScaleTransition(find.text('Page 1')); - widget2Scale = _findForwardScaleTransition(find.text('Page 2')); - widget2Opacity = _findForwardFadeTransition(find.text('Page 2')); + widget1Scale = findForwardScaleTransition(find.text('Page 1')); + widget2Scale = findForwardScaleTransition(find.text('Page 2')); + widget2Opacity = findForwardFadeTransition(find.text('Page 2')); // Page 1 is narrowing down, but still larger than 1.0. expect(widget1Scale.scale.value, greaterThan(1.0)); diff --git a/packages/flutter/test/material/persistent_bottom_sheet_test.dart b/packages/flutter/test/material/persistent_bottom_sheet_test.dart index 5ef26fd914643..dada826f03dea 100644 --- a/packages/flutter/test/material/persistent_bottom_sheet_test.dart +++ b/packages/flutter/test/material/persistent_bottom_sheet_test.dart @@ -8,7 +8,7 @@ import 'package:flutter_test/flutter_test.dart'; void main() { // Pumps and ensures that the BottomSheet animates non-linearly. - Future _checkNonLinearAnimation(WidgetTester tester) async { + Future checkNonLinearAnimation(WidgetTester tester) async { final Offset firstPosition = tester.getCenter(find.text('One')); await tester.pump(const Duration(milliseconds: 30)); final Offset secondPosition = tester.getCenter(find.text('One')); @@ -134,14 +134,14 @@ void main() { ); }); await tester.pump(); - await _checkNonLinearAnimation(tester); + await checkNonLinearAnimation(tester); await tester.pumpAndSettle(); expect(find.text('Two'), findsOneWidget); await tester.drag(find.text('Two'), const Offset(0.0, 200.0)); - await _checkNonLinearAnimation(tester); + await checkNonLinearAnimation(tester); await tester.pumpAndSettle(); expect(find.text('Two'), findsNothing); diff --git a/packages/flutter/test/material/popup_menu_test.dart b/packages/flutter/test/material/popup_menu_test.dart index dd808690d9a30..86138aedfaa2b 100644 --- a/packages/flutter/test/material/popup_menu_test.dart +++ b/packages/flutter/test/material/popup_menu_test.dart @@ -2764,7 +2764,7 @@ void main() { }); testWidgets("PopupMenuButton icon inherits IconTheme's size", (WidgetTester tester) async { - Widget _buildPopupMenu({double? themeIconSize, double? iconSize}) { + Widget buildPopupMenu({double? themeIconSize, double? iconSize}) { return MaterialApp( theme: ThemeData( iconTheme: IconThemeData( @@ -2788,20 +2788,20 @@ void main() { } // Popup menu with default icon size. - await tester.pumpWidget(_buildPopupMenu()); + await tester.pumpWidget(buildPopupMenu()); IconButton iconButton = tester.widget(find.widgetWithIcon(IconButton, Icons.more_vert)); // Default PopupMenuButton icon size is 24.0. expect(iconButton.iconSize, 24.0); // Popup menu with custom theme icon size. - await tester.pumpWidget(_buildPopupMenu(themeIconSize: 30.0)); + await tester.pumpWidget(buildPopupMenu(themeIconSize: 30.0)); await tester.pumpAndSettle(); iconButton = tester.widget(find.widgetWithIcon(IconButton, Icons.more_vert)); // PopupMenuButton icon inherits IconTheme's size. expect(iconButton.iconSize, 30.0); // Popup menu with custom icon size. - await tester.pumpWidget(_buildPopupMenu(themeIconSize: 30.0, iconSize: 50.0)); + await tester.pumpWidget(buildPopupMenu(themeIconSize: 30.0, iconSize: 50.0)); await tester.pumpAndSettle(); iconButton = tester.widget(find.widgetWithIcon(IconButton, Icons.more_vert)); // PopupMenuButton icon size overrides IconTheme's size. diff --git a/packages/flutter/test/material/radio_test.dart b/packages/flutter/test/material/radio_test.dart index af74c36f73d74..6f90f622ab2b9 100644 --- a/packages/flutter/test/material/radio_test.dart +++ b/packages/flutter/test/material/radio_test.dart @@ -980,12 +980,12 @@ void main() { } const double splashRadius = 24.0; - Finder _findRadio() { + Finder findRadio() { return find.byWidgetPredicate((Widget widget) => widget is Radio); } - MaterialInkController? _getRadioMaterial(WidgetTester tester) { - return Material.of(tester.element(_findRadio())); + MaterialInkController? getRadioMaterial(WidgetTester tester) { + return Material.of(tester.element(findRadio())); } Widget buildRadio({bool active = false, bool focused = false, bool useOverlay = true}) { @@ -1008,11 +1008,11 @@ void main() { } await tester.pumpWidget(buildRadio(useOverlay: false)); - await tester.press(_findRadio()); + await tester.press(findRadio()); await tester.pumpAndSettle(); expect( - _getRadioMaterial(tester), + getRadioMaterial(tester), paints ..circle( color: fillColor.withAlpha(kRadialReactionAlpha), @@ -1022,11 +1022,11 @@ void main() { ); await tester.pumpWidget(buildRadio(active: true, useOverlay: false)); - await tester.press(_findRadio()); + await tester.press(findRadio()); await tester.pumpAndSettle(); expect( - _getRadioMaterial(tester), + getRadioMaterial(tester), paints ..circle( color: fillColor.withAlpha(kRadialReactionAlpha), @@ -1036,11 +1036,11 @@ void main() { ); await tester.pumpWidget(buildRadio()); - await tester.press(_findRadio()); + await tester.press(findRadio()); await tester.pumpAndSettle(); expect( - _getRadioMaterial(tester), + getRadioMaterial(tester), paints ..circle( color: inactivePressedOverlayColor, @@ -1050,11 +1050,11 @@ void main() { ); await tester.pumpWidget(buildRadio(active: true)); - await tester.press(_findRadio()); + await tester.press(findRadio()); await tester.pumpAndSettle(); expect( - _getRadioMaterial(tester), + getRadioMaterial(tester), paints ..circle( color: activePressedOverlayColor, @@ -1068,7 +1068,7 @@ void main() { expect(focusNode.hasPrimaryFocus, isTrue); expect( - _getRadioMaterial(tester), + getRadioMaterial(tester), paints ..circle( color: focusOverlayColor, @@ -1081,11 +1081,11 @@ void main() { final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse); await gesture.addPointer(); addTearDown(gesture.removePointer); - await gesture.moveTo(tester.getCenter(_findRadio())); + await gesture.moveTo(tester.getCenter(findRadio())); await tester.pumpAndSettle(); expect( - _getRadioMaterial(tester), + getRadioMaterial(tester), paints ..circle( color: hoverOverlayColor, diff --git a/packages/flutter/test/material/range_slider_test.dart b/packages/flutter/test/material/range_slider_test.dart index c3d0b6989b214..8e1f3f8107cdf 100644 --- a/packages/flutter/test/material/range_slider_test.dart +++ b/packages/flutter/test/material/range_slider_test.dart @@ -939,7 +939,7 @@ void main() { expect(endValues.end, moreOrLessEquals(90, epsilon: 1)); }); - ThemeData _buildTheme() { + ThemeData buildTheme() { return ThemeData( platform: TargetPlatform.android, primarySwatch: Colors.blue, @@ -960,7 +960,7 @@ void main() { ); } - Widget _buildThemedApp({ + Widget buildThemedApp({ required ThemeData theme, Color? activeColor, Color? inactiveColor, @@ -994,10 +994,10 @@ void main() { } testWidgets('Range Slider uses the right theme colors for the right shapes for a default enabled slider', (WidgetTester tester) async { - final ThemeData theme = _buildTheme(); + final ThemeData theme = buildTheme(); final SliderThemeData sliderTheme = theme.sliderTheme; - await tester.pumpWidget(_buildThemedApp(theme: theme)); + await tester.pumpWidget(buildThemedApp(theme: theme)); final RenderBox sliderBox = tester.firstRenderObject(find.byType(RangeSlider)); @@ -1024,10 +1024,10 @@ void main() { testWidgets('Range Slider uses the right theme colors for the right shapes when setting the active color', (WidgetTester tester) async { const Color activeColor = Color(0xcafefeed); - final ThemeData theme = _buildTheme(); + final ThemeData theme = buildTheme(); final SliderThemeData sliderTheme = theme.sliderTheme; - await tester.pumpWidget(_buildThemedApp(theme: theme, activeColor: activeColor)); + await tester.pumpWidget(buildThemedApp(theme: theme, activeColor: activeColor)); final RenderBox sliderBox = tester.firstRenderObject(find.byType(RangeSlider)); @@ -1052,10 +1052,10 @@ void main() { testWidgets('Range Slider uses the right theme colors for the right shapes when setting the inactive color', (WidgetTester tester) async { const Color inactiveColor = Color(0xdeadbeef); - final ThemeData theme = _buildTheme(); + final ThemeData theme = buildTheme(); final SliderThemeData sliderTheme = theme.sliderTheme; - await tester.pumpWidget(_buildThemedApp(theme: theme, inactiveColor: inactiveColor)); + await tester.pumpWidget(buildThemedApp(theme: theme, inactiveColor: inactiveColor)); final RenderBox sliderBox = tester.firstRenderObject(find.byType(RangeSlider)); @@ -1080,10 +1080,10 @@ void main() { testWidgets('Range Slider uses the right theme colors for the right shapes with active and inactive colors', (WidgetTester tester) async { const Color activeColor = Color(0xcafefeed); const Color inactiveColor = Color(0xdeadbeef); - final ThemeData theme = _buildTheme(); + final ThemeData theme = buildTheme(); final SliderThemeData sliderTheme = theme.sliderTheme; - await tester.pumpWidget(_buildThemedApp( + await tester.pumpWidget(buildThemedApp( theme: theme, activeColor: activeColor, inactiveColor: inactiveColor, @@ -1111,10 +1111,10 @@ void main() { }); testWidgets('Range Slider uses the right theme colors for the right shapes for a discrete slider', (WidgetTester tester) async { - final ThemeData theme = _buildTheme(); + final ThemeData theme = buildTheme(); final SliderThemeData sliderTheme = theme.sliderTheme; - await tester.pumpWidget(_buildThemedApp(theme: theme, divisions: 3)); + await tester.pumpWidget(buildThemedApp(theme: theme, divisions: 3)); final RenderBox sliderBox = tester.firstRenderObject(find.byType(RangeSlider)); @@ -1143,11 +1143,11 @@ void main() { testWidgets('Range Slider uses the right theme colors for the right shapes for a discrete slider with active and inactive colors', (WidgetTester tester) async { const Color activeColor = Color(0xcafefeed); const Color inactiveColor = Color(0xdeadbeef); - final ThemeData theme = _buildTheme(); + final ThemeData theme = buildTheme(); final SliderThemeData sliderTheme = theme.sliderTheme; - await tester.pumpWidget(_buildThemedApp( + await tester.pumpWidget(buildThemedApp( theme: theme, activeColor: activeColor, inactiveColor: inactiveColor, @@ -1182,10 +1182,10 @@ void main() { }); testWidgets('Range Slider uses the right theme colors for the right shapes for a default disabled slider', (WidgetTester tester) async { - final ThemeData theme = _buildTheme(); + final ThemeData theme = buildTheme(); final SliderThemeData sliderTheme = theme.sliderTheme; - await tester.pumpWidget(_buildThemedApp(theme: theme, enabled: false)); + await tester.pumpWidget(buildThemedApp(theme: theme, enabled: false)); final RenderBox sliderBox = tester.firstRenderObject(find.byType(RangeSlider)); @@ -1204,10 +1204,10 @@ void main() { testWidgets('Range Slider uses the right theme colors for the right shapes for a disabled slider with active and inactive colors', (WidgetTester tester) async { const Color activeColor = Color(0xcafefeed); const Color inactiveColor = Color(0xdeadbeef); - final ThemeData theme = _buildTheme(); + final ThemeData theme = buildTheme(); final SliderThemeData sliderTheme = theme.sliderTheme; - await tester.pumpWidget(_buildThemedApp( + await tester.pumpWidget(buildThemedApp( theme: theme, activeColor: activeColor, inactiveColor: inactiveColor, @@ -1229,7 +1229,7 @@ void main() { }); testWidgets('Range Slider uses the right theme colors for the right shapes when the value indicators are showing', (WidgetTester tester) async { - final ThemeData theme = _buildTheme(); + final ThemeData theme = buildTheme(); final SliderThemeData sliderTheme = theme.sliderTheme; RangeValues values = const RangeValues(0.5, 0.75); diff --git a/packages/flutter/test/material/scaffold_test.dart b/packages/flutter/test/material/scaffold_test.dart index 3a10ba8c08fb3..d1775cf5ba180 100644 --- a/packages/flutter/test/material/scaffold_test.dart +++ b/packages/flutter/test/material/scaffold_test.dart @@ -355,7 +355,7 @@ void main() { expect(renderBox.size.height, equals(appBarHeight)); }); - Widget _buildStatusBarTestApp(TargetPlatform? platform) { + Widget buildStatusBarTestApp(TargetPlatform? platform) { return MaterialApp( theme: ThemeData(platform: platform), home: MediaQuery( @@ -380,7 +380,7 @@ void main() { } testWidgets('Tapping the status bar scrolls to top', (WidgetTester tester) async { - await tester.pumpWidget(_buildStatusBarTestApp(debugDefaultTargetPlatformOverride)); + await tester.pumpWidget(buildStatusBarTestApp(debugDefaultTargetPlatformOverride)); final ScrollableState scrollable = tester.state(find.byType(Scrollable)); scrollable.position.jumpTo(500.0); expect(scrollable.position.pixels, equals(500.0)); @@ -394,7 +394,7 @@ void main() { final List stops = [0.842, 0.959, 0.993, 1.0]; const double scrollOffset = 1000; - await tester.pumpWidget(_buildStatusBarTestApp(debugDefaultTargetPlatformOverride)); + await tester.pumpWidget(buildStatusBarTestApp(debugDefaultTargetPlatformOverride)); final ScrollableState scrollable = tester.state(find.byType(Scrollable)); scrollable.position.jumpTo(scrollOffset); await tester.tapAt(const Offset(100.0, 10.0)); @@ -419,7 +419,7 @@ void main() { }, variant: const TargetPlatformVariant({ TargetPlatform.iOS, TargetPlatform.macOS })); testWidgets('Tapping the status bar does not scroll to top', (WidgetTester tester) async { - await tester.pumpWidget(_buildStatusBarTestApp(TargetPlatform.android)); + await tester.pumpWidget(buildStatusBarTestApp(TargetPlatform.android)); final ScrollableState scrollable = tester.state(find.byType(Scrollable)); scrollable.position.jumpTo(500.0); expect(scrollable.position.pixels, equals(500.0)); diff --git a/packages/flutter/test/material/scrollbar_test.dart b/packages/flutter/test/material/scrollbar_test.dart index c12b499a66787..249e83f760ff8 100644 --- a/packages/flutter/test/material/scrollbar_test.dart +++ b/packages/flutter/test/material/scrollbar_test.dart @@ -1713,7 +1713,7 @@ void main() { }); testWidgets('Scrollbar.isAlwaysShown triggers assertion when multiple ScrollPositions are attached.', (WidgetTester tester) async { - Widget _getTabContent({ ScrollController? scrollController }) { + Widget getTabContent({ ScrollController? scrollController }) { return Scrollbar( isAlwaysShown: true, controller: scrollController, @@ -1725,7 +1725,7 @@ void main() { ); } - Widget _buildApp({ + Widget buildApp({ required String id, ScrollController? scrollController, }) { @@ -1736,8 +1736,8 @@ void main() { child: Scaffold( body: TabBarView( children: [ - _getTabContent(scrollController: scrollController), - _getTabContent(scrollController: scrollController), + getTabContent(scrollController: scrollController), + getTabContent(scrollController: scrollController), ], ), ), @@ -1746,7 +1746,7 @@ void main() { } // Asserts when using the PrimaryScrollController. - await tester.pumpWidget(_buildApp(id: 'PrimaryScrollController')); + await tester.pumpWidget(buildApp(id: 'PrimaryScrollController')); // Swipe to the second tab, resulting in two attached ScrollPositions during // the transition. @@ -1762,7 +1762,7 @@ void main() { // Asserts when using the ScrollController provided by the user. final ScrollController scrollController = ScrollController(); await tester.pumpWidget( - _buildApp( + buildApp( id: 'Provided ScrollController', scrollController: scrollController, ), @@ -1782,7 +1782,7 @@ void main() { testWidgets('Scrollbar scrollOrientation works correctly', (WidgetTester tester) async { final ScrollController scrollController = ScrollController(); - Widget _buildScrollWithOrientation(ScrollbarOrientation orientation) { + Widget buildScrollWithOrientation(ScrollbarOrientation orientation) { return _buildBoilerplate( child: Theme( data: ThemeData( @@ -1804,7 +1804,7 @@ void main() { ); } - await tester.pumpWidget(_buildScrollWithOrientation(ScrollbarOrientation.left)); + await tester.pumpWidget(buildScrollWithOrientation(ScrollbarOrientation.left)); await tester.pumpAndSettle(); expect( diff --git a/packages/flutter/test/material/scrollbar_theme_test.dart b/packages/flutter/test/material/scrollbar_theme_test.dart index 4182c511c9f99..2be9348c24f8c 100644 --- a/packages/flutter/test/material/scrollbar_theme_test.dart +++ b/packages/flutter/test/material/scrollbar_theme_test.dart @@ -576,14 +576,14 @@ void main() { testWidgets('ScrollbarThemeData.trackVisibility test', (WidgetTester tester) async { final ScrollController scrollController = ScrollController(); - bool? _getTrackVisibility(Set states) { + bool? getTrackVisibility(Set states) { return true; } await tester.pumpWidget( MaterialApp( theme: ThemeData().copyWith( scrollbarTheme: _scrollbarTheme( - trackVisibility: MaterialStateProperty.resolveWith(_getTrackVisibility), + trackVisibility: MaterialStateProperty.resolveWith(getTrackVisibility), ), ), home: ScrollConfiguration( diff --git a/packages/flutter/test/material/snack_bar_test.dart b/packages/flutter/test/material/snack_bar_test.dart index 7ea6014418bb2..2372baae49cde 100644 --- a/packages/flutter/test/material/snack_bar_test.dart +++ b/packages/flutter/test/material/snack_bar_test.dart @@ -1733,7 +1733,7 @@ void main() { const Key snackTarget = Key('snack-target'); const Key transitionTarget = Key('transition-target'); - Widget _buildApp() { + Widget buildApp() { return MaterialApp( routes: { '/': (BuildContext context) { @@ -1765,7 +1765,7 @@ void main() { }, ); } - await tester.pumpWidget(_buildApp()); + await tester.pumpWidget(buildApp()); expect(find.text(snackBarText), findsNothing); expect(find.text(firstHeader), findsOneWidget); @@ -1959,7 +1959,7 @@ void main() { expect(find.text(snackBars[2]), findsNothing); }); - Widget _buildApp({ + Widget doBuildApp({ required SnackBarBehavior? behavior, EdgeInsetsGeometry? margin, double? width, @@ -1993,7 +1993,7 @@ void main() { testWidgets('Setting SnackBarBehavior.fixed will still assert for margin', (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/issues/84935 - await tester.pumpWidget(_buildApp( + await tester.pumpWidget(doBuildApp( behavior: SnackBarBehavior.fixed, margin: const EdgeInsets.all(8.0), )); @@ -2010,7 +2010,7 @@ void main() { testWidgets('Default SnackBarBehavior will still assert for margin', (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/issues/84935 - await tester.pumpWidget(_buildApp( + await tester.pumpWidget(doBuildApp( behavior: null, margin: const EdgeInsets.all(8.0), )); @@ -2027,7 +2027,7 @@ void main() { testWidgets('Setting SnackBarBehavior.fixed will still assert for width', (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/issues/84935 - await tester.pumpWidget(_buildApp( + await tester.pumpWidget(doBuildApp( behavior: SnackBarBehavior.fixed, width: 5.0, )); @@ -2044,7 +2044,7 @@ void main() { testWidgets('Default SnackBarBehavior will still assert for width', (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/issues/84935 - await tester.pumpWidget(_buildApp( + await tester.pumpWidget(doBuildApp( behavior: null, width: 5.0, )); diff --git a/packages/flutter/test/material/snack_bar_theme_test.dart b/packages/flutter/test/material/snack_bar_theme_test.dart index 830d200fc5d22..cd82a63d9da9e 100644 --- a/packages/flutter/test/material/snack_bar_theme_test.dart +++ b/packages/flutter/test/material/snack_bar_theme_test.dart @@ -272,7 +272,7 @@ void main() { expect(snackBarTopCenter.dy > floatingActionButtonBottomCenter.dy, true); }); - Widget _buildApp({ + Widget buildApp({ required SnackBarBehavior themedBehavior, EdgeInsetsGeometry? margin, double? width, @@ -309,7 +309,7 @@ void main() { testWidgets('SnackBar theme behavior will assert properly for margin use', (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/issues/84935 // SnackBarBehavior.floating set in theme does not assert with margin - await tester.pumpWidget(_buildApp( + await tester.pumpWidget(buildApp( themedBehavior: SnackBarBehavior.floating, margin: const EdgeInsets.all(8.0), )); @@ -320,7 +320,7 @@ void main() { expect(exception, isNull); // SnackBarBehavior.fixed set in theme will still assert with margin - await tester.pumpWidget(_buildApp( + await tester.pumpWidget(buildApp( themedBehavior: SnackBarBehavior.fixed, margin: const EdgeInsets.all(8.0), )); @@ -337,7 +337,7 @@ void main() { testWidgets('SnackBar theme behavior will assert properly for width use', (WidgetTester tester) async { // SnackBarBehavior.floating set in theme does not assert with width - await tester.pumpWidget(_buildApp( + await tester.pumpWidget(buildApp( themedBehavior: SnackBarBehavior.floating, width: 5.0, )); @@ -348,7 +348,7 @@ void main() { expect(exception, isNull); // SnackBarBehavior.fixed set in theme will still assert with width - await tester.pumpWidget(_buildApp( + await tester.pumpWidget(buildApp( themedBehavior: SnackBarBehavior.fixed, width: 5.0, )); diff --git a/packages/flutter/test/material/tabs_test.dart b/packages/flutter/test/material/tabs_test.dart index 3e784fb00079c..238cdca3c29f7 100644 --- a/packages/flutter/test/material/tabs_test.dart +++ b/packages/flutter/test/material/tabs_test.dart @@ -3582,13 +3582,13 @@ void main() { // Regression test for https://github.com/flutter/flutter/issues/94504. final List tabTitles = []; - void _onTabAdd(StateSetter setState) { + void onTabAdd(StateSetter setState) { setState(() { tabTitles.add('Tab ${tabTitles.length + 1}'); }); } - void _onTabRemove(StateSetter setState) { + void onTabRemove(StateSetter setState) { setState(() { tabTitles.removeLast(); }); @@ -3606,12 +3606,12 @@ void main() { TextButton( key: const Key('Add tab'), child: const Text('Add tab'), - onPressed: () => _onTabAdd(setState), + onPressed: () => onTabAdd(setState), ), TextButton( key: const Key('Remove tab'), child: const Text('Remove tab'), - onPressed: () => _onTabRemove(setState), + onPressed: () => onTabRemove(setState), ), ], bottom: PreferredSize( @@ -3657,14 +3657,14 @@ void main() { final List tabTitles = []; TabController tabController = TabController(length: tabTitles.length, vsync: const TestVSync()); - void _onTabAdd(StateSetter setState) { + void onTabAdd(StateSetter setState) { setState(() { tabTitles.add('Tab ${tabTitles.length + 1}'); tabController = TabController(length: tabTitles.length, vsync: const TestVSync()); }); } - void _onTabRemove(StateSetter setState) { + void onTabRemove(StateSetter setState) { setState(() { tabTitles.removeLast(); tabController = TabController(length: tabTitles.length, vsync: const TestVSync()); @@ -3681,12 +3681,12 @@ void main() { TextButton( key: const Key('Add tab'), child: const Text('Add tab'), - onPressed: () => _onTabAdd(setState), + onPressed: () => onTabAdd(setState), ), TextButton( key: const Key('Remove tab'), child: const Text('Remove tab'), - onPressed: () => _onTabRemove(setState), + onPressed: () => onTabRemove(setState), ), ], bottom: PreferredSize( diff --git a/packages/flutter/test/material/text_field_test.dart b/packages/flutter/test/material/text_field_test.dart index 116c8b19f5931..aba32230212b1 100644 --- a/packages/flutter/test/material/text_field_test.dart +++ b/packages/flutter/test/material/text_field_test.dart @@ -2318,7 +2318,7 @@ void main() { // Show the selection menu at the given index into the text by tapping to // place the cursor and then tapping on the handle. - Future _showSelectionMenuAt(WidgetTester tester, TextEditingController controller, int index) async { + Future showSelectionMenuAt(WidgetTester tester, TextEditingController controller, int index) async { await tester.tapAt(tester.getCenter(find.byType(EditableText))); await tester.pump(); await tester.pump(const Duration(milliseconds: 200)); // skip past the frame where the opacity is zero @@ -2365,7 +2365,7 @@ void main() { await tester.enterText(find.byType(TextField), testValue); await skipPastScrollingAnimation(tester); - await _showSelectionMenuAt(tester, controller, testValue.indexOf('e')); + await showSelectionMenuAt(tester, controller, testValue.indexOf('e')); // Verify the selection toolbar position is below the text. Offset toolbarTopLeft = tester.getTopLeft(find.text('Select all')); @@ -2386,7 +2386,7 @@ void main() { await tester.enterText(find.byType(TextField), testValue); await skipPastScrollingAnimation(tester); - await _showSelectionMenuAt(tester, controller, testValue.indexOf('e')); + await showSelectionMenuAt(tester, controller, testValue.indexOf('e')); // Verify the selection toolbar position toolbarTopLeft = tester.getTopLeft(find.text('Select all')); @@ -2432,7 +2432,7 @@ void main() { await tester.enterText(find.byType(TextField), testValue); await skipPastScrollingAnimation(tester); - await _showSelectionMenuAt(tester, controller, testValue.indexOf('e')); + await showSelectionMenuAt(tester, controller, testValue.indexOf('e')); // Verify the selection toolbar position is above the text. expect(find.text('Select all'), findsOneWidget); @@ -2493,7 +2493,7 @@ void main() { // Show the selection menu on the first line and verify the selection // toolbar position is below the first line. - await _showSelectionMenuAt(tester, controller, testValue.indexOf('c')); + await showSelectionMenuAt(tester, controller, testValue.indexOf('c')); expect(find.text('Select all'), findsOneWidget); final Offset firstLineToolbarTopLeft = tester.getTopLeft(find.text('Select all')); final Offset firstLineTopLeft = textOffsetToPosition(tester, testValue.indexOf('a')); @@ -2502,7 +2502,7 @@ void main() { // Show the selection menu on the second to last line and verify the // selection toolbar position is above that line and above the first // line's toolbar. - await _showSelectionMenuAt(tester, controller, testValue.indexOf('o')); + await showSelectionMenuAt(tester, controller, testValue.indexOf('o')); expect(find.text('Select all'), findsOneWidget); final Offset penultimateLineToolbarTopLeft = tester.getTopLeft(find.text('Select all')); final Offset penultimateLineTopLeft = textOffsetToPosition(tester, testValue.indexOf('p')); @@ -2512,7 +2512,7 @@ void main() { // Show the selection menu on the last line and verify the selection // toolbar position is above that line and below the position of the // second to last line's toolbar. - await _showSelectionMenuAt(tester, controller, testValue.indexOf('r')); + await showSelectionMenuAt(tester, controller, testValue.indexOf('r')); expect(find.text('Select all'), findsOneWidget); final Offset lastLineToolbarTopLeft = tester.getTopLeft(find.text('Select all')); final Offset lastLineTopLeft = textOffsetToPosition(tester, testValue.indexOf('p')); @@ -9827,7 +9827,7 @@ void main() { }); group('intrinsics', () { - Widget _buildTest({ required bool isDense }) { + Widget buildTest({ required bool isDense }) { return MaterialApp( home: Scaffold( body: CustomScrollView( @@ -9857,14 +9857,14 @@ void main() { // Regression test for https://github.com/flutter/flutter/issues/54729 // If the intrinsic height does not match that of the height after // performLayout, this will fail. - await tester.pumpWidget(_buildTest(isDense: false)); + await tester.pumpWidget(buildTest(isDense: false)); }); testWidgets('When isDense, intrinsic height can go below kMinInteractiveDimension height', (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/issues/54729 // If the intrinsic height does not match that of the height after // performLayout, this will fail. - await tester.pumpWidget(_buildTest(isDense: true)); + await tester.pumpWidget(buildTest(isDense: true)); }); }); }); @@ -10058,7 +10058,7 @@ void main() { ), )); - await _showSelectionMenuAt(tester, controller, controller.text.indexOf('test')); + await showSelectionMenuAt(tester, controller, controller.text.indexOf('test')); await tester.pumpAndSettle(); expect(tester.takeException(), isNull); }, diff --git a/packages/flutter/test/material/text_selection_toolbar_test.dart b/packages/flutter/test/material/text_selection_toolbar_test.dart index c6daa2ee28930..4208c46e2a643 100644 --- a/packages/flutter/test/material/text_selection_toolbar_test.dart +++ b/packages/flutter/test/material/text_selection_toolbar_test.dart @@ -63,7 +63,7 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized(); // Find by a runtimeType String, including private types. - Finder _findPrivate(String type) { + Finder findPrivate(String type) { return find.descendant( of: find.byType(MaterialApp), matching: find.byWidgetPredicate((Widget w) => '${w.runtimeType}' == type), @@ -73,9 +73,9 @@ void main() { // Finding TextSelectionToolbar won't give you the position as the user sees // it because it's a full-sized Stack at the top level. This method finds the // visible part of the toolbar for use in measurements. - Finder _findToolbar() => _findPrivate('_TextSelectionToolbarOverflowable'); + Finder findToolbar() => findPrivate('_TextSelectionToolbarOverflowable'); - Finder _findOverflowButton() => _findPrivate('_TextSelectionToolbarOverflowButton'); + Finder findOverflowButton() => findPrivate('_TextSelectionToolbarOverflowButton'); testWidgets('puts children in an overflow menu if they overflow', (WidgetTester tester) async { late StateSetter setState; @@ -100,7 +100,7 @@ void main() { // All children fit on the screen, so they are all rendered. expect(find.byType(TestBox), findsNWidgets(children.length)); - expect(_findOverflowButton(), findsNothing); + expect(findOverflowButton(), findsNothing); // Adding one more child makes the children overflow. setState(() { @@ -110,19 +110,19 @@ void main() { }); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(children.length - 1)); - expect(_findOverflowButton(), findsOneWidget); + expect(findOverflowButton(), findsOneWidget); // Tap the overflow button to show the overflow menu. - await tester.tap(_findOverflowButton()); + await tester.tap(findOverflowButton()); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(1)); - expect(_findOverflowButton(), findsOneWidget); + expect(findOverflowButton(), findsOneWidget); // Tap the overflow button again to hide the overflow menu. - await tester.tap(_findOverflowButton()); + await tester.tap(findOverflowButton()); await tester.pumpAndSettle(); expect(find.byType(TestBox), findsNWidgets(children.length - 1)); - expect(_findOverflowButton(), findsOneWidget); + expect(findOverflowButton(), findsOneWidget); }); testWidgets('positions itself at anchorAbove if it fits', (WidgetTester tester) async { @@ -154,7 +154,7 @@ void main() { // When the toolbar doesn't fit above aboveAnchor, it positions itself below // belowAnchor. - double toolbarY = tester.getTopLeft(_findToolbar()).dy; + double toolbarY = tester.getTopLeft(findToolbar()).dy; expect(toolbarY, equals(anchorBelowY)); // Even when it barely doesn't fit. @@ -162,7 +162,7 @@ void main() { anchorAboveY = 50.0; }); await tester.pump(); - toolbarY = tester.getTopLeft(_findToolbar()).dy; + toolbarY = tester.getTopLeft(findToolbar()).dy; expect(toolbarY, equals(anchorBelowY)); // When it does fit above aboveAnchor, it positions itself there. @@ -170,7 +170,7 @@ void main() { anchorAboveY = 60.0; }); await tester.pump(); - toolbarY = tester.getTopLeft(_findToolbar()).dy; + toolbarY = tester.getTopLeft(findToolbar()).dy; expect(toolbarY, equals(anchorAboveY - height)); }); diff --git a/packages/flutter/test/material/will_pop_test.dart b/packages/flutter/test/material/will_pop_test.dart index 80fef13b78950..b99e473d65b97 100644 --- a/packages/flutter/test/material/will_pop_test.dart +++ b/packages/flutter/test/material/will_pop_test.dart @@ -413,7 +413,7 @@ void main() { ), ]; - Widget _buildNavigator(Key? key, List> pages) { + Widget buildNavigator(Key? key, List> pages) { return Navigator( key: key, pages: pages, @@ -430,9 +430,9 @@ void main() { builder: (BuildContext context, StateSetter setState) { contentsSetState = setState; if (moveToAnotherNavigator) { - return _buildNavigator(const ValueKey(1), pages); + return buildNavigator(const ValueKey(1), pages); } - return _buildNavigator(const ValueKey(2), pages); + return buildNavigator(const ValueKey(2), pages); }, ), ), diff --git a/packages/flutter/test/painting/decoration_test.dart b/packages/flutter/test/painting/decoration_test.dart index d5726cfc1a2a6..deeb6638da7d9 100644 --- a/packages/flutter/test/painting/decoration_test.dart +++ b/packages/flutter/test/painting/decoration_test.dart @@ -697,11 +697,11 @@ void main() { final ImageStream stream = provider.resolve(ImageConfiguration.empty); final Completer infoCompleter = Completer(); - void _listener(ImageInfo image, bool syncCall) { + void listener(ImageInfo image, bool syncCall) { assert(!infoCompleter.isCompleted); infoCompleter.complete(image); } - stream.addListener(ImageStreamListener(_listener)); + stream.addListener(ImageStreamListener(listener)); final ImageInfo info = await infoCompleter.future; final int baselineRefCount = info.image.debugGetOpenHandleStackTraces()!.length; diff --git a/packages/flutter/test/painting/image_cache_test.dart b/packages/flutter/test/painting/image_cache_test.dart index effa7261fd117..13449fa197970 100644 --- a/packages/flutter/test/painting/image_cache_test.dart +++ b/packages/flutter/test/painting/image_cache_test.dart @@ -136,15 +136,15 @@ void main() { }); test('Returns null if an error is caught resolving an image', () { - Future _basicDecoder(Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool? allowUpscaling}) { + Future basicDecoder(Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool? allowUpscaling}) { return PaintingBinding.instance.instantiateImageCodec(bytes, cacheWidth: cacheWidth, cacheHeight: cacheHeight, allowUpscaling: allowUpscaling ?? false); } final ErrorImageProvider errorImage = ErrorImageProvider(); - expect(() => imageCache.putIfAbsent(errorImage, () => errorImage.load(errorImage, _basicDecoder)), throwsA(isA())); + expect(() => imageCache.putIfAbsent(errorImage, () => errorImage.load(errorImage, basicDecoder)), throwsA(isA())); bool caughtError = false; final ImageStreamCompleter? result = imageCache.putIfAbsent( errorImage, - () => errorImage.load(errorImage, _basicDecoder), + () => errorImage.load(errorImage, basicDecoder), onError: (dynamic error, StackTrace? stackTrace) { caughtError = true; }, diff --git a/packages/flutter/test/painting/image_provider_and_image_cache_test.dart b/packages/flutter/test/painting/image_provider_and_image_cache_test.dart index 1481a7ad5debd..d1121e56fec82 100644 --- a/packages/flutter/test/painting/image_provider_and_image_cache_test.dart +++ b/packages/flutter/test/painting/image_provider_and_image_cache_test.dart @@ -17,7 +17,7 @@ import 'mocks_for_image_cache.dart'; void main() { TestRenderingFlutterBinding.ensureInitialized(); - Future _basicDecoder(Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool? allowUpscaling}) { + Future basicDecoder(Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool? allowUpscaling}) { return PaintingBinding.instance.instantiateImageCodec(bytes, cacheWidth: cacheWidth, cacheHeight: cacheHeight, allowUpscaling: allowUpscaling ?? false); } @@ -76,7 +76,7 @@ void main() { final Uint8List bytes = Uint8List.fromList(kTransparentImage); final MemoryImage imageProvider = MemoryImage(bytes); final ImageStreamCompleter cacheStream = otherCache.putIfAbsent( - imageProvider, () => imageProvider.load(imageProvider, _basicDecoder), + imageProvider, () => imageProvider.load(imageProvider, basicDecoder), )!; final ImageStream stream = imageProvider.resolve(ImageConfiguration.empty); final Completer completer = Completer(); diff --git a/packages/flutter/test/painting/image_provider_network_image_test.dart b/packages/flutter/test/painting/image_provider_network_image_test.dart index c465685f112bf..807e6b0568f9d 100644 --- a/packages/flutter/test/painting/image_provider_network_image_test.dart +++ b/packages/flutter/test/painting/image_provider_network_image_test.dart @@ -18,7 +18,7 @@ import '../rendering/rendering_tester.dart'; void main() { TestRenderingFlutterBinding.ensureInitialized(); - Future _basicDecoder(Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool? allowUpscaling}) { + Future basicDecoder(Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool? allowUpscaling}) { return PaintingBinding.instance.instantiateImageCodec(bytes, cacheWidth: cacheWidth, cacheHeight: cacheHeight, allowUpscaling: allowUpscaling ?? false); } @@ -77,7 +77,7 @@ void main() { Future loadNetworkImage() async { final NetworkImage networkImage = NetworkImage(nonconst('foo')); - final ImageStreamCompleter completer = networkImage.load(networkImage, _basicDecoder); + final ImageStreamCompleter completer = networkImage.load(networkImage, basicDecoder); completer.addListener(ImageStreamListener( (ImageInfo image, bool synchronousCall) { }, onError: (dynamic error, StackTrace? stackTrace) { @@ -189,7 +189,7 @@ void main() { debugNetworkImageHttpClientProvider = null; }, skip: isBrowser); // [intended] Browser does not resolve images this way. - Future _decoder(Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool? allowUpscaling}) async { + Future decoder(Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool? allowUpscaling}) async { return FakeCodec(); } @@ -207,7 +207,7 @@ void main() { const NetworkImage provider = NetworkImage(url); - final MultiFrameImageStreamCompleter completer = provider.load(provider, _decoder) as MultiFrameImageStreamCompleter; + final MultiFrameImageStreamCompleter completer = provider.load(provider, decoder) as MultiFrameImageStreamCompleter; expect(completer.debugLabel, url); }); diff --git a/packages/flutter/test/painting/image_provider_test.dart b/packages/flutter/test/painting/image_provider_test.dart index d00a7506545de..4e195778551ee 100644 --- a/packages/flutter/test/painting/image_provider_test.dart +++ b/packages/flutter/test/painting/image_provider_test.dart @@ -95,7 +95,7 @@ void main() { expect(await error.future, isStateError); }); - Future _decoder(Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool? allowUpscaling}) async { + Future decoder(Uint8List bytes, {int? cacheWidth, int? cacheHeight, bool? allowUpscaling}) async { return FakeCodec(); } @@ -104,7 +104,7 @@ void main() { final File file = fs.file('/blue.png')..createSync(recursive: true)..writeAsBytesSync(kBlueSquarePng); final FileImage provider = FileImage(file); - final MultiFrameImageStreamCompleter completer = provider.load(provider, _decoder) as MultiFrameImageStreamCompleter; + final MultiFrameImageStreamCompleter completer = provider.load(provider, decoder) as MultiFrameImageStreamCompleter; expect(completer.debugLabel, file.path); }); @@ -113,7 +113,7 @@ void main() { final Uint8List bytes = Uint8List.fromList(kBlueSquarePng); final MemoryImage provider = MemoryImage(bytes); - final MultiFrameImageStreamCompleter completer = provider.load(provider, _decoder) as MultiFrameImageStreamCompleter; + final MultiFrameImageStreamCompleter completer = provider.load(provider, decoder) as MultiFrameImageStreamCompleter; expect(completer.debugLabel, 'MemoryImage(${describeIdentity(bytes)})'); }); @@ -122,7 +122,7 @@ void main() { const String asset = 'images/blue.png'; final ExactAssetImage provider = ExactAssetImage(asset, bundle: _TestAssetBundle()); final AssetBundleImageKey key = await provider.obtainKey(ImageConfiguration.empty); - final MultiFrameImageStreamCompleter completer = provider.load(key, _decoder) as MultiFrameImageStreamCompleter; + final MultiFrameImageStreamCompleter completer = provider.load(key, decoder) as MultiFrameImageStreamCompleter; expect(completer.debugLabel, asset); }); @@ -132,7 +132,7 @@ void main() { final ResizeImage provider = ResizeImage(MemoryImage(bytes), width: 40, height: 40); final MultiFrameImageStreamCompleter completer = provider.load( await provider.obtainKey(ImageConfiguration.empty), - _decoder, + decoder, ) as MultiFrameImageStreamCompleter; expect(completer.debugLabel, 'MemoryImage(${describeIdentity(bytes)}) - Resized(40×40)'); diff --git a/packages/flutter/test/painting/image_resolution_test.dart b/packages/flutter/test/painting/image_resolution_test.dart index df80f773fa824..b03580c9217a4 100644 --- a/packages/flutter/test/painting/image_resolution_test.dart +++ b/packages/flutter/test/painting/image_resolution_test.dart @@ -36,7 +36,7 @@ class TestAssetBundle extends CachingAssetBundle { void main() { group('1.0 scale device tests', () { - void _buildAndTestWithOneAsset(String mainAssetPath) { + void buildAndTestWithOneAsset(String mainAssetPath) { final Map> assetBundleMap = >{}; assetBundleMap[mainAssetPath] = []; @@ -55,27 +55,27 @@ void main() { } test('When asset is main variant check scale is 1.0', () { - _buildAndTestWithOneAsset('assets/normalFolder/normalFile.png'); + buildAndTestWithOneAsset('assets/normalFolder/normalFile.png'); }); test('When asset path and key are the same string even though it could be took as a 3.0x variant', () async { - _buildAndTestWithOneAsset('assets/parentFolder/3.0x/normalFile.png'); + buildAndTestWithOneAsset('assets/parentFolder/3.0x/normalFile.png'); }); test('When asset path contains variant identifier as part of parent folder name scale is 1.0', () { - _buildAndTestWithOneAsset('assets/parentFolder/__3.0x__/leafFolder/normalFile.png'); + buildAndTestWithOneAsset('assets/parentFolder/__3.0x__/leafFolder/normalFile.png'); }); test('When asset path contains variant identifier as part of leaf folder name scale is 1.0', () { - _buildAndTestWithOneAsset('assets/parentFolder/__3.0x_leaf_folder_/normalFile.png'); + buildAndTestWithOneAsset('assets/parentFolder/__3.0x_leaf_folder_/normalFile.png'); }); test('When asset path contains variant identifier as part of parent folder name scale is 1.0', () { - _buildAndTestWithOneAsset('assets/parentFolder/__3.0x__/leafFolder/normalFile.png'); + buildAndTestWithOneAsset('assets/parentFolder/__3.0x__/leafFolder/normalFile.png'); }); test('When asset path contains variant identifier in parent folder scale is 1.0', () { - _buildAndTestWithOneAsset('assets/parentFolder/3.0x/leafFolder/normalFile.png'); + buildAndTestWithOneAsset('assets/parentFolder/3.0x/leafFolder/normalFile.png'); }); }); @@ -151,7 +151,7 @@ void main() { const String variantPath = 'assets/normalFolder/3.0x/normalFile.png'; - void _buildBundleAndTestVariantLogic( + void buildBundleAndTestVariantLogic( double deviceRatio, double chosenAssetRatio, String expectedAssetPath, @@ -179,26 +179,26 @@ void main() { } test('Obvious case 1.0 - we have exact asset', () { - _buildBundleAndTestVariantLogic(1.0, 1.0, mainAssetPath); + buildBundleAndTestVariantLogic(1.0, 1.0, mainAssetPath); }); test('Obvious case 3.0 - we have exact asset', () { - _buildBundleAndTestVariantLogic(3.0, 3.0, variantPath); + buildBundleAndTestVariantLogic(3.0, 3.0, variantPath); }); test('Typical case 2.0', () { - _buildBundleAndTestVariantLogic(2.0, 1.0, mainAssetPath); + buildBundleAndTestVariantLogic(2.0, 1.0, mainAssetPath); }); test('Borderline case 2.01', () { - _buildBundleAndTestVariantLogic(2.01, 3.0, variantPath); + buildBundleAndTestVariantLogic(2.01, 3.0, variantPath); }); test('Borderline case 2.9', () { - _buildBundleAndTestVariantLogic(2.9, 3.0, variantPath); + buildBundleAndTestVariantLogic(2.9, 3.0, variantPath); }); test('Typical case 4.0', () { - _buildBundleAndTestVariantLogic(4.0, 3.0, variantPath); + buildBundleAndTestVariantLogic(4.0, 3.0, variantPath); }); }); diff --git a/packages/flutter/test/rendering/layers_test.dart b/packages/flutter/test/rendering/layers_test.dart index f263c3fb58824..cc39cf44402ba 100644 --- a/packages/flutter/test/rendering/layers_test.dart +++ b/packages/flutter/test/rendering/layers_test.dart @@ -333,7 +333,7 @@ void main() { expect(layer.debugSubtreeNeedsAddToScene, true); } - List _getDebugInfo(Layer layer) { + List getDebugInfo(Layer layer) { final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder(); layer.debugFillProperties(builder); return builder.properties @@ -342,25 +342,25 @@ void main() { } test('ClipRectLayer prints clipBehavior in debug info', () { - expect(_getDebugInfo(ClipRectLayer()), contains('clipBehavior: Clip.hardEdge')); + expect(getDebugInfo(ClipRectLayer()), contains('clipBehavior: Clip.hardEdge')); expect( - _getDebugInfo(ClipRectLayer(clipBehavior: Clip.antiAliasWithSaveLayer)), + getDebugInfo(ClipRectLayer(clipBehavior: Clip.antiAliasWithSaveLayer)), contains('clipBehavior: Clip.antiAliasWithSaveLayer'), ); }); test('ClipRRectLayer prints clipBehavior in debug info', () { - expect(_getDebugInfo(ClipRRectLayer()), contains('clipBehavior: Clip.antiAlias')); + expect(getDebugInfo(ClipRRectLayer()), contains('clipBehavior: Clip.antiAlias')); expect( - _getDebugInfo(ClipRRectLayer(clipBehavior: Clip.antiAliasWithSaveLayer)), + getDebugInfo(ClipRRectLayer(clipBehavior: Clip.antiAliasWithSaveLayer)), contains('clipBehavior: Clip.antiAliasWithSaveLayer'), ); }); test('ClipPathLayer prints clipBehavior in debug info', () { - expect(_getDebugInfo(ClipPathLayer()), contains('clipBehavior: Clip.antiAlias')); + expect(getDebugInfo(ClipPathLayer()), contains('clipBehavior: Clip.antiAlias')); expect( - _getDebugInfo(ClipPathLayer(clipBehavior: Clip.antiAliasWithSaveLayer)), + getDebugInfo(ClipPathLayer(clipBehavior: Clip.antiAliasWithSaveLayer)), contains('clipBehavior: Clip.antiAliasWithSaveLayer'), ); }); @@ -368,7 +368,7 @@ void main() { test('BackdropFilterLayer prints filter and blendMode in debug info', () { final ImageFilter filter = ImageFilter.blur(sigmaX: 1.0, sigmaY: 1.0, tileMode: TileMode.repeated); final BackdropFilterLayer layer = BackdropFilterLayer(filter: filter, blendMode: BlendMode.clear); - final List info = _getDebugInfo(layer); + final List info = getDebugInfo(layer); expect(info, contains(isBrowser ? 'filter: ImageFilter.blur(1, 1, TileMode.repeated)' : 'filter: ImageFilter.blur(1.0, 1.0, repeated)')); expect(info, contains('blendMode: clear')); }); @@ -382,7 +382,7 @@ void main() { layer.picture = picture; layer.isComplexHint = true; layer.willChangeHint = false; - final List info = _getDebugInfo(layer); + final List info = getDebugInfo(layer); expect(info, contains('picture: ${describeIdentity(picture)}')); expect(info, isNot(contains('engine layer: ${describeIdentity(null)}'))); expect(info, contains('raster cache hints: isComplex = true, willChange = false')); @@ -390,11 +390,11 @@ void main() { test('Layer prints engineLayer if it is not null in debug info', () { final ConcreteLayer layer = ConcreteLayer(); - List info = _getDebugInfo(layer); + List info = getDebugInfo(layer); expect(info, isNot(contains('engine layer: ${describeIdentity(null)}'))); layer.engineLayer = FakeEngineLayer(); - info = _getDebugInfo(layer); + info = getDebugInfo(layer); expect(info, contains('engine layer: ${describeIdentity(layer.engineLayer)}')); }); diff --git a/packages/flutter/test/rendering/mouse_tracker_cursor_test.dart b/packages/flutter/test/rendering/mouse_tracker_cursor_test.dart index e983df30e8bb5..a6216c0f12180 100644 --- a/packages/flutter/test/rendering/mouse_tracker_cursor_test.dart +++ b/packages/flutter/test/rendering/mouse_tracker_cursor_test.dart @@ -20,7 +20,7 @@ void main() { MethodCallHandler? methodCallHandler; // Only one of `logCursors` and `cursorHandler` should be specified. - void _setUpMouseTracker({ + void setUpMouseTracker({ required SimpleAnnotationFinder annotationFinder, List<_CursorUpdateDetails>? logCursors, MethodCallHandler? cursorHandler, @@ -71,7 +71,7 @@ void main() { test('Should work on platforms that does not support mouse cursor', () async { const TestAnnotationTarget annotation = TestAnnotationTarget(cursor: SystemMouseCursors.grabbing); - _setUpMouseTracker( + setUpMouseTracker( annotationFinder: (Offset position) => [annotation], cursorHandler: (MethodCall call) async { return null; @@ -89,7 +89,7 @@ void main() { test('pointer is added and removed out of any annotations', () { final List<_CursorUpdateDetails> logCursors = <_CursorUpdateDetails>[]; TestAnnotationTarget? annotation; - _setUpMouseTracker( + setUpMouseTracker( annotationFinder: (Offset position) => [if (annotation != null) annotation], logCursors: logCursors, ); @@ -146,7 +146,7 @@ void main() { test('pointer is added and removed in an annotation', () { final List<_CursorUpdateDetails> logCursors = <_CursorUpdateDetails>[]; TestAnnotationTarget? annotation; - _setUpMouseTracker( + setUpMouseTracker( annotationFinder: (Offset position) => [if (annotation != null) annotation], logCursors: logCursors, ); @@ -204,7 +204,7 @@ void main() { test('pointer change caused by new frames', () { final List<_CursorUpdateDetails> logCursors = <_CursorUpdateDetails>[]; TestAnnotationTarget? annotation; - _setUpMouseTracker( + setUpMouseTracker( annotationFinder: (Offset position) => [if (annotation != null) annotation], logCursors: logCursors, ); @@ -247,7 +247,7 @@ void main() { test('The first annotation with non-deferring cursor is used', () { final List<_CursorUpdateDetails> logCursors = <_CursorUpdateDetails>[]; late List annotations; - _setUpMouseTracker( + setUpMouseTracker( annotationFinder: (Offset position) sync* { yield* annotations; }, logCursors: logCursors, ); @@ -275,7 +275,7 @@ void main() { test('Annotations with deferring cursors are ignored', () { final List<_CursorUpdateDetails> logCursors = <_CursorUpdateDetails>[]; late List annotations; - _setUpMouseTracker( + setUpMouseTracker( annotationFinder: (Offset position) sync* { yield* annotations; }, logCursors: logCursors, ); @@ -303,7 +303,7 @@ void main() { test('Finding no annotation is equivalent to specifying default cursor', () { final List<_CursorUpdateDetails> logCursors = <_CursorUpdateDetails>[]; TestAnnotationTarget? annotation; - _setUpMouseTracker( + setUpMouseTracker( annotationFinder: (Offset position) => [if (annotation != null) annotation], logCursors: logCursors, ); @@ -345,7 +345,7 @@ void main() { test('Removing a pointer resets it back to the default cursor', () { final List<_CursorUpdateDetails> logCursors = <_CursorUpdateDetails>[]; TestAnnotationTarget? annotation; - _setUpMouseTracker( + setUpMouseTracker( annotationFinder: (Offset position) => [if (annotation != null) annotation], logCursors: logCursors, ); @@ -375,7 +375,7 @@ void main() { test('Pointing devices display cursors separately', () { final List<_CursorUpdateDetails> logCursors = <_CursorUpdateDetails>[]; - _setUpMouseTracker( + setUpMouseTracker( annotationFinder: (Offset position) sync* { if (position.dx > 200) { yield const TestAnnotationTarget(cursor: SystemMouseCursors.forbidden); diff --git a/packages/flutter/test/rendering/mouse_tracker_test.dart b/packages/flutter/test/rendering/mouse_tracker_test.dart index e50516c301cdc..9ddae1e9505da 100644 --- a/packages/flutter/test/rendering/mouse_tracker_test.dart +++ b/packages/flutter/test/rendering/mouse_tracker_test.dart @@ -17,7 +17,7 @@ typedef SimpleAnnotationFinder = Iterable Function(Offset o void main() { final TestMouseTrackerFlutterBinding binding = TestMouseTrackerFlutterBinding(); - void _setUpMouseAnnotationFinder(SimpleAnnotationFinder annotationFinder) { + void setUpMouseAnnotationFinder(SimpleAnnotationFinder annotationFinder) { binding.setHitTest((BoxHitTestResult result, Offset position) { for (final TestAnnotationEntry entry in annotationFinder(position)) { result.addWithRawTransform( @@ -38,7 +38,7 @@ void main() { // `logEvents`. // This annotation also contains a cursor with a value of `testCursor`. // The mouse tracker records the cursor requests it receives to `logCursors`. - TestAnnotationTarget _setUpWithOneAnnotation({ + TestAnnotationTarget setUpWithOneAnnotation({ required List logEvents, }) { final TestAnnotationTarget oneAnnotation = TestAnnotationTarget( @@ -55,7 +55,7 @@ void main() { logEvents.add(event); }, ); - _setUpMouseAnnotationFinder( + setUpMouseAnnotationFinder( (Offset position) sync* { yield TestAnnotationEntry(oneAnnotation); }, @@ -77,7 +77,7 @@ void main() { test('should detect enter, hover, and exit from Added, Hover, and Removed events', () { final List events = []; - _setUpWithOneAnnotation(logEvents: events); + setUpWithOneAnnotation(logEvents: events); final List listenerLogs = []; _mouseTracker.addListener(() { @@ -135,7 +135,7 @@ void main() { test('should correctly handle multiple devices', () { final List events = []; - _setUpWithOneAnnotation(logEvents: events); + setUpWithOneAnnotation(logEvents: events); expect(_mouseTracker.mouseIsConnected, isFalse); @@ -216,7 +216,7 @@ void main() { test('should not handle non-hover events', () { final List events = []; - _setUpWithOneAnnotation(logEvents: events); + setUpWithOneAnnotation(logEvents: events); RendererBinding.instance.platformDispatcher.onPointerDataPacket!(ui.PointerDataPacket(data: [ _pointerData(PointerChange.add, const Offset(0.0, 101.0)), @@ -251,7 +251,7 @@ void main() { onHover: (PointerHoverEvent event) => events.add(event), onExit: (PointerExitEvent event) => events.add(event), ); - _setUpMouseAnnotationFinder((Offset position) sync* { + setUpMouseAnnotationFinder((Offset position) sync* { if (isInHitRegion) { yield TestAnnotationEntry(annotation, Matrix4.translationValues(10, 20, 0)); } @@ -299,7 +299,7 @@ void main() { onHover: (PointerHoverEvent event) => events.add(event), onExit: (PointerExitEvent event) => events.add(event), ); - _setUpMouseAnnotationFinder((Offset position) sync* { + setUpMouseAnnotationFinder((Offset position) sync* { if (isInHitRegion) { yield TestAnnotationEntry(annotation, Matrix4.translationValues(10, 20, 0)); } @@ -349,7 +349,7 @@ void main() { onHover: (PointerHoverEvent event) => events.add(event), onExit: (PointerExitEvent event) => events.add(event), ); - _setUpMouseAnnotationFinder((Offset position) sync* { + setUpMouseAnnotationFinder((Offset position) sync* { if (isInHitRegion) { yield TestAnnotationEntry(annotation, Matrix4.translationValues(10, 20, 0)); } @@ -387,7 +387,7 @@ void main() { onHover: (PointerHoverEvent event) => events.add(event), onExit: (PointerExitEvent event) => events.add(event), ); - _setUpMouseAnnotationFinder((Offset position) sync* { + setUpMouseAnnotationFinder((Offset position) sync* { if (isInHitRegion) { yield TestAnnotationEntry(annotation, Matrix4.translationValues(10, 20, 0)); } @@ -426,7 +426,7 @@ void main() { }); test('should not schedule post-frame callbacks when no mouse is connected', () { - _setUpMouseAnnotationFinder((Offset position) sync* { + setUpMouseAnnotationFinder((Offset position) sync* { }); // Connect a touch device, which should not be recognized by MouseTracker @@ -447,7 +447,7 @@ void main() { final TestAnnotationTarget annotation2 = TestAnnotationTarget( onExit: (PointerExitEvent event) {}, ); - _setUpMouseAnnotationFinder((Offset position) sync* { + setUpMouseAnnotationFinder((Offset position) sync* { if (isInHitRegionOne) yield TestAnnotationEntry(annotation1); else if (isInHitRegionTwo) @@ -487,7 +487,7 @@ void main() { onExit: (PointerExitEvent event) => logs.add('exitB'), onHover: (PointerHoverEvent event) => logs.add('hoverB'), ); - _setUpMouseAnnotationFinder((Offset position) sync* { + setUpMouseAnnotationFinder((Offset position) sync* { // Children's annotations come before parents'. if (isInB) { yield TestAnnotationEntry(annotationB); @@ -541,7 +541,7 @@ void main() { onExit: (PointerExitEvent event) => logs.add('exitB'), onHover: (PointerHoverEvent event) => logs.add('hoverB'), ); - _setUpMouseAnnotationFinder((Offset position) sync* { + setUpMouseAnnotationFinder((Offset position) sync* { if (isInA) { yield TestAnnotationEntry(annotationA); } else if (isInB) { diff --git a/packages/flutter/test/rendering/proxy_box_test.dart b/packages/flutter/test/rendering/proxy_box_test.dart index 4957f2f0c63ba..1d6eaec5663cb 100644 --- a/packages/flutter/test/rendering/proxy_box_test.dart +++ b/packages/flutter/test/rendering/proxy_box_test.dart @@ -384,7 +384,7 @@ void main() { )); }); - void _testFittedBoxWithClipRectLayer() { + void testFittedBoxWithClipRectLayer() { _testLayerReuse(RenderFittedBox( fit: BoxFit.cover, clipBehavior: Clip.hardEdge, @@ -395,7 +395,7 @@ void main() { )); } - void _testFittedBoxWithTransformLayer() { + void testFittedBoxWithTransformLayer() { _testLayerReuse(RenderFittedBox( fit: BoxFit.fill, // Inject opacity under the clip to force compositing. @@ -406,20 +406,20 @@ void main() { } test('RenderFittedBox reuses ClipRectLayer', () { - _testFittedBoxWithClipRectLayer(); + testFittedBoxWithClipRectLayer(); }); test('RenderFittedBox reuses TransformLayer', () { - _testFittedBoxWithTransformLayer(); + testFittedBoxWithTransformLayer(); }); test('RenderFittedBox switches between ClipRectLayer and TransformLayer, and reuses them', () { - _testFittedBoxWithClipRectLayer(); + testFittedBoxWithClipRectLayer(); // clip -> transform - _testFittedBoxWithTransformLayer(); + testFittedBoxWithTransformLayer(); // transform -> clip - _testFittedBoxWithClipRectLayer(); + testFittedBoxWithClipRectLayer(); }); test('RenderFittedBox respects clipBehavior', () { diff --git a/packages/flutter/test/rendering/slivers_test.dart b/packages/flutter/test/rendering/slivers_test.dart index 27fe043111fbf..aa39323966abb 100644 --- a/packages/flutter/test/rendering/slivers_test.dart +++ b/packages/flutter/test/rendering/slivers_test.dart @@ -264,7 +264,7 @@ void main() { expect(result.path.first.target, equals(c)); }); - Offset _getPaintOrigin(RenderObject render) { + Offset getPaintOrigin(RenderObject render) { final Vector3 transformed3 = render.getTransformTo(null).perspectiveTransform(Vector3(0.0, 0.0, 0.0)); return Offset(transformed3.x, transformed3.y); } @@ -300,11 +300,11 @@ void main() { expect(d.localToGlobal(Offset.zero), const Offset(1200.0, 0.0)); expect(e.localToGlobal(Offset.zero), const Offset(1600.0, 0.0)); - expect(_getPaintOrigin(sliverA), Offset.zero); - expect(_getPaintOrigin(sliverB), const Offset(400.0, 0.0)); - expect(_getPaintOrigin(sliverC), const Offset(800.0, 0.0)); - expect(_getPaintOrigin(sliverD), const Offset(1200.0, 0.0)); - expect(_getPaintOrigin(sliverE), const Offset(1600.0, 0.0)); + expect(getPaintOrigin(sliverA), Offset.zero); + expect(getPaintOrigin(sliverB), const Offset(400.0, 0.0)); + expect(getPaintOrigin(sliverC), const Offset(800.0, 0.0)); + expect(getPaintOrigin(sliverD), const Offset(1200.0, 0.0)); + expect(getPaintOrigin(sliverE), const Offset(1600.0, 0.0)); root.offset = ViewportOffset.fixed(200.0); pumpFrame(); @@ -314,11 +314,11 @@ void main() { expect(d.localToGlobal(Offset.zero), const Offset(1000.0, 0.0)); expect(e.localToGlobal(Offset.zero), const Offset(1400.0, 0.0)); - expect(_getPaintOrigin(sliverA), Offset.zero); - expect(_getPaintOrigin(sliverB), const Offset(200.0, 0.0)); - expect(_getPaintOrigin(sliverC), const Offset(600.0, 0.0)); - expect(_getPaintOrigin(sliverD), const Offset(1000.0, 0.0)); - expect(_getPaintOrigin(sliverE), const Offset(1400.0, 0.0)); + expect(getPaintOrigin(sliverA), Offset.zero); + expect(getPaintOrigin(sliverB), const Offset(200.0, 0.0)); + expect(getPaintOrigin(sliverC), const Offset(600.0, 0.0)); + expect(getPaintOrigin(sliverD), const Offset(1000.0, 0.0)); + expect(getPaintOrigin(sliverE), const Offset(1400.0, 0.0)); root.offset = ViewportOffset.fixed(600.0); pumpFrame(); @@ -328,11 +328,11 @@ void main() { expect(d.localToGlobal(Offset.zero), const Offset(600.0, 0.0)); expect(e.localToGlobal(Offset.zero), const Offset(1000.0, 0.0)); - expect(_getPaintOrigin(sliverA), Offset.zero); - expect(_getPaintOrigin(sliverB), Offset.zero); - expect(_getPaintOrigin(sliverC), const Offset(200.0, 0.0)); - expect(_getPaintOrigin(sliverD), const Offset(600.0, 0.0)); - expect(_getPaintOrigin(sliverE), const Offset(1000.0, 0.0)); + expect(getPaintOrigin(sliverA), Offset.zero); + expect(getPaintOrigin(sliverB), Offset.zero); + expect(getPaintOrigin(sliverC), const Offset(200.0, 0.0)); + expect(getPaintOrigin(sliverD), const Offset(600.0, 0.0)); + expect(getPaintOrigin(sliverE), const Offset(1000.0, 0.0)); root.offset = ViewportOffset.fixed(900.0); pumpFrame(); @@ -342,11 +342,11 @@ void main() { expect(d.localToGlobal(Offset.zero), const Offset(300.0, 0.0)); expect(e.localToGlobal(Offset.zero), const Offset(700.0, 0.0)); - expect(_getPaintOrigin(sliverA), Offset.zero); - expect(_getPaintOrigin(sliverB), Offset.zero); - expect(_getPaintOrigin(sliverC), Offset.zero); - expect(_getPaintOrigin(sliverD), const Offset(300.0, 0.0)); - expect(_getPaintOrigin(sliverE), const Offset(700.0, 0.0)); + expect(getPaintOrigin(sliverA), Offset.zero); + expect(getPaintOrigin(sliverB), Offset.zero); + expect(getPaintOrigin(sliverC), Offset.zero); + expect(getPaintOrigin(sliverD), const Offset(300.0, 0.0)); + expect(getPaintOrigin(sliverE), const Offset(700.0, 0.0)); final BoxHitTestResult result = BoxHitTestResult(); root.hitTest(result, position: const Offset(150.0, 450.0)); diff --git a/packages/flutter/test/rendering/viewport_test.dart b/packages/flutter/test/rendering/viewport_test.dart index 2cb80c45e0b96..fac89a8c9bb1d 100644 --- a/packages/flutter/test/rendering/viewport_test.dart +++ b/packages/flutter/test/rendering/viewport_test.dart @@ -1845,7 +1845,7 @@ void main() { }); group('Overscrolling RenderShrinkWrappingViewport', () { - Widget _buildSimpleShrinkWrap({ + Widget buildSimpleShrinkWrap({ ScrollController? controller, Axis scrollDirection = Axis.vertical, ScrollPhysics? physics, @@ -1867,7 +1867,7 @@ void main() { ); } - Widget _buildClippingShrinkWrap( + Widget buildClippingShrinkWrap( ScrollController controller, { bool constrain = false, }) { @@ -1912,7 +1912,7 @@ void main() { // Regression test for https://github.com/flutter/flutter/issues/89717 final ScrollController controller = ScrollController(); await tester.pumpWidget( - _buildClippingShrinkWrap(controller, constrain: true) + buildClippingShrinkWrap(controller, constrain: true) ); expect(controller.offset, 0.0); expect(tester.getTopLeft(find.text('Item 0')).dy, 100.0); @@ -1939,7 +1939,7 @@ void main() { // Regression test for https://github.com/flutter/flutter/issues/89717 final ScrollController controller = ScrollController(); await tester.pumpWidget( - _buildClippingShrinkWrap(controller) + buildClippingShrinkWrap(controller) ); expect(controller.offset, 0.0); expect(tester.getTopLeft(find.text('Item 0')).dy, 100.0); @@ -1967,7 +1967,7 @@ void main() { // Scrollables should overscroll by default on iOS and macOS final ScrollController controller = ScrollController(); await tester.pumpWidget( - _buildSimpleShrinkWrap(controller: controller), + buildSimpleShrinkWrap(controller: controller), ); expect(controller.offset, 0.0); expect(tester.getTopLeft(find.text('Item 0')).dy, 0.0); @@ -2006,7 +2006,7 @@ void main() { // Scrollables should overscroll by default on iOS and macOS final ScrollController controller = ScrollController(); await tester.pumpWidget( - _buildSimpleShrinkWrap(controller: controller, scrollDirection: Axis.horizontal), + buildSimpleShrinkWrap(controller: controller, scrollDirection: Axis.horizontal), ); expect(controller.offset, 0.0); expect(tester.getTopLeft(find.text('Item 0')).dx, 0.0); @@ -2045,7 +2045,7 @@ void main() { // Scrollables should overscroll when the scroll physics allow final ScrollController controller = ScrollController(); await tester.pumpWidget( - _buildSimpleShrinkWrap(controller: controller, physics: const BouncingScrollPhysics()), + buildSimpleShrinkWrap(controller: controller, physics: const BouncingScrollPhysics()), ); expect(controller.offset, 0.0); expect(tester.getTopLeft(find.text('Item 0')).dy, 0.0); @@ -2084,7 +2084,7 @@ void main() { // Scrollables should overscroll when the scroll physics allow final ScrollController controller = ScrollController(); await tester.pumpWidget( - _buildSimpleShrinkWrap( + buildSimpleShrinkWrap( controller: controller, scrollDirection: Axis.horizontal, physics: const BouncingScrollPhysics(), diff --git a/packages/flutter/test/services/channel_buffers_test.dart b/packages/flutter/test/services/channel_buffers_test.dart index ced7a1b380dc4..09eeec03eaa2a 100644 --- a/packages/flutter/test/services/channel_buffers_test.dart +++ b/packages/flutter/test/services/channel_buffers_test.dart @@ -13,13 +13,13 @@ import 'package:flutter_test/flutter_test.dart'; class TestChannelBuffersFlutterBinding extends BindingBase with SchedulerBinding, ServicesBinding { } void main() { - ByteData _makeByteData(String str) { + ByteData makeByteData(String str) { final List list = utf8.encode(str); final ByteBuffer buffer = list is Uint8List ? list.buffer : Uint8List.fromList(list).buffer; return ByteData.view(buffer); } - String _getString(ByteData data) { + String getString(ByteData data) { final ByteBuffer buffer = data.buffer; final List list = buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); return utf8.decode(list); @@ -34,11 +34,11 @@ void main() { didCallCallback = true; } const String payload = 'bar'; - final ByteData data = _makeByteData(payload); + final ByteData data = makeByteData(payload); ui.channelBuffers.push(channel, data, callback); bool didDrainData = false; binding.defaultBinaryMessenger.setMessageHandler(channel, (ByteData? message) async { - expect(_getString(message!), payload); + expect(getString(message!), payload); didDrainData = true; return null; }); diff --git a/packages/flutter/test/services/default_binary_messenger_test.dart b/packages/flutter/test/services/default_binary_messenger_test.dart index 5578a1fba90e8..62bf1945a31bb 100644 --- a/packages/flutter/test/services/default_binary_messenger_test.dart +++ b/packages/flutter/test/services/default_binary_messenger_test.dart @@ -12,7 +12,7 @@ import 'package:flutter_test/flutter_test.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - ByteData _makeByteData(String str) { + ByteData makeByteData(String str) { final List list = utf8.encode(str); final ByteBuffer buffer = list is Uint8List ? list.buffer : Uint8List.fromList(list).buffer; @@ -23,7 +23,7 @@ void main() { int countInbound = 0; int countOutbound = 0; const String channel = 'foo'; - final ByteData bar = _makeByteData('bar'); + final ByteData bar = makeByteData('bar'); final Completer done = Completer(); ServicesBinding.instance.channelBuffers.push( channel, diff --git a/packages/flutter/test/services/raw_keyboard_test.dart b/packages/flutter/test/services/raw_keyboard_test.dart index 853c206f23873..4578adc866020 100644 --- a/packages/flutter/test/services/raw_keyboard_test.dart +++ b/packages/flutter/test/services/raw_keyboard_test.dart @@ -2143,7 +2143,7 @@ void main() { test('Code points with more than three Unicode scalar values are not allowed', () { // |keyCode| and |scanCode| are arbitrary values. This test should fail due to an invalid |unicodeScalarValues|. - void _createFailingKey() { + void createFailingKey() { RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', @@ -2155,7 +2155,7 @@ void main() { }); } - expect(() => _createFailingKey(), throwsAssertionError); + expect(() => createFailingKey(), throwsAssertionError); }); test('Control keyboard keys are correctly translated', () { @@ -2375,7 +2375,7 @@ void main() { test('Code points with more than three Unicode scalar values are not allowed', () { // |keyCode| and |scanCode| are arbitrary values. This test should fail due to an invalid |unicodeScalarValues|. - void _createFailingKey() { + void createFailingKey() { RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', @@ -2387,7 +2387,7 @@ void main() { }); } - expect(() => _createFailingKey(), throwsAssertionError); + expect(() => createFailingKey(), throwsAssertionError); }); test('Control keyboard keys are correctly translated', () { diff --git a/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart b/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart index 50516495c87fc..7c4d04ed9943a 100644 --- a/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart +++ b/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { - Widget _boilerplate(VoidCallback? onButtonPressed, { + Widget boilerplateWidget(VoidCallback? onButtonPressed, { DraggableScrollableController? controller, int itemCount = 100, double initialChildSize = .5, @@ -65,7 +65,7 @@ void main() { testWidgets('Scrolls correct amount when maxChildSize < 1.0', (WidgetTester tester) async { const Key key = ValueKey('container'); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, maxChildSize: .6, initialChildSize: .25, @@ -81,7 +81,7 @@ void main() { testWidgets('Scrolls correct amount when maxChildSize == 1.0', (WidgetTester tester) async { const Key key = ValueKey('container'); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, initialChildSize: .25, itemExtent: 25.0, @@ -95,20 +95,20 @@ void main() { }); testWidgets('Invalid snap targets throw assertion errors.', (WidgetTester tester) async { - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, maxChildSize: .8, snapSizes: [.9], )); expect(tester.takeException(), isAssertionError); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, snapSizes: [.1], )); expect(tester.takeException(), isAssertionError); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, snapSizes: [.6, .6, .9], )); @@ -118,7 +118,7 @@ void main() { group('Scroll Physics', () { testWidgets('Can be dragged up without covering its container', (WidgetTester tester) async { int taps = 0; - await tester.pumpWidget(_boilerplate(() => taps++)); + await tester.pumpWidget(boilerplateWidget(() => taps++)); expect(find.text('TapHere'), findsOneWidget); await tester.tap(find.text('TapHere')); @@ -138,7 +138,7 @@ void main() { }, variant: TargetPlatformVariant.all()); testWidgets('Can be dragged down when not full height', (WidgetTester tester) async { - await tester.pumpWidget(_boilerplate(null)); + await tester.pumpWidget(boilerplateWidget(null)); expect(find.text('Item 1'), findsOneWidget); expect(find.text('Item 21'), findsOneWidget); expect(find.text('Item 36'), findsNothing); @@ -151,7 +151,7 @@ void main() { }, variant: TargetPlatformVariant.all()); testWidgets('Can be dragged down when list is shorter than full height', (WidgetTester tester) async { - await tester.pumpWidget(_boilerplate(null, itemCount: 30, initialChildSize: .25)); + await tester.pumpWidget(boilerplateWidget(null, itemCount: 30, initialChildSize: .25)); expect(find.text('Item 1').hitTestable(), findsOneWidget); expect(find.text('Item 29').hitTestable(), findsNothing); @@ -169,7 +169,7 @@ void main() { testWidgets('Can be dragged up and cover its container and scroll in single motion, and then dragged back down', (WidgetTester tester) async { int taps = 0; - await tester.pumpWidget(_boilerplate(() => taps++)); + await tester.pumpWidget(boilerplateWidget(() => taps++)); expect(find.text('TapHere'), findsOneWidget); await tester.tap(find.text('TapHere')); @@ -198,7 +198,7 @@ void main() { testWidgets('Can be flung up gently', (WidgetTester tester) async { int taps = 0; - await tester.pumpWidget(_boilerplate(() => taps++)); + await tester.pumpWidget(boilerplateWidget(() => taps++)); expect(find.text('TapHere'), findsOneWidget); await tester.tap(find.text('TapHere')); @@ -221,7 +221,7 @@ void main() { testWidgets('Can be flung up', (WidgetTester tester) async { int taps = 0; - await tester.pumpWidget(_boilerplate(() => taps++)); + await tester.pumpWidget(boilerplateWidget(() => taps++)); expect(find.text('TapHere'), findsOneWidget); await tester.tap(find.text('TapHere')); @@ -241,7 +241,7 @@ void main() { }, variant: TargetPlatformVariant.all()); testWidgets('Can be flung down when not full height', (WidgetTester tester) async { - await tester.pumpWidget(_boilerplate(null)); + await tester.pumpWidget(boilerplateWidget(null)); expect(find.text('Item 1'), findsOneWidget); expect(find.text('Item 21'), findsOneWidget); expect(find.text('Item 36'), findsNothing); @@ -255,7 +255,7 @@ void main() { testWidgets('Can be flung up and then back down', (WidgetTester tester) async { int taps = 0; - await tester.pumpWidget(_boilerplate(() => taps++)); + await tester.pumpWidget(boilerplateWidget(() => taps++)); expect(find.text('TapHere'), findsOneWidget); await tester.tap(find.text('TapHere')); @@ -294,7 +294,7 @@ void main() { testWidgets('Ballistic animation on fling can be interrupted', (WidgetTester tester) async { int taps = 0; - await tester.pumpWidget(_boilerplate(() => taps++)); + await tester.pumpWidget(boilerplateWidget(() => taps++)); expect(find.text('TapHere'), findsOneWidget); await tester.tap(find.text('TapHere')); @@ -332,7 +332,7 @@ void main() { testWidgets('Does not snap away from initial child on build', (WidgetTester tester) async { const Key containerKey = ValueKey('container'); const Key stackKey = ValueKey('stack'); - await tester.pumpWidget(_boilerplate(null, + await tester.pumpWidget(boilerplateWidget(null, snap: true, initialChildSize: .7, containerKey: containerKey, @@ -353,7 +353,7 @@ void main() { const Key containerKey = ValueKey('container'); const Key stackKey = ValueKey('stack'); final DraggableScrollableController controller = DraggableScrollableController(); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, controller: controller, snap: true, @@ -388,7 +388,7 @@ void main() { testWidgets('Zero velocity drag snaps to nearest snap target', (WidgetTester tester) async { const Key stackKey = ValueKey('stack'); const Key containerKey = ValueKey('container'); - await tester.pumpWidget(_boilerplate(null, + await tester.pumpWidget(boilerplateWidget(null, snap: true, stackKey: stackKey, containerKey: containerKey, @@ -442,7 +442,7 @@ void main() { testWidgets('Setting snapSizes to $snapSizes resolves to min and max', (WidgetTester tester) async { const Key stackKey = ValueKey('stack'); const Key containerKey = ValueKey('container'); - await tester.pumpWidget(_boilerplate(null, + await tester.pumpWidget(boilerplateWidget(null, snap: true, stackKey: stackKey, containerKey: containerKey, @@ -470,7 +470,7 @@ void main() { testWidgets('Min and max are implicitly added to snapSizes', (WidgetTester tester) async { const Key stackKey = ValueKey('stack'); const Key containerKey = ValueKey('container'); - await tester.pumpWidget(_boilerplate(null, + await tester.pumpWidget(boilerplateWidget(null, snap: true, stackKey: stackKey, containerKey: containerKey, @@ -497,7 +497,7 @@ void main() { testWidgets('Changes to widget parameters are propagated', (WidgetTester tester) async { const Key stackKey = ValueKey('stack'); const Key containerKey = ValueKey('container'); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, stackKey: stackKey, containerKey: containerKey, @@ -510,7 +510,7 @@ void main() { ); // Pump the same widget but with a new initial child size. - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, stackKey: stackKey, containerKey: containerKey, @@ -525,7 +525,7 @@ void main() { ); // Pump the same widget but with a new max child size. - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, stackKey: stackKey, containerKey: containerKey, @@ -547,7 +547,7 @@ void main() { ); // Pump the same widget but with a new max child size and initial size. - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, stackKey: stackKey, containerKey: containerKey, @@ -567,7 +567,7 @@ void main() { await tester.drag(find.text('Item 1'), Offset(0, .2 * screenHeight)); // Pump the same widget but with snapping enabled. - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, snap: true, stackKey: stackKey, @@ -586,7 +586,7 @@ void main() { final List snapSizes = [.6]; // Change the snap sizes. - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, snap: true, stackKey: stackKey, @@ -605,7 +605,7 @@ void main() { testWidgets('Fling snaps in direction of momentum', (WidgetTester tester) async { const Key stackKey = ValueKey('stack'); const Key containerKey = ValueKey('container'); - await tester.pumpWidget(_boilerplate(null, + await tester.pumpWidget(boilerplateWidget(null, snap: true, stackKey: stackKey, containerKey: containerKey, @@ -631,14 +631,14 @@ void main() { }, variant: TargetPlatformVariant.all()); testWidgets("Changing parameters with an un-listened controller doesn't throw", (WidgetTester tester) async { - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, snap: true, // Will prevent the sheet's child from listening to the controller. ignoreController: true, )); await tester.pumpAndSettle(); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, snap: true, )); @@ -647,7 +647,7 @@ void main() { testWidgets('ScrollNotification correctly dispatched when flung without covering its container', (WidgetTester tester) async { final List notificationTypes = []; - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, onScrollNotification: (ScrollNotification notification) { notificationTypes.add(notification.runtimeType); @@ -668,7 +668,7 @@ void main() { testWidgets('ScrollNotification correctly dispatched when flung with contents scroll', (WidgetTester tester) async { final List notificationTypes = []; - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, onScrollNotification: (ScrollNotification notification) { notificationTypes.add(notification.runtimeType); @@ -691,7 +691,7 @@ void main() { testWidgets('Do not crash when remove the tree during animation.', (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/issues/89214 - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, onScrollNotification: (ScrollNotification notification) { return false; @@ -712,7 +712,7 @@ void main() { const Key stackKey = ValueKey('stack'); const Key containerKey = ValueKey('container'); final DraggableScrollableController controller = DraggableScrollableController(); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -789,7 +789,7 @@ void main() { const Key stackKey = ValueKey('stack'); const Key containerKey = ValueKey('container'); final DraggableScrollableController controller = DraggableScrollableController(); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -836,7 +836,7 @@ void main() { const Key stackKey = ValueKey('stack'); const Key containerKey = ValueKey('container'); final DraggableScrollableController controller = DraggableScrollableController(); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -845,7 +845,7 @@ void main() { await tester.pumpAndSettle(); // Pump a new sheet with the same controller. This will dispose of the old sheet first. - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -868,7 +868,7 @@ void main() { final DraggableScrollableController controller = DraggableScrollableController(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, - child: _boilerplate( + child: boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -904,7 +904,7 @@ void main() { final DraggableScrollableController controller = DraggableScrollableController(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, - child: _boilerplate( + child: boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -937,7 +937,7 @@ void main() { final DraggableScrollableController controller = DraggableScrollableController(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, - child: _boilerplate( + child: boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -977,7 +977,7 @@ void main() { const Key stackKey = ValueKey('stack'); const Key containerKey = ValueKey('container'); final DraggableScrollableController controller = DraggableScrollableController(); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -1009,11 +1009,11 @@ void main() { textDirection: TextDirection.ltr, child: Stack( children: [ - _boilerplate( + boilerplateWidget( null, controller: controller, ), - _boilerplate( + boilerplateWidget( null, controller: controller, ), @@ -1031,7 +1031,7 @@ void main() { controller.addListener(() { loggedSizes.add(controller.size); }); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -1079,7 +1079,7 @@ void main() { controller.addListener(() { loggedSizes.add(controller.size); }); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -1098,7 +1098,7 @@ void main() { loggedSizes.clear(); // Update a parameter without forcing a change in the current size. - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, minChildSize: .1, controller: controller, @@ -1121,7 +1121,7 @@ void main() { controller.addListener(() { loggedSizes.add(controller.size); }); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, controller: controller, stackKey: stackKey, @@ -1136,7 +1136,7 @@ void main() { // Set a new `initialChildSize` which will trigger a size change because we // haven't moved away initial size yet. - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, initialChildSize: .6, controller: controller, @@ -1153,7 +1153,7 @@ void main() { loggedSizes.clear(); // Set a `minChildSize` greater than the current size. - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, minChildSize: .4, controller: controller, @@ -1174,7 +1174,7 @@ void main() { expect(() => controller.pixelsToSize(0), throwsAssertionError); expect(() => controller.sizeToPixels(0), throwsAssertionError); - await tester.pumpWidget(_boilerplate( + await tester.pumpWidget(boilerplateWidget( null, controller: controller, )); @@ -1200,7 +1200,7 @@ void main() { final DraggableScrollableController controller = DraggableScrollableController(); expect(controller.isAttached, false); expect(()=>controller.size, throwsAssertionError); - final Widget boilerplate = _boilerplate( + final Widget boilerplate = boilerplateWidget( null, minChildSize: 0.4, controller: controller, @@ -1213,7 +1213,7 @@ void main() { testWidgets('DraggableScrollableController.animateTo should not leak Ticker', (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/issues/102483 final DraggableScrollableController controller = DraggableScrollableController(); - await tester.pumpWidget(_boilerplate(() {}, controller: controller)); + await tester.pumpWidget(boilerplateWidget(() {}, controller: controller)); controller.animateTo(0.0, curve: Curves.linear, duration: const Duration(milliseconds: 200)); await tester.pump(); diff --git a/packages/flutter/test/widgets/editable_text_test.dart b/packages/flutter/test/widgets/editable_text_test.dart index 4b0226ebb82fe..322eba34f7b7d 100644 --- a/packages/flutter/test/widgets/editable_text_test.dart +++ b/packages/flutter/test/widgets/editable_text_test.dart @@ -95,7 +95,7 @@ void main() { // More technically, when an EditableText is given a particular [action], Flutter // requests [serializedActionName] when attaching to the platform's input // system. - Future _desiredKeyboardActionIsRequested({ + Future desiredKeyboardActionIsRequested({ required WidgetTester tester, TextInputAction? action, String serializedActionName = '', @@ -292,7 +292,7 @@ void main() { }); testWidgets('Keyboard is configured for "unspecified" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.unspecified, serializedActionName: 'TextInputAction.unspecified', @@ -300,7 +300,7 @@ void main() { }); testWidgets('Keyboard is configured for "none" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.none, serializedActionName: 'TextInputAction.none', @@ -308,7 +308,7 @@ void main() { }); testWidgets('Keyboard is configured for "done" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.done, serializedActionName: 'TextInputAction.done', @@ -316,7 +316,7 @@ void main() { }); testWidgets('Keyboard is configured for "send" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.send, serializedActionName: 'TextInputAction.send', @@ -324,7 +324,7 @@ void main() { }); testWidgets('Keyboard is configured for "go" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.go, serializedActionName: 'TextInputAction.go', @@ -332,7 +332,7 @@ void main() { }); testWidgets('Keyboard is configured for "search" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.search, serializedActionName: 'TextInputAction.search', @@ -340,7 +340,7 @@ void main() { }); testWidgets('Keyboard is configured for "send" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.send, serializedActionName: 'TextInputAction.send', @@ -348,7 +348,7 @@ void main() { }); testWidgets('Keyboard is configured for "next" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.next, serializedActionName: 'TextInputAction.next', @@ -356,7 +356,7 @@ void main() { }); testWidgets('Keyboard is configured for "previous" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.previous, serializedActionName: 'TextInputAction.previous', @@ -364,7 +364,7 @@ void main() { }); testWidgets('Keyboard is configured for "continue" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.continueAction, serializedActionName: 'TextInputAction.continueAction', @@ -372,7 +372,7 @@ void main() { }); testWidgets('Keyboard is configured for "join" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.join, serializedActionName: 'TextInputAction.join', @@ -380,7 +380,7 @@ void main() { }); testWidgets('Keyboard is configured for "route" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.route, serializedActionName: 'TextInputAction.route', @@ -388,7 +388,7 @@ void main() { }); testWidgets('Keyboard is configured for "emergencyCall" action when explicitly requested', (WidgetTester tester) async { - await _desiredKeyboardActionIsRequested( + await desiredKeyboardActionIsRequested( tester: tester, action: TextInputAction.emergencyCall, serializedActionName: 'TextInputAction.emergencyCall', @@ -2386,7 +2386,7 @@ void main() { final TextInputAction action = focusVariants.currentValue!; expect(actionShouldLoseFocus.containsKey(action), isTrue); - Future _ensureCorrectFocusHandlingForAction( + Future ensureCorrectFocusHandlingForAction( TextInputAction action, { required bool shouldLoseFocus, bool shouldFocusNext = false, @@ -2433,7 +2433,7 @@ void main() { } try { - await _ensureCorrectFocusHandlingForAction( + await ensureCorrectFocusHandlingForAction( action, shouldLoseFocus: actionShouldLoseFocus[action]!, shouldFocusNext: action == TextInputAction.next, @@ -3848,7 +3848,7 @@ void main() { }); group('a11y copy/cut/paste', () { - Future _buildApp(MockTextSelectionControls controls, WidgetTester tester) { + Future buildApp(MockTextSelectionControls controls, WidgetTester tester) { return tester.pumpWidget(MaterialApp( home: EditableText( backgroundCursorColor: Colors.grey, @@ -3879,7 +3879,7 @@ void main() { controls.testCanCut = false; controls.testCanPaste = false; - await _buildApp(controls, tester); + await buildApp(controls, tester); await tester.tap(find.byType(EditableText)); await tester.pump(); @@ -3897,7 +3897,7 @@ void main() { ); controls.testCanCopy = true; - await _buildApp(controls, tester); + await buildApp(controls, tester); expect( semantics, includesNodeWith( @@ -3914,7 +3914,7 @@ void main() { controls.testCanCopy = false; controls.testCanPaste = true; - await _buildApp(controls, tester); + await buildApp(controls, tester); await tester.pumpAndSettle(); expect( semantics, @@ -3932,7 +3932,7 @@ void main() { controls.testCanPaste = false; controls.testCanCut = true; - await _buildApp(controls, tester); + await buildApp(controls, tester); expect( semantics, includesNodeWith( @@ -3950,7 +3950,7 @@ void main() { controls.testCanCopy = true; controls.testCanCut = true; controls.testCanPaste = true; - await _buildApp(controls, tester); + await buildApp(controls, tester); expect( semantics, includesNodeWith( @@ -3974,7 +3974,7 @@ void main() { controls.testCanCopy = true; controls.testCanCut = true; controls.testCanPaste = true; - await _buildApp(controls, tester); + await buildApp(controls, tester); await tester.tap(find.byType(EditableText)); await tester.pump(); diff --git a/packages/flutter/test/widgets/heroes_test.dart b/packages/flutter/test/widgets/heroes_test.dart index 3eacf3537d5cc..0a64588427187 100644 --- a/packages/flutter/test/widgets/heroes_test.dart +++ b/packages/flutter/test/widgets/heroes_test.dart @@ -1185,22 +1185,22 @@ Future main() async { await tester.pump(const Duration(milliseconds: 100)); expect(tester.getTopLeft(find.byKey(heroABKey)).dy, 100.0); - bool _isVisible(Element node) { - bool isVisible = true; + bool isVisible(Element node) { + bool visible = true; node.visitAncestorElements((Element ancestor) { final RenderObject r = ancestor.renderObject!; if (r is RenderAnimatedOpacity && r.opacity.value == 0) { - isVisible = false; + visible = false; return false; } return true; }); - return isVisible; + return visible; } // Of all heroes only one should be visible now. final Iterable elements = find.text('Hero').evaluate(); - expect(elements.where(_isVisible).length, 1); + expect(elements.where(isVisible).length, 1); // Hero BC's flight finishes normally. await tester.pump(const Duration(milliseconds: 300)); diff --git a/packages/flutter/test/widgets/image_test.dart b/packages/flutter/test/widgets/image_test.dart index 084b01db138f5..026983bc8822b 100644 --- a/packages/flutter/test/widgets/image_test.dart +++ b/packages/flutter/test/widgets/image_test.dart @@ -1686,7 +1686,7 @@ void main() { expect(tester.takeException(), 'threw'); }); - Future _testRotatedImage(WidgetTester tester, bool isAntiAlias) async { + Future testRotatedImage(WidgetTester tester, bool isAntiAlias) async { final Key key = UniqueKey(); await tester.pumpWidget(RepaintBoundary( key: key, @@ -1717,8 +1717,8 @@ void main() { testWidgets( 'Rotated images', (WidgetTester tester) async { - await _testRotatedImage(tester, true); - await _testRotatedImage(tester, false); + await testRotatedImage(tester, true); + await testRotatedImage(tester, false); }, skip: kIsWeb, // https://github.com/flutter/flutter/issues/87933. ); diff --git a/packages/flutter/test/widgets/mouse_region_test.dart b/packages/flutter/test/widgets/mouse_region_test.dart index 929fe1b0e9ff2..5e0c937ed642f 100644 --- a/packages/flutter/test/widgets/mouse_region_test.dart +++ b/packages/flutter/test/widgets/mouse_region_test.dart @@ -1556,16 +1556,16 @@ void main() { await gesture.addPointer(location: const Offset(5, 5)); addTearDown(gesture.removePointer); - void _handleHover(PointerHoverEvent _) {} - void _handlePaintChild() { logs.add('paint'); } + void handleHover(PointerHoverEvent _) {} + void handlePaintChild() { logs.add('paint'); } await tester.pumpWidget(_Scaffold( topLeft: SizedBox( height: 10, width: 10, child: MouseRegion( - onHover: _handleHover, - child: CustomPaint(painter: _DelegatedPainter(onPaint: _handlePaintChild)), + onHover: handleHover, + child: CustomPaint(painter: _DelegatedPainter(onPaint: handlePaintChild)), ), ), background: MouseRegion(onEnter: (_) { logs.add('hover-enter'); }), @@ -1584,8 +1584,8 @@ void main() { opaque: false, // Dummy callback so that MouseRegion stays affective after opaque // turns false. - onHover: _handleHover, - child: CustomPaint(painter: _DelegatedPainter(onPaint: _handlePaintChild)), + onHover: handleHover, + child: CustomPaint(painter: _DelegatedPainter(onPaint: handlePaintChild)), ), ), background: MouseRegion(onEnter: (_) { logs.add('hover-enter'); }), diff --git a/packages/flutter/test/widgets/multichildobject_with_keys_test.dart b/packages/flutter/test/widgets/multichildobject_with_keys_test.dart index 2a45d05049ab8..7fa2045877d74 100644 --- a/packages/flutter/test/widgets/multichildobject_with_keys_test.dart +++ b/packages/flutter/test/widgets/multichildobject_with_keys_test.dart @@ -85,7 +85,7 @@ void main() { const ValueKey key1 = ValueKey(1); const ValueKey key2 = ValueKey(2); - Future _buildWithKey(Key key) { + Future buildWithKey(Key key) { return tester.pumpWidget(Column( children: [ const Text('Text 1', textDirection: TextDirection.ltr, key: key1), @@ -95,11 +95,11 @@ void main() { } // Initial build with two different keys. - await _buildWithKey(key2); + await buildWithKey(key2); expect(tester.takeException(), isNull); // Subsequent build with duplicated keys. - await _buildWithKey(key1); + await buildWithKey(key1); expect( tester.takeException(), isA().having( diff --git a/packages/flutter/test/widgets/navigator_test.dart b/packages/flutter/test/widgets/navigator_test.dart index 050fdeb29ac65..4cc82853d1eb6 100644 --- a/packages/flutter/test/widgets/navigator_test.dart +++ b/packages/flutter/test/widgets/navigator_test.dart @@ -2759,7 +2759,7 @@ void main() { ); }); - Widget _buildFrame(String action) { + Widget buildFrame(String action) { const TestPage myPage = TestPage(key: ValueKey('1'), name:'initial'); final Map routes = { '/' : (BuildContext context) => OnTapPage( @@ -2779,7 +2779,7 @@ void main() { return MaterialApp(routes: routes); } - void _checkException(WidgetTester tester) { + void checkException(WidgetTester tester) { final dynamic exception = tester.takeException(); expect(exception, isFlutterError); final FlutterError error = exception as FlutterError; @@ -2795,24 +2795,24 @@ void main() { } testWidgets('throw if add page-based route using the imperative api - push', (WidgetTester tester) async { - await tester.pumpWidget(_buildFrame('push')); + await tester.pumpWidget(buildFrame('push')); await tester.tap(find.text('push')); await tester.pumpAndSettle(); - _checkException(tester); + checkException(tester); }); testWidgets('throw if add page-based route using the imperative api - pushReplacement', (WidgetTester tester) async { - await tester.pumpWidget(_buildFrame('pushReplacement')); + await tester.pumpWidget(buildFrame('pushReplacement')); await tester.tap(find.text('pushReplacement')); await tester.pumpAndSettle(); - _checkException(tester); + checkException(tester); }); testWidgets('throw if add page-based route using the imperative api - pushAndRemoveUntil', (WidgetTester tester) async { - await tester.pumpWidget(_buildFrame('pushAndRemoveUntil')); + await tester.pumpWidget(buildFrame('pushAndRemoveUntil')); await tester.tap(find.text('pushAndRemoveUntil')); await tester.pumpAndSettle(); - _checkException(tester); + checkException(tester); }); testWidgets('throw if page list is empty', (WidgetTester tester) async { diff --git a/packages/flutter/test/widgets/nested_scroll_view_test.dart b/packages/flutter/test/widgets/nested_scroll_view_test.dart index b29488d9c124b..7d366fd60f909 100644 --- a/packages/flutter/test/widgets/nested_scroll_view_test.dart +++ b/packages/flutter/test/widgets/nested_scroll_view_test.dart @@ -591,7 +591,7 @@ void main() { )), ); - Object? _dfsFindPhysicalLayer(RenderObject object) { + Object? dfsFindPhysicalLayer(RenderObject object) { expect(object, isNotNull); if (object is RenderPhysicalModel || object is RenderPhysicalShape) { return object; @@ -599,7 +599,7 @@ void main() { final List children = []; object.visitChildren(children.add); for (final RenderObject child in children) { - final Object? result = _dfsFindPhysicalLayer(child); + final Object? result = dfsFindPhysicalLayer(child); if (result != null) { return result; } @@ -608,8 +608,8 @@ void main() { } final RenderObject nestedScrollViewLayer = find.byType(NestedScrollView).evaluate().first.renderObject!; - void _checkPhysicalLayer({required double elevation}) { - final dynamic physicalModel = _dfsFindPhysicalLayer(nestedScrollViewLayer); + void checkPhysicalLayer({required double elevation}) { + final dynamic physicalModel = dfsFindPhysicalLayer(nestedScrollViewLayer); expect(physicalModel, isNotNull); // ignore: avoid_dynamic_calls expect(physicalModel.elevation, equals(elevation)); @@ -620,7 +620,7 @@ void main() { expect(buildCount, expectedBuildCount); expect(find.text('Item 2'), findsOneWidget); expect(find.text('Item 18'), findsNothing); - _checkPhysicalLayer(elevation: 0); + checkPhysicalLayer(elevation: 0); // scroll down final TestGesture gesture0 = await tester.startGesture( tester.getCenter(find.text('Item 2')), @@ -636,10 +636,10 @@ void main() { expect(buildCount, expectedBuildCount); await tester.pump(const Duration(milliseconds: 1)); // during shadow animation expect(buildCount, expectedBuildCount); - _checkPhysicalLayer(elevation: 0.00018262863159179688); + checkPhysicalLayer(elevation: 0.00018262863159179688); await tester.pump(const Duration(seconds: 1)); // end shadow animation expect(buildCount, expectedBuildCount); - _checkPhysicalLayer(elevation: 4); + checkPhysicalLayer(elevation: 4); // scroll down final TestGesture gesture1 = await tester.startGesture( tester.getCenter(find.text('Item 2')), @@ -647,13 +647,13 @@ void main() { await gesture1.moveBy(const Offset(0.0, -800.0)); await tester.pump(); expect(buildCount, expectedBuildCount); - _checkPhysicalLayer(elevation: 4); + checkPhysicalLayer(elevation: 4); expect(find.text('Item 2'), findsNothing); expect(find.text('Item 18'), findsOneWidget); await gesture1.up(); await tester.pump(const Duration(seconds: 1)); expect(buildCount, expectedBuildCount); - _checkPhysicalLayer(elevation: 4); + checkPhysicalLayer(elevation: 4); // swipe left to bring in tap on the right final TestGesture gesture2 = await tester.startGesture( tester.getCenter(find.byType(NestedScrollView)), @@ -673,7 +673,7 @@ void main() { ).dy, tester.getBottomLeft(find.byType(AppBar)).dy + 8.0, ); - _checkPhysicalLayer(elevation: 4); + checkPhysicalLayer(elevation: 4); await gesture2.up(); await tester.pump(); // start sideways scroll await tester.pump(const Duration(seconds: 1)); // end sideways scroll, triggers shadow going away @@ -685,7 +685,7 @@ void main() { expect(buildCount, expectedBuildCount); expect(find.text('Item 18'), findsNothing); expect(find.text('Item 2'), findsOneWidget); - _checkPhysicalLayer(elevation: 0); + checkPhysicalLayer(elevation: 0); await tester.pump(const Duration(seconds: 1)); // just checking we don't rebuild... expect(buildCount, expectedBuildCount); // peek left to see it's still in the right place @@ -700,10 +700,10 @@ void main() { expect(buildCount, expectedBuildCount); expect(find.text('Item 18'), findsOneWidget); expect(find.text('Item 2'), findsOneWidget); - _checkPhysicalLayer(elevation: 0); + checkPhysicalLayer(elevation: 0); await tester.pump(const Duration(seconds: 1)); // shadow finishes coming back expect(buildCount, expectedBuildCount); - _checkPhysicalLayer(elevation: 4); + checkPhysicalLayer(elevation: 4); await gesture3.moveBy(const Offset(-400.0, 0.0)); await gesture3.up(); await tester.pump(); // left tab view goes away @@ -711,10 +711,10 @@ void main() { await tester.pump(); // shadow goes away starting here expectedBuildCount += 1; expect(buildCount, expectedBuildCount); - _checkPhysicalLayer(elevation: 4); + checkPhysicalLayer(elevation: 4); await tester.pump(const Duration(seconds: 1)); // shadow finishes going away expect(buildCount, expectedBuildCount); - _checkPhysicalLayer(elevation: 0); + checkPhysicalLayer(elevation: 0); // scroll back up final TestGesture gesture4 = await tester.startGesture( tester.getCenter(find.byType(NestedScrollView)), @@ -724,11 +724,11 @@ void main() { expect(buildCount, expectedBuildCount); expect(find.text('Item 2'), findsOneWidget); expect(find.text('Item 18'), findsNothing); - _checkPhysicalLayer(elevation: 0); + checkPhysicalLayer(elevation: 0); await gesture4.up(); await tester.pump(const Duration(seconds: 1)); expect(buildCount, expectedBuildCount); - _checkPhysicalLayer(elevation: 0); + checkPhysicalLayer(elevation: 0); // peek left to see it's now back at zero final TestGesture gesture5 = await tester.startGesture( tester.getCenter(find.byType(NestedScrollView)), @@ -739,14 +739,14 @@ void main() { expect(buildCount, expectedBuildCount); expect(find.text('Item 18'), findsNothing); expect(find.text('Item 2'), findsNWidgets(2)); - _checkPhysicalLayer(elevation: 0); + checkPhysicalLayer(elevation: 0); await tester.pump(const Duration(seconds: 1)); // shadow would be finished coming back - _checkPhysicalLayer(elevation: 0); + checkPhysicalLayer(elevation: 0); await gesture5.up(); await tester.pump(); // right tab view goes away await tester.pumpAndSettle(); expect(buildCount, expectedBuildCount); - _checkPhysicalLayer(elevation: 0); + checkPhysicalLayer(elevation: 0); debugDisableShadows = true; }); @@ -2115,7 +2115,7 @@ void main() { group('Correctly handles 0 velocity inner ballistic scroll activity:', () { // Regression tests for https://github.com/flutter/flutter/issues/17096 - Widget _buildBallisticTest(ScrollController controller) { + Widget buildBallisticTest(ScrollController controller) { return MaterialApp( home: Scaffold( body: NestedScrollView( @@ -2146,7 +2146,7 @@ void main() { // Dragging into an overscroll and holding so that when released, the // ballistic scroll activity has a 0 velocity. final ScrollController controller = ScrollController(); - await tester.pumpWidget(_buildBallisticTest(controller)); + await tester.pumpWidget(buildBallisticTest(controller)); // Last item of the inner scroll view. expect(find.text('Item 49'), findsNothing); @@ -2173,7 +2173,7 @@ void main() { // Tapping while an inner ballistic scroll activity is in progress will // trigger a secondary ballistic scroll activity with a 0 velocity. final ScrollController controller = ScrollController(); - await tester.pumpWidget(_buildBallisticTest(controller)); + await tester.pumpWidget(buildBallisticTest(controller)); // Last item of the inner scroll view. expect(find.text('Item 49'), findsNothing); diff --git a/packages/flutter/test/widgets/routes_test.dart b/packages/flutter/test/widgets/routes_test.dart index 11db69536b1e0..3178857942e5a 100644 --- a/packages/flutter/test/widgets/routes_test.dart +++ b/packages/flutter/test/widgets/routes_test.dart @@ -1504,7 +1504,7 @@ void main() { )); final CurveTween defaultBarrierTween = CurveTween(curve: Curves.ease); - int _getExpectedBarrierTweenAlphaValue(double t) { + int getExpectedBarrierTweenAlphaValue(double t) { return Color.getAlphaFromOpacity(defaultBarrierTween.transform(t)); } @@ -1521,21 +1521,21 @@ void main() { modalBarrierAnimation = tester.widget(animatedModalBarrier).color; expect( modalBarrierAnimation.value!.alpha, - closeTo(_getExpectedBarrierTweenAlphaValue(0.25), 1), + closeTo(getExpectedBarrierTweenAlphaValue(0.25), 1), ); await tester.pump(const Duration(milliseconds: 25)); modalBarrierAnimation = tester.widget(animatedModalBarrier).color; expect( modalBarrierAnimation.value!.alpha, - closeTo(_getExpectedBarrierTweenAlphaValue(0.50), 1), + closeTo(getExpectedBarrierTweenAlphaValue(0.50), 1), ); await tester.pump(const Duration(milliseconds: 25)); modalBarrierAnimation = tester.widget(animatedModalBarrier).color; expect( modalBarrierAnimation.value!.alpha, - closeTo(_getExpectedBarrierTweenAlphaValue(0.75), 1), + closeTo(getExpectedBarrierTweenAlphaValue(0.75), 1), ); await tester.pumpAndSettle(); @@ -1567,7 +1567,7 @@ void main() { )); final CurveTween customBarrierTween = CurveTween(curve: Curves.linear); - int _getExpectedBarrierTweenAlphaValue(double t) { + int getExpectedBarrierTweenAlphaValue(double t) { return Color.getAlphaFromOpacity(customBarrierTween.transform(t)); } @@ -1584,21 +1584,21 @@ void main() { modalBarrierAnimation = tester.widget(animatedModalBarrier).color; expect( modalBarrierAnimation.value!.alpha, - closeTo(_getExpectedBarrierTweenAlphaValue(0.25), 1), + closeTo(getExpectedBarrierTweenAlphaValue(0.25), 1), ); await tester.pump(const Duration(milliseconds: 25)); modalBarrierAnimation = tester.widget(animatedModalBarrier).color; expect( modalBarrierAnimation.value!.alpha, - closeTo(_getExpectedBarrierTweenAlphaValue(0.50), 1), + closeTo(getExpectedBarrierTweenAlphaValue(0.50), 1), ); await tester.pump(const Duration(milliseconds: 25)); modalBarrierAnimation = tester.widget(animatedModalBarrier).color; expect( modalBarrierAnimation.value!.alpha, - closeTo(_getExpectedBarrierTweenAlphaValue(0.75), 1), + closeTo(getExpectedBarrierTweenAlphaValue(0.75), 1), ); await tester.pumpAndSettle(); @@ -1630,7 +1630,7 @@ void main() { )); final CurveTween defaultBarrierTween = CurveTween(curve: Curves.ease); - int _getExpectedBarrierTweenAlphaValue(double t) { + int getExpectedBarrierTweenAlphaValue(double t) { return Color.getAlphaFromOpacity(defaultBarrierTween.transform(t)); } @@ -1647,21 +1647,21 @@ void main() { modalBarrierAnimation = tester.widget(animatedModalBarrier).color; expect( modalBarrierAnimation.value!.alpha, - closeTo(_getExpectedBarrierTweenAlphaValue(0.25), 1), + closeTo(getExpectedBarrierTweenAlphaValue(0.25), 1), ); await tester.pump(const Duration(milliseconds: 25)); modalBarrierAnimation = tester.widget(animatedModalBarrier).color; expect( modalBarrierAnimation.value!.alpha, - closeTo(_getExpectedBarrierTweenAlphaValue(0.50), 1), + closeTo(getExpectedBarrierTweenAlphaValue(0.50), 1), ); await tester.pump(const Duration(milliseconds: 25)); modalBarrierAnimation = tester.widget(animatedModalBarrier).color; expect( modalBarrierAnimation.value!.alpha, - closeTo(_getExpectedBarrierTweenAlphaValue(0.75), 1), + closeTo(getExpectedBarrierTweenAlphaValue(0.75), 1), ); await tester.pumpAndSettle(); diff --git a/packages/flutter/test/widgets/scroll_aware_image_provider_test.dart b/packages/flutter/test/widgets/scroll_aware_image_provider_test.dart index 8e53f47b2efad..2b6213c0b0259 100644 --- a/packages/flutter/test/widgets/scroll_aware_image_provider_test.dart +++ b/packages/flutter/test/widgets/scroll_aware_image_provider_test.dart @@ -21,11 +21,11 @@ void main() { imageCache.clear(); }); - T _findPhysics(WidgetTester tester) { + T findPhysics(WidgetTester tester) { return Scrollable.of(find.byType(TestWidget).evaluate().first)!.position.physics as T; } - ScrollMetrics _findMetrics(WidgetTester tester) { + ScrollMetrics findMetrics(WidgetTester tester) { return Scrollable.of(find.byType(TestWidget).evaluate().first)!.position; } @@ -89,7 +89,7 @@ void main() { testImageProvider.complete(); expect(imageCache.currentSize, 1); - expect(_findPhysics(tester).velocities, [0]); + expect(findPhysics(tester).velocities, [0]); }); testWidgets('ScrollAwareImageProvider does not delay if in scrollable that is scrolling slowly', (WidgetTester tester) async { @@ -124,7 +124,7 @@ void main() { curve: Curves.fastLinearToSlowEaseIn, ); await tester.pump(); - final RecordingPhysics physics = _findPhysics(tester); + final RecordingPhysics physics = findPhysics(tester); expect(physics.velocities.length, 0); final ImageStream stream = imageProvider.resolve(ImageConfiguration.empty); @@ -132,7 +132,7 @@ void main() { expect( const ScrollPhysics().recommendDeferredLoading( physics.velocities.first, - _findMetrics(tester), + findMetrics(tester), find.byType(TestWidget).evaluate().first, ), false, @@ -181,7 +181,7 @@ void main() { curve: Curves.fastLinearToSlowEaseIn, ); await tester.pump(); - final RecordingPhysics physics = _findPhysics(tester); + final RecordingPhysics physics = findPhysics(tester); expect(physics.velocities.length, 0); final ImageStream stream = imageProvider.resolve(ImageConfiguration.empty); @@ -189,7 +189,7 @@ void main() { expect( const ScrollPhysics().recommendDeferredLoading( physics.velocities.first, - _findMetrics(tester), + findMetrics(tester), find.byType(TestWidget).evaluate().first, ), true, @@ -248,7 +248,7 @@ void main() { curve: Curves.fastLinearToSlowEaseIn, ); await tester.pump(); - final RecordingPhysics physics = _findPhysics(tester); + final RecordingPhysics physics = findPhysics(tester); expect(physics.velocities.length, 0); final ImageStream stream = imageProvider.resolve(ImageConfiguration.empty); @@ -256,7 +256,7 @@ void main() { expect( const ScrollPhysics().recommendDeferredLoading( physics.velocities.first, - _findMetrics(tester), + findMetrics(tester), find.byType(TestWidget).evaluate().first, ), true, @@ -307,7 +307,7 @@ void main() { expect(testImageProvider.configuration, null); expect(imageCache.containsKey(testImageProvider), false); - final ControllablePhysics physics = _findPhysics(tester); + final ControllablePhysics physics = findPhysics(tester); physics.recommendDeferredLoadingValue = true; final ImageStream stream = imageProvider.resolve(ImageConfiguration.empty); @@ -358,7 +358,7 @@ void main() { expect(testImageProvider.configuration, null); expect(imageCache.containsKey(testImageProvider), false); - final ControllablePhysics physics = _findPhysics(tester); + final ControllablePhysics physics = findPhysics(tester); physics.recommendDeferredLoadingValue = true; final ImageStream stream = imageProvider.resolve(ImageConfiguration.empty); diff --git a/packages/flutter/test/widgets/scrollbar_test.dart b/packages/flutter/test/widgets/scrollbar_test.dart index d2e0bac3de810..d0ce262492799 100644 --- a/packages/flutter/test/widgets/scrollbar_test.dart +++ b/packages/flutter/test/widgets/scrollbar_test.dart @@ -2423,7 +2423,7 @@ void main() { testWidgets('Scrollbar asserts that a visible track has a visible thumb', (WidgetTester tester) async { final ScrollController scrollController = ScrollController(); - Widget _buildApp() { + Widget buildApp() { return Directionality( textDirection: TextDirection.ltr, child: MediaQuery( @@ -2442,6 +2442,6 @@ void main() { ), ); } - expect(() => tester.pumpWidget(_buildApp()), throwsAssertionError); + expect(() => tester.pumpWidget(buildApp()), throwsAssertionError); }); } diff --git a/packages/flutter/test/widgets/sliver_visibility_test.dart b/packages/flutter/test/widgets/sliver_visibility_test.dart index 0d96e7beca4f5..e8fc0d492cf4c 100644 --- a/packages/flutter/test/widgets/sliver_visibility_test.dart +++ b/packages/flutter/test/widgets/sliver_visibility_test.dart @@ -35,7 +35,7 @@ void main() { final List log = []; const Key anchor = Key('drag'); - Widget _boilerPlate(Widget sliver) { + Widget boilerPlate(Widget sliver) { return Localizations( locale: const Locale('en', 'us'), delegates: const >[ @@ -75,7 +75,7 @@ void main() { // also verifies that the widget can dynamically change from state to state. // Default - await tester.pumpWidget(_boilerPlate(SliverVisibility(sliver: testChild))); + await tester.pumpWidget(boilerPlate(SliverVisibility(sliver: testChild))); expect(find.byType(Text, skipOffstage: false), findsOneWidget); expect(find.text('a true', skipOffstage: false), findsOneWidget); expect(find.byType(SliverVisibility), findsOneWidget); @@ -91,7 +91,7 @@ void main() { log.clear(); // visible: false - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, ))); @@ -108,7 +108,7 @@ void main() { log.clear(); // visible: false, with replacementSliver - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, replacementSliver: const SliverToBoxAdapter(child: Placeholder()), visible: false, @@ -126,7 +126,7 @@ void main() { log.clear(); // visible: true, with replacementSliver - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, replacementSliver: const SliverToBoxAdapter(child: Placeholder()), ))); @@ -145,7 +145,7 @@ void main() { log.clear(); // visible: true, maintain all - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, maintainState: true, maintainAnimation: true, @@ -167,7 +167,7 @@ void main() { log.clear(); // visible: false, maintain all - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, maintainState: true, @@ -190,7 +190,7 @@ void main() { log.clear(); // visible: false, maintain all, replacementSliver - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, replacementSliver: const SliverToBoxAdapter(child: Placeholder()), visible: false, @@ -216,7 +216,7 @@ void main() { log.clear(); // visible: false, maintain all but semantics - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, maintainState: true, @@ -239,7 +239,7 @@ void main() { log.clear(); // visible: false, maintain all but interactivity - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, maintainState: true, @@ -262,7 +262,7 @@ void main() { log.clear(); // visible: false, maintain state, animation, size. - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, maintainState: true, @@ -284,7 +284,7 @@ void main() { log.clear(); // visible: false, maintain state and animation. - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, maintainState: true, @@ -305,7 +305,7 @@ void main() { log.clear(); // visible: false, maintain state. - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, maintainState: true, @@ -328,7 +328,7 @@ void main() { // works. // visible: true, maintain state - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, maintainState: true, ))); @@ -347,7 +347,7 @@ void main() { log.clear(); // visible: false, maintain state. - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, maintainState: true, @@ -367,7 +367,7 @@ void main() { log.clear(); // visible: true, maintain state. - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, maintainState: true, ))); @@ -386,7 +386,7 @@ void main() { log.clear(); // visible: false, maintain state. - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, maintainState: true, @@ -408,7 +408,7 @@ void main() { // Same but without maintainState. // visible: false. - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, ))); @@ -425,7 +425,7 @@ void main() { log.clear(); // visible: true. - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, ))); expect(find.byType(Text), findsOneWidget); @@ -443,7 +443,7 @@ void main() { log.clear(); //visible: false. - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, visible: false, ))); @@ -460,7 +460,7 @@ void main() { log.clear(); // visible: true. - await tester.pumpWidget(_boilerPlate(SliverVisibility( + await tester.pumpWidget(boilerPlate(SliverVisibility( sliver: testChild, ))); expect(find.byType(Text), findsOneWidget); diff --git a/packages/flutter/test/widgets/slivers_test.dart b/packages/flutter/test/widgets/slivers_test.dart index 05effc1307d03..fee8c0fc984e7 100644 --- a/packages/flutter/test/widgets/slivers_test.dart +++ b/packages/flutter/test/widgets/slivers_test.dart @@ -412,7 +412,7 @@ void main() { (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/pull/59888. bool skip = true; - Widget _buildItem(BuildContext context, int index) { + Widget buildItem(BuildContext context, int index) { return !skip || index.isEven ? Card( child: ListTile( @@ -431,7 +431,7 @@ void main() { slivers: [ SliverList( delegate: SliverChildBuilderDelegate( - _buildItem, + buildItem, childCount: 30, ), ), @@ -460,7 +460,7 @@ void main() { slivers: [ SliverList( delegate: SliverChildBuilderDelegate( - _buildItem, + buildItem, childCount: 30, ), ), @@ -643,7 +643,7 @@ void main() { expect(controller.offset, 800.0); }); - Widget _boilerPlate(Widget sliver) { + Widget boilerPlate(Widget sliver) { return Localizations( locale: const Locale('en', 'us'), delegates: const >[ @@ -663,7 +663,7 @@ void main() { group('SliverOffstage - ', () { testWidgets('offstage true', (WidgetTester tester) async { final SemanticsTester semantics = SemanticsTester(tester); - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( const SliverOffstage( sliver: SliverToBoxAdapter( child: Text('a'), @@ -681,7 +681,7 @@ void main() { testWidgets('offstage false', (WidgetTester tester) async { final SemanticsTester semantics = SemanticsTester(tester); - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( const SliverOffstage( offstage: false, sliver: SliverToBoxAdapter( @@ -704,7 +704,7 @@ void main() { final SemanticsTester semantics = SemanticsTester(tester); // Opacity 1.0: Semantics and painting - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( const SliverOpacity( sliver: SliverToBoxAdapter( child: Text( @@ -720,7 +720,7 @@ void main() { expect(find.byType(SliverOpacity), paints..paragraph()); // Opacity 0.0: Nothing - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( const SliverOpacity( sliver: SliverToBoxAdapter( child: Text( @@ -736,7 +736,7 @@ void main() { expect(find.byType(SliverOpacity), paintsNothing); // Opacity 0.0 with semantics: Just semantics - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( const SliverOpacity( sliver: SliverToBoxAdapter( child: Text( @@ -753,7 +753,7 @@ void main() { expect(find.byType(SliverOpacity), paintsNothing); // Opacity 0.0 without semantics: Nothing - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( const SliverOpacity( sliver: SliverToBoxAdapter( child: Text( @@ -769,7 +769,7 @@ void main() { expect(find.byType(SliverOpacity), paintsNothing); // Opacity 0.1: Semantics and painting - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( const SliverOpacity( sliver: SliverToBoxAdapter( child: Text( @@ -785,7 +785,7 @@ void main() { expect(find.byType(SliverOpacity), paints..paragraph()); // Opacity 0.1 without semantics: Still has semantics and painting - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( const SliverOpacity( sliver: SliverToBoxAdapter( child: Text( @@ -801,7 +801,7 @@ void main() { expect(find.byType(SliverOpacity), paints..paragraph()); // Opacity 0.1 with semantics: Semantics and painting - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( const SliverOpacity( sliver: SliverToBoxAdapter( child: Text( @@ -825,7 +825,7 @@ void main() { testWidgets('ignores pointer events', (WidgetTester tester) async { final SemanticsTester semantics = SemanticsTester(tester); final List events = []; - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( SliverIgnorePointer( ignoringSemantics: false, sliver: SliverToBoxAdapter( @@ -846,7 +846,7 @@ void main() { testWidgets('ignores semantics', (WidgetTester tester) async { final SemanticsTester semantics = SemanticsTester(tester); final List events = []; - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( SliverIgnorePointer( ignoring: false, ignoringSemantics: true, @@ -868,7 +868,7 @@ void main() { testWidgets('ignores pointer events & semantics', (WidgetTester tester) async { final SemanticsTester semantics = SemanticsTester(tester); final List events = []; - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( SliverIgnorePointer( ignoringSemantics: true, sliver: SliverToBoxAdapter( @@ -889,7 +889,7 @@ void main() { testWidgets('ignores nothing', (WidgetTester tester) async { final SemanticsTester semantics = SemanticsTester(tester); final List events = []; - await tester.pumpWidget(_boilerPlate( + await tester.pumpWidget(boilerPlate( SliverIgnorePointer( ignoring: false, ignoringSemantics: false, diff --git a/packages/flutter/test/widgets/text_selection_test.dart b/packages/flutter/test/widgets/text_selection_test.dart index 312101fa0e878..80c36f6d09253 100644 --- a/packages/flutter/test/widgets/text_selection_test.dart +++ b/packages/flutter/test/widgets/text_selection_test.dart @@ -24,16 +24,16 @@ void main() { late int dragEndCount; const Offset forcePressOffset = Offset(400.0, 50.0); - void _handleTapDown(TapDownDetails details) { tapCount++; } - void _handleSingleTapUp(TapUpDetails details) { singleTapUpCount++; } - void _handleSingleTapCancel() { singleTapCancelCount++; } - void _handleSingleLongTapStart(LongPressStartDetails details) { singleLongTapStartCount++; } - void _handleDoubleTapDown(TapDownDetails details) { doubleTapDownCount++; } - void _handleForcePressStart(ForcePressDetails details) { forcePressStartCount++; } - void _handleForcePressEnd(ForcePressDetails details) { forcePressEndCount++; } - void _handleDragSelectionStart(DragStartDetails details) { dragStartCount++; } - void _handleDragSelectionUpdate(DragStartDetails _, DragUpdateDetails details) { dragUpdateCount++; } - void _handleDragSelectionEnd(DragEndDetails details) { dragEndCount++; } + void handleTapDown(TapDownDetails details) { tapCount++; } + void handleSingleTapUp(TapUpDetails details) { singleTapUpCount++; } + void handleSingleTapCancel() { singleTapCancelCount++; } + void handleSingleLongTapStart(LongPressStartDetails details) { singleLongTapStartCount++; } + void handleDoubleTapDown(TapDownDetails details) { doubleTapDownCount++; } + void handleForcePressStart(ForcePressDetails details) { forcePressStartCount++; } + void handleForcePressEnd(ForcePressDetails details) { forcePressEndCount++; } + void handleDragSelectionStart(DragStartDetails details) { dragStartCount++; } + void handleDragSelectionUpdate(DragStartDetails _, DragUpdateDetails details) { dragUpdateCount++; } + void handleDragSelectionEnd(DragEndDetails details) { dragEndCount++; } setUp(() { tapCount = 0; @@ -52,16 +52,16 @@ void main() { await tester.pumpWidget( TextSelectionGestureDetector( behavior: HitTestBehavior.opaque, - onTapDown: _handleTapDown, - onSingleTapUp: _handleSingleTapUp, - onSingleTapCancel: _handleSingleTapCancel, - onSingleLongTapStart: _handleSingleLongTapStart, - onDoubleTapDown: _handleDoubleTapDown, - onForcePressStart: _handleForcePressStart, - onForcePressEnd: _handleForcePressEnd, - onDragSelectionStart: _handleDragSelectionStart, - onDragSelectionUpdate: _handleDragSelectionUpdate, - onDragSelectionEnd: _handleDragSelectionEnd, + onTapDown: handleTapDown, + onSingleTapUp: handleSingleTapUp, + onSingleTapCancel: handleSingleTapCancel, + onSingleLongTapStart: handleSingleLongTapStart, + onDoubleTapDown: handleDoubleTapDown, + onForcePressStart: handleForcePressStart, + onForcePressEnd: handleForcePressEnd, + onDragSelectionStart: handleDragSelectionStart, + onDragSelectionUpdate: handleDragSelectionUpdate, + onDragSelectionEnd: handleDragSelectionEnd, child: Container(), ), ); diff --git a/packages/flutter/test/widgets/transform_test.dart b/packages/flutter/test/widgets/transform_test.dart index 751006a574c5e..47a771756de84 100644 --- a/packages/flutter/test/widgets/transform_test.dart +++ b/packages/flutter/test/widgets/transform_test.dart @@ -363,7 +363,7 @@ void main() { expect(pointerDown, isTrue); }); - Widget _generateTransform(bool needsCompositing, double angle) { + Widget generateTransform(bool needsCompositing, double angle) { final Widget customPaint = CustomPaint(painter: TestRectPainter()); return Transform( transform: MatrixUtils.createCylindricalProjectionTransform( @@ -380,12 +380,12 @@ void main() { '3D transform renders the same with or without needsCompositing', (WidgetTester tester) async { for (double angle = 0; angle <= math.pi/4; angle += 0.01) { - await tester.pumpWidget(RepaintBoundary(child: _generateTransform(true, angle))); + await tester.pumpWidget(RepaintBoundary(child: generateTransform(true, angle))); final RenderBox renderBox = tester.binding.renderView.child!; final OffsetLayer layer = renderBox.debugLayer! as OffsetLayer; final ui.Image imageWithCompositing = await layer.toImage(renderBox.paintBounds); - await tester.pumpWidget(RepaintBoundary(child: _generateTransform(false, angle))); + await tester.pumpWidget(RepaintBoundary(child: generateTransform(false, angle))); await expectLater(find.byType(RepaintBoundary).first, matchesReferenceImage(imageWithCompositing)); } }, diff --git a/packages/flutter/test/widgets/transitions_test.dart b/packages/flutter/test/widgets/transitions_test.dart index 47b6809a3bc0d..4cb939ff74b5d 100644 --- a/packages/flutter/test/widgets/transitions_test.dart +++ b/packages/flutter/test/widgets/transitions_test.dart @@ -348,7 +348,7 @@ void main() { }); group('FadeTransition', () { - double _getOpacity(WidgetTester tester, String textValue) { + double getOpacity(WidgetTester tester, String textValue) { final FadeTransition opacityWidget = tester.widget( find.ancestor( of: find.text(textValue), @@ -370,28 +370,28 @@ void main() { await tester.pumpWidget(widget); - expect(_getOpacity(tester, 'Fade In'), 0.0); + expect(getOpacity(tester, 'Fade In'), 0.0); controller.value = 0.25; await tester.pump(); - expect(_getOpacity(tester, 'Fade In'), 0.25); + expect(getOpacity(tester, 'Fade In'), 0.25); controller.value = 0.5; await tester.pump(); - expect(_getOpacity(tester, 'Fade In'), 0.5); + expect(getOpacity(tester, 'Fade In'), 0.5); controller.value = 0.75; await tester.pump(); - expect(_getOpacity(tester, 'Fade In'), 0.75); + expect(getOpacity(tester, 'Fade In'), 0.75); controller.value = 1.0; await tester.pump(); - expect(_getOpacity(tester, 'Fade In'), 1.0); + expect(getOpacity(tester, 'Fade In'), 1.0); }); }); group('SliverFadeTransition', () { - double _getOpacity(WidgetTester tester, String textValue) { + double getOpacity(WidgetTester tester, String textValue) { final SliverFadeTransition opacityWidget = tester.widget( find.ancestor( of: find.text(textValue), @@ -429,23 +429,23 @@ void main() { await tester.pumpWidget(widget); - expect(_getOpacity(tester, 'Fade In'), 0.0); + expect(getOpacity(tester, 'Fade In'), 0.0); controller.value = 0.25; await tester.pump(); - expect(_getOpacity(tester, 'Fade In'), 0.25); + expect(getOpacity(tester, 'Fade In'), 0.25); controller.value = 0.5; await tester.pump(); - expect(_getOpacity(tester, 'Fade In'), 0.5); + expect(getOpacity(tester, 'Fade In'), 0.5); controller.value = 0.75; await tester.pump(); - expect(_getOpacity(tester, 'Fade In'), 0.75); + expect(getOpacity(tester, 'Fade In'), 0.75); controller.value = 1.0; await tester.pump(); - expect(_getOpacity(tester, 'Fade In'), 1.0); + expect(getOpacity(tester, 'Fade In'), 1.0); }); }); From 9644aa8d76475185352994f241ce152acd75a8fa Mon Sep 17 00:00:00 2001 From: Pierre-Louis <6655696+guidezpl@users.noreply.github.com> Date: Wed, 27 Apr 2022 16:29:06 +0000 Subject: [PATCH 115/141] Fixes documentation inconsistencies around 'material' and 'material design' (#102632) --- dev/benchmarks/test_apps/stocks/README.md | 2 +- .../flutter_gallery/web/index.html | 2 +- .../flutter/lib/src/cupertino/colors.dart | 4 +-- .../flutter/lib/src/cupertino/switch.dart | 2 +- .../animated_icons/animated_icons_data.dart | 30 +++++++++---------- packages/flutter/lib/src/material/app.dart | 4 +-- .../flutter/lib/src/material/app_bar.dart | 8 ++--- packages/flutter/lib/src/material/arc.dart | 4 +-- .../flutter/lib/src/material/back_button.dart | 8 ++--- packages/flutter/lib/src/material/banner.dart | 4 +-- .../lib/src/material/bottom_sheet.dart | 8 ++--- .../lib/src/material/button_theme.dart | 2 +- .../src/material/calendar_date_picker.dart | 2 +- packages/flutter/lib/src/material/card.dart | 4 +-- .../flutter/lib/src/material/checkbox.dart | 4 +-- packages/flutter/lib/src/material/chip.dart | 18 +++++------ .../flutter/lib/src/material/chip_action.dart | 2 +- .../flutter/lib/src/material/chip_choice.dart | 2 +- .../flutter/lib/src/material/chip_filter.dart | 2 +- .../flutter/lib/src/material/chip_input.dart | 2 +- .../flutter/lib/src/material/chip_theme.dart | 2 +- packages/flutter/lib/src/material/colors.dart | 4 +-- .../flutter/lib/src/material/data_table.dart | 2 +- packages/flutter/lib/src/material/date.dart | 4 +-- .../flutter/lib/src/material/date_picker.dart | 6 ++-- packages/flutter/lib/src/material/debug.dart | 6 ++-- packages/flutter/lib/src/material/dialog.dart | 8 ++--- .../lib/src/material/dialog_theme.dart | 2 +- .../flutter/lib/src/material/divider.dart | 8 ++--- packages/flutter/lib/src/material/drawer.dart | 4 +-- .../lib/src/material/drawer_header.dart | 6 ++-- .../flutter/lib/src/material/dropdown.dart | 4 +-- .../lib/src/material/flexible_space_bar.dart | 2 +- .../src/material/floating_action_button.dart | 4 +-- .../flutter/lib/src/material/grid_tile.dart | 2 +- .../lib/src/material/grid_tile_bar.dart | 2 +- .../flutter/lib/src/material/icon_button.dart | 4 +-- packages/flutter/lib/src/material/icons.dart | 6 ++-- .../flutter/lib/src/material/ink_well.dart | 8 ++--- .../input_date_picker_form_field.dart | 2 +- .../lib/src/material/input_decorator.dart | 16 +++++----- .../flutter/lib/src/material/list_tile.dart | 2 +- .../flutter/lib/src/material/material.dart | 8 ++--- .../lib/src/material/material_button.dart | 2 +- .../lib/src/material/navigation_rail.dart | 2 +- .../lib/src/material/outlined_button.dart | 4 +-- .../src/material/paginated_data_table.dart | 2 +- .../flutter/lib/src/material/popup_menu.dart | 10 +++---- .../lib/src/material/progress_indicator.dart | 6 ++-- packages/flutter/lib/src/material/radio.dart | 4 +-- .../flutter/lib/src/material/scaffold.dart | 10 +++---- .../flutter/lib/src/material/scrollbar.dart | 2 +- .../flutter/lib/src/material/shadows.dart | 2 +- .../lib/src/material/slider_theme.dart | 6 ++-- packages/flutter/lib/src/material/switch.dart | 4 +-- packages/flutter/lib/src/material/tabs.dart | 8 ++--- .../flutter/lib/src/material/text_field.dart | 2 +- .../flutter/lib/src/material/text_theme.dart | 8 ++--- .../flutter/lib/src/material/theme_data.dart | 6 ++-- .../flutter/lib/src/material/time_picker.dart | 8 ++--- .../flutter/lib/src/material/tooltip.dart | 2 +- .../flutter/lib/src/material/typography.dart | 28 ++++++++--------- .../material/user_accounts_drawer_header.dart | 4 +-- .../flutter/lib/src/painting/box_border.dart | 6 ++-- packages/flutter/lib/src/painting/colors.dart | 4 +-- packages/flutter/lib/src/widgets/app.dart | 4 +-- packages/flutter/lib/src/widgets/icon.dart | 2 +- .../flutter/lib/src/widgets/image_icon.dart | 2 +- .../lib/src/widgets/reorderable_list.dart | 10 +++---- packages/flutter/lib/src/widgets/text.dart | 2 +- .../flutter/test/material/debug_test.dart | 2 +- .../test/general.shard/asset_bundle_test.dart | 2 +- .../general.shard/flutter_manifest_test.dart | 2 +- 73 files changed, 191 insertions(+), 191 deletions(-) diff --git a/dev/benchmarks/test_apps/stocks/README.md b/dev/benchmarks/test_apps/stocks/README.md index f162b46469e44..3f1778aab8634 100644 --- a/dev/benchmarks/test_apps/stocks/README.md +++ b/dev/benchmarks/test_apps/stocks/README.md @@ -1,6 +1,6 @@ # Stocks -Demo app for the material design widgets and other features provided by Flutter. +Demo app for the Material Design widgets and other features provided by Flutter. ## Building diff --git a/dev/integration_tests/flutter_gallery/web/index.html b/dev/integration_tests/flutter_gallery/web/index.html index 757134fa099dd..89b85fdc1cd78 100644 --- a/dev/integration_tests/flutter_gallery/web/index.html +++ b/dev/integration_tests/flutter_gallery/web/index.html @@ -6,7 +6,7 @@ - + diff --git a/packages/flutter/lib/src/cupertino/colors.dart b/packages/flutter/lib/src/cupertino/colors.dart index 5a7f8e214989a..6b78589da24bd 100644 --- a/packages/flutter/lib/src/cupertino/colors.dart +++ b/packages/flutter/lib/src/cupertino/colors.dart @@ -46,7 +46,7 @@ class CupertinoColors { /// /// See also: /// - /// * [material.Colors.white], the same color, in the material design palette. + /// * [material.Colors.white], the same color, in the Material Design palette. /// * [black], opaque black in the [CupertinoColors] palette. static const Color white = Color(0xFFFFFFFF); @@ -56,7 +56,7 @@ class CupertinoColors { /// /// See also: /// - /// * [material.Colors.black], the same color, in the material design palette. + /// * [material.Colors.black], the same color, in the Material Design palette. /// * [white], opaque white in the [CupertinoColors] palette. static const Color black = Color(0xFF000000); diff --git a/packages/flutter/lib/src/cupertino/switch.dart b/packages/flutter/lib/src/cupertino/switch.dart index a781a977038a3..c243f479063d3 100644 --- a/packages/flutter/lib/src/cupertino/switch.dart +++ b/packages/flutter/lib/src/cupertino/switch.dart @@ -48,7 +48,7 @@ import 'thumb_painter.dart'; /// /// See also: /// -/// * [Switch], the material design equivalent. +/// * [Switch], the Material Design equivalent. /// * class CupertinoSwitch extends StatefulWidget { /// Creates an iOS-style switch. diff --git a/packages/flutter/lib/src/material/animated_icons/animated_icons_data.dart b/packages/flutter/lib/src/material/animated_icons/animated_icons_data.dart index f6de42b710e6f..7a348a720ab95 100644 --- a/packages/flutter/lib/src/material/animated_icons/animated_icons_data.dart +++ b/packages/flutter/lib/src/material/animated_icons/animated_icons_data.dart @@ -10,51 +10,51 @@ part of material_animated_icons; -/// Identifier for the supported material design animated icons. +/// Identifier for the supported Material Design animated icons. /// /// Use with [AnimatedIcon] class to show specific animated icons. abstract class AnimatedIcons { - /// The material design add to event icon animation. + /// The Material Design add to event icon animation. static const AnimatedIconData add_event = _$add_event; - /// The material design arrow to menu icon animation. + /// The Material Design arrow to menu icon animation. static const AnimatedIconData arrow_menu = _$arrow_menu; - /// The material design close to menu icon animation. + /// The Material Design close to menu icon animation. static const AnimatedIconData close_menu = _$close_menu; - /// The material design ellipsis to search icon animation. + /// The Material Design ellipsis to search icon animation. static const AnimatedIconData ellipsis_search = _$ellipsis_search; - /// The material design event to add icon animation. + /// The Material Design event to add icon animation. static const AnimatedIconData event_add = _$event_add; - /// The material design home to menu icon animation. + /// The Material Design home to menu icon animation. static const AnimatedIconData home_menu = _$home_menu; - /// The material design list to view icon animation. + /// The Material Design list to view icon animation. static const AnimatedIconData list_view = _$list_view; - /// The material design menu to arrow icon animation. + /// The Material Design menu to arrow icon animation. static const AnimatedIconData menu_arrow = _$menu_arrow; - /// The material design menu to close icon animation. + /// The Material Design menu to close icon animation. static const AnimatedIconData menu_close = _$menu_close; - /// The material design menu to home icon animation. + /// The Material Design menu to home icon animation. static const AnimatedIconData menu_home = _$menu_home; - /// The material design pause to play icon animation. + /// The Material Design pause to play icon animation. static const AnimatedIconData pause_play = _$pause_play; - /// The material design play to pause icon animation. + /// The Material Design play to pause icon animation. static const AnimatedIconData play_pause = _$play_pause; - /// The material design search to ellipsis icon animation. + /// The Material Design search to ellipsis icon animation. static const AnimatedIconData search_ellipsis = _$search_ellipsis; - /// The material design view to list icon animation. + /// The Material Design view to list icon animation. static const AnimatedIconData view_list = _$view_list; } diff --git a/packages/flutter/lib/src/material/app.dart b/packages/flutter/lib/src/material/app.dart index f02533fe62d16..454ff695b9e31 100644 --- a/packages/flutter/lib/src/material/app.dart +++ b/packages/flutter/lib/src/material/app.dart @@ -50,10 +50,10 @@ enum ThemeMode { dark, } -/// An application that uses material design. +/// An application that uses Material Design. /// /// A convenience widget that wraps a number of widgets that are commonly -/// required for material design applications. It builds upon a [WidgetsApp] by +/// required for Material Design applications. It builds upon a [WidgetsApp] by /// adding material-design specific functionality, such as [AnimatedTheme] and /// [GridPaper]. /// diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart index 39c7bd39c339c..d3fc244a35215 100644 --- a/packages/flutter/lib/src/material/app_bar.dart +++ b/packages/flutter/lib/src/material/app_bar.dart @@ -62,7 +62,7 @@ class _PreferredAppBarSize extends Size { final double? bottomHeight; } -/// A material design app bar. +/// A Material Design app bar. /// /// An app bar consists of a toolbar and potentially other widgets, such as a /// [TabBar] and a [FlexibleSpaceBar]. App bars typically expose one or more @@ -144,7 +144,7 @@ class _PreferredAppBarSize extends Size { /// * /// * Cookbook: [Place a floating app bar above a list](https://flutter.dev/docs/cookbook/lists/floating-app-bar) class AppBar extends StatefulWidget implements PreferredSizeWidget { - /// Creates a material design app bar. + /// Creates a Material Design app bar. /// /// The arguments [primary], [toolbarOpacity], [bottomOpacity], /// [backwardsCompatibility], and [automaticallyImplyLeading] must @@ -1269,7 +1269,7 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate { } } -/// A material design app bar that integrates with a [CustomScrollView]. +/// A Material Design app bar that integrates with a [CustomScrollView]. /// /// An app bar consists of a toolbar and potentially other widgets, such as a /// [TabBar] and a [FlexibleSpaceBar]. App bars typically expose one or more @@ -1355,7 +1355,7 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate { /// can expand and collapse. /// * class SliverAppBar extends StatefulWidget { - /// Creates a material design app bar that can be placed in a [CustomScrollView]. + /// Creates a Material Design app bar that can be placed in a [CustomScrollView]. /// /// The arguments [forceElevated], [primary], [floating], [pinned], [snap] /// and [automaticallyImplyLeading] must not be null. diff --git a/packages/flutter/lib/src/material/arc.dart b/packages/flutter/lib/src/material/arc.dart index 390ca77434572..c76d933f96bba 100644 --- a/packages/flutter/lib/src/material/arc.dart +++ b/packages/flutter/lib/src/material/arc.dart @@ -17,7 +17,7 @@ const double _kOnAxisDelta = 2.0; /// /// This class specializes the interpolation of [Tween] so that instead /// of a straight line, the intermediate points follow the arc of a circle in a -/// manner consistent with material design principles. +/// manner consistent with Material Design principles. /// /// The arc's radius is related to the bounding box that contains the [begin] /// and [end] points. If the bounding box is taller than it is wide, then the @@ -218,7 +218,7 @@ T _maxBy(Iterable input, _KeyFunc keyFunc) { /// /// This class specializes the interpolation of [Tween] so that instead of /// growing or shrinking linearly, opposite corners of the rectangle follow arcs -/// in a manner consistent with material design principles. +/// in a manner consistent with Material Design principles. /// /// Specifically, the rectangle corners whose diagonals are closest to the overall /// direction of the animation follow arcs defined with [MaterialPointArcTween]. diff --git a/packages/flutter/lib/src/material/back_button.dart b/packages/flutter/lib/src/material/back_button.dart index 2fd7adb9f8f4c..4d1f1c874cc71 100644 --- a/packages/flutter/lib/src/material/back_button.dart +++ b/packages/flutter/lib/src/material/back_button.dart @@ -20,7 +20,7 @@ import 'theme.dart'; /// [Navigator.maybePop] to return to the previous route. /// * [IconButton], which is a more general widget for creating buttons /// with icons. -/// * [Icon], a material design icon. +/// * [Icon], a Material Design icon. /// * [ThemeData.platform], which specifies the current platform. class BackButtonIcon extends StatelessWidget { /// Creates an icon that shows the appropriate "back" image for @@ -45,7 +45,7 @@ class BackButtonIcon extends StatelessWidget { Widget build(BuildContext context) => Icon(_getIconData(Theme.of(context).platform)); } -/// A material design back button. +/// A Material Design back button. /// /// A [BackButton] is an [IconButton] with a "back" icon appropriate for the /// current [TargetPlatform]. When pressed, the back button calls @@ -110,7 +110,7 @@ class BackButton extends StatelessWidget { } } -/// A material design close button. +/// A Material Design close button. /// /// A [CloseButton] is an [IconButton] with a "close" icon. When pressed, the /// close button calls [Navigator.maybePop] to return to the previous route. @@ -125,7 +125,7 @@ class BackButton extends StatelessWidget { /// * [BackButton], which is more appropriate for middle nodes in the /// navigation tree or where pages can be popped instantaneously with /// no user data consequence. -/// * [IconButton], to create other material design icon buttons. +/// * [IconButton], to create other Material Design icon buttons. class CloseButton extends StatelessWidget { /// Creates a Material Design close button. const CloseButton({ super.key, this.color, this.onPressed }); diff --git a/packages/flutter/lib/src/material/banner.dart b/packages/flutter/lib/src/material/banner.dart index 2a623dc3089ef..c1741b4d15321 100644 --- a/packages/flutter/lib/src/material/banner.dart +++ b/packages/flutter/lib/src/material/banner.dart @@ -18,7 +18,7 @@ const Curve _materialBannerHeightCurve = Curves.fastOutSlowIn; /// The [ScaffoldMessengerState.showMaterialBanner] function returns a /// [ScaffoldFeatureController]. The value of the controller's closed property /// is a Future that resolves to a MaterialBannerClosedReason. Applications that need -/// to know how a material banner was closed can use this value. +/// to know how a [MaterialBanner] was closed can use this value. /// /// Example: /// @@ -183,7 +183,7 @@ class MaterialBanner extends StatefulWidget { // API for ScaffoldMessengerState.showMaterialBanner(): - /// Creates an animation controller useful for driving a material banner's entrance and exit animation. + /// Creates an animation controller useful for driving a [MaterialBanner]'s entrance and exit animation. static AnimationController createAnimationController({ required TickerProvider vsync }) { return AnimationController( duration: _materialBannerTransitionDuration, diff --git a/packages/flutter/lib/src/material/bottom_sheet.dart b/packages/flutter/lib/src/material/bottom_sheet.dart index 74916057c455c..33c72093d4728 100644 --- a/packages/flutter/lib/src/material/bottom_sheet.dart +++ b/packages/flutter/lib/src/material/bottom_sheet.dart @@ -35,9 +35,9 @@ typedef BottomSheetDragEndHandler = void Function( required bool isClosing, }); -/// A material design bottom sheet. +/// A Material Design bottom sheet. /// -/// There are two kinds of bottom sheets in material design: +/// There are two kinds of bottom sheets in Material Design: /// /// * _Persistent_. A persistent bottom sheet shows information that /// supplements the primary content of the app. A persistent bottom sheet @@ -600,7 +600,7 @@ class _BottomSheetSuspendedCurve extends ParametricCurve { } } -/// Shows a modal material design bottom sheet. +/// Shows a modal Material Design bottom sheet. /// /// A modal bottom sheet is an alternative to a menu or a dialog and prevents /// the user from interacting with the rest of the app. @@ -718,7 +718,7 @@ Future showModalBottomSheet({ )); } -/// Shows a material design bottom sheet in the nearest [Scaffold] ancestor. If +/// Shows a Material Design bottom sheet in the nearest [Scaffold] ancestor. If /// you wish to show a persistent bottom sheet, use [Scaffold.bottomSheet]. /// /// Returns a controller that can be used to close and otherwise manipulate the diff --git a/packages/flutter/lib/src/material/button_theme.dart b/packages/flutter/lib/src/material/button_theme.dart index 1c20a209f8cae..6e90139e47880 100644 --- a/packages/flutter/lib/src/material/button_theme.dart +++ b/packages/flutter/lib/src/material/button_theme.dart @@ -33,7 +33,7 @@ enum ButtonBarLayoutBehavior { /// Button bars will be constrained to a minimum height of 52. /// /// This setting is require to create button bars which conform to the - /// material specification. + /// Material Design specification. constrained, /// Button bars will calculate their padding from the button theme padding. diff --git a/packages/flutter/lib/src/material/calendar_date_picker.dart b/packages/flutter/lib/src/material/calendar_date_picker.dart index 66f4926263a87..64f86040c2865 100644 --- a/packages/flutter/lib/src/material/calendar_date_picker.dart +++ b/packages/flutter/lib/src/material/calendar_date_picker.dart @@ -52,7 +52,7 @@ const double _monthNavButtonsWidth = 108.0; /// * [showDatePicker], which creates a Dialog that contains a /// [CalendarDatePicker] and provides an optional compact view where the /// user can enter a date as a line of text. -/// * [showTimePicker], which shows a dialog that contains a material design +/// * [showTimePicker], which shows a dialog that contains a Material Design /// time picker. /// class CalendarDatePicker extends StatefulWidget { diff --git a/packages/flutter/lib/src/material/card.dart b/packages/flutter/lib/src/material/card.dart index 074a3d36c1879..ae4cea828c2bd 100644 --- a/packages/flutter/lib/src/material/card.dart +++ b/packages/flutter/lib/src/material/card.dart @@ -8,7 +8,7 @@ import 'card_theme.dart'; import 'material.dart'; import 'theme.dart'; -/// A material design card: a panel with slightly rounded corners and an +/// A Material Design card: a panel with slightly rounded corners and an /// elevation shadow. /// /// A card is a sheet of [Material] used to represent some related information, @@ -54,7 +54,7 @@ import 'theme.dart'; /// * [showDialog], to display a modal card. /// * class Card extends StatelessWidget { - /// Creates a material design card. + /// Creates a Material Design card. /// /// The [elevation] must be null or non-negative. The [borderOnForeground] /// must not be null. diff --git a/packages/flutter/lib/src/material/checkbox.dart b/packages/flutter/lib/src/material/checkbox.dart index d15a9574bf93b..05442f2ec81fd 100644 --- a/packages/flutter/lib/src/material/checkbox.dart +++ b/packages/flutter/lib/src/material/checkbox.dart @@ -12,7 +12,7 @@ import 'theme.dart'; import 'theme_data.dart'; import 'toggleable.dart'; -/// A material design checkbox. +/// A Material Design checkbox. /// /// The checkbox itself does not maintain any state. Instead, when the state of /// the checkbox changes, the widget calls the [onChanged] callback. Most @@ -46,7 +46,7 @@ import 'toggleable.dart'; /// * /// * class Checkbox extends StatefulWidget { - /// Creates a material design checkbox. + /// Creates a Material Design checkbox. /// /// The checkbox itself does not maintain any state. Instead, when the state of /// the checkbox changes, the widget calls the [onChanged] callback. Most diff --git a/packages/flutter/lib/src/material/chip.dart b/packages/flutter/lib/src/material/chip.dart index f12d1202c9443..4887f0a711e2a 100644 --- a/packages/flutter/lib/src/material/chip.dart +++ b/packages/flutter/lib/src/material/chip.dart @@ -39,7 +39,7 @@ const Duration _kDisableDuration = Duration(milliseconds: 75); const Color _kSelectScrimColor = Color(0x60191919); const Icon _kDefaultDeleteIcon = Icon(Icons.cancel, size: _kDeleteIconSize); -/// An interface defining the base attributes for a material design chip. +/// An interface defining the base attributes for a Material Design chip. /// /// Chips are compact elements that represent an attribute, text, entity, or /// action. @@ -187,7 +187,7 @@ abstract class ChipAttributes { Color? get shadowColor; } -/// An interface for material design chips that can be deleted. +/// An interface for Material Design chips that can be deleted. /// /// The defaults mentioned in the documentation for each attribute are what /// the implementing classes typically use for defaults (but this class doesn't @@ -257,7 +257,7 @@ abstract class DeletableChipAttributes { bool get useDeleteButtonTooltip; } -/// An interface for material design chips that can have check marks. +/// An interface for Material Design chips that can have check marks. /// /// The defaults mentioned in the documentation for each attribute are what /// the implementing classes typically use for defaults (but this class doesn't @@ -290,7 +290,7 @@ abstract class CheckmarkableChipAttributes { Color? get checkmarkColor; } -/// An interface for material design chips that can be selected. +/// An interface for Material Design chips that can be selected. /// /// The defaults mentioned in the documentation for each attribute are what /// the implementing classes typically use for defaults (but this class doesn't @@ -400,7 +400,7 @@ abstract class SelectableChipAttributes { ShapeBorder get avatarBorder; } -/// An interface for material design chips that can be enabled and disabled. +/// An interface for Material Design chips that can be enabled and disabled. /// /// The defaults mentioned in the documentation for each attribute are what /// the implementing classes typically use for defaults (but this class doesn't @@ -447,7 +447,7 @@ abstract class DisabledChipAttributes { Color? get disabledColor; } -/// An interface for material design chips that can be tapped. +/// An interface for Material Design chips that can be tapped. /// /// The defaults mentioned in the documentation for each attribute are what /// the implementing classes typically use for defaults (but this class doesn't @@ -509,7 +509,7 @@ abstract class TappableChipAttributes { String? get tooltip; } -/// A material design chip. +/// A Material Design chip. /// /// Chips are compact elements that represent an attribute, text, entity, or /// action. @@ -549,7 +549,7 @@ abstract class TappableChipAttributes { /// vertical runs. /// * class Chip extends StatelessWidget implements ChipAttributes, DeletableChipAttributes { - /// Creates a material design chip. + /// Creates a Material Design chip. /// /// The [label], [autofocus], and [clipBehavior] arguments must not be null. /// The [elevation] must be null or non-negative. @@ -658,7 +658,7 @@ class Chip extends StatelessWidget implements ChipAttributes, DeletableChipAttri } } -/// A raw material design chip. +/// A raw Material Design chip. /// /// This serves as the basis for all of the chip widget types to aggregate. /// It is typically not created directly, one of the other chip types diff --git a/packages/flutter/lib/src/material/chip_action.dart b/packages/flutter/lib/src/material/chip_action.dart index 4971ff70112ad..c3e86852948b8 100644 --- a/packages/flutter/lib/src/material/chip_action.dart +++ b/packages/flutter/lib/src/material/chip_action.dart @@ -8,7 +8,7 @@ import 'chip.dart'; import 'debug.dart'; import 'theme_data.dart'; -/// A material design action chip. +/// A Material Design action chip. /// /// Action chips are a set of options which trigger an action related to primary /// content. Action chips should appear dynamically and contextually in a UI. diff --git a/packages/flutter/lib/src/material/chip_choice.dart b/packages/flutter/lib/src/material/chip_choice.dart index ba32346cc9ea1..da2f7be0b144c 100644 --- a/packages/flutter/lib/src/material/chip_choice.dart +++ b/packages/flutter/lib/src/material/chip_choice.dart @@ -9,7 +9,7 @@ import 'chip_theme.dart'; import 'debug.dart'; import 'theme_data.dart'; -/// A material design choice chip. +/// A Material Design choice chip. /// /// [ChoiceChip]s represent a single choice from a set. Choice chips contain /// related descriptive text or categories. diff --git a/packages/flutter/lib/src/material/chip_filter.dart b/packages/flutter/lib/src/material/chip_filter.dart index cff1946213414..f266ebc6e8087 100644 --- a/packages/flutter/lib/src/material/chip_filter.dart +++ b/packages/flutter/lib/src/material/chip_filter.dart @@ -8,7 +8,7 @@ import 'chip.dart'; import 'debug.dart'; import 'theme_data.dart'; -/// A material design filter chip. +/// A Material Design filter chip. /// /// Filter chips use tags or descriptive words as a way to filter content. /// diff --git a/packages/flutter/lib/src/material/chip_input.dart b/packages/flutter/lib/src/material/chip_input.dart index 3394b01166d4b..bc37fa03f6dd3 100644 --- a/packages/flutter/lib/src/material/chip_input.dart +++ b/packages/flutter/lib/src/material/chip_input.dart @@ -8,7 +8,7 @@ import 'chip.dart'; import 'debug.dart'; import 'theme_data.dart'; -/// A material design input chip. +/// A Material Design input chip. /// /// Input chips represent a complex piece of information, such as an entity /// (person, place, or thing) or conversational text, in a compact form. diff --git a/packages/flutter/lib/src/material/chip_theme.dart b/packages/flutter/lib/src/material/chip_theme.dart index d31fbebddfed9..8a11b3b7bc6e6 100644 --- a/packages/flutter/lib/src/material/chip_theme.dart +++ b/packages/flutter/lib/src/material/chip_theme.dart @@ -98,7 +98,7 @@ class ChipTheme extends InheritedTheme { bool updateShouldNotify(ChipTheme oldWidget) => data != oldWidget.data; } -/// Holds the color, shape, and text styles for a material design chip theme. +/// Holds the color, shape, and text styles for a Material Design chip theme. /// /// Use this class to configure a [ChipTheme] widget, or to set the /// [ThemeData.chipTheme] for a [Theme] widget. diff --git a/packages/flutter/lib/src/material/colors.dart b/packages/flutter/lib/src/material/colors.dart index f15b00e806ec8..35cdc6f7699f2 100644 --- a/packages/flutter/lib/src/material/colors.dart +++ b/packages/flutter/lib/src/material/colors.dart @@ -1885,7 +1885,7 @@ class Colors { ); static const int _blueGreyPrimaryValue = 0xFF607D8B; - /// The material design primary color swatches, excluding grey. + /// The Material Design primary color swatches, excluding grey. static const List primaries = [ red, pink, @@ -1910,7 +1910,7 @@ class Colors { blueGrey, ]; - /// The material design accent color swatches. + /// The Material Design accent color swatches. static const List accents = [ redAccent, pinkAccent, diff --git a/packages/flutter/lib/src/material/data_table.dart b/packages/flutter/lib/src/material/data_table.dart index 8d936f5c78dcc..11c8ea330d61d 100644 --- a/packages/flutter/lib/src/material/data_table.dart +++ b/packages/flutter/lib/src/material/data_table.dart @@ -304,7 +304,7 @@ class DataCell { onTapCancel != null; } -/// A material design data table. +/// A Material Design data table. /// /// {@youtube 560 315 https://www.youtube.com/watch?v=ktTajqbhIcY} /// diff --git a/packages/flutter/lib/src/material/date.dart b/packages/flutter/lib/src/material/date.dart index 124a3ac294de1..2efd2c490e713 100644 --- a/packages/flutter/lib/src/material/date.dart +++ b/packages/flutter/lib/src/material/date.dart @@ -182,9 +182,9 @@ enum DatePickerEntryMode { /// /// See also: /// -/// * [showDatePicker], which shows a dialog that contains a material design +/// * [showDatePicker], which shows a dialog that contains a Material Design /// date picker. -/// * [CalendarDatePicker], widget which implements the material design date picker. +/// * [CalendarDatePicker], widget which implements the Material Design date picker. enum DatePickerMode { /// Choosing a month and day. day, diff --git a/packages/flutter/lib/src/material/date_picker.dart b/packages/flutter/lib/src/material/date_picker.dart index b428868ee117f..b8264148172fa 100644 --- a/packages/flutter/lib/src/material/date_picker.dart +++ b/packages/flutter/lib/src/material/date_picker.dart @@ -126,13 +126,13 @@ const double _inputFormLandscapeHeight = 108.0; /// /// See also: /// -/// * [showDateRangePicker], which shows a material design date range picker +/// * [showDateRangePicker], which shows a Material Design date range picker /// used to select a range of dates. /// * [CalendarDatePicker], which provides the calendar grid used by the date picker dialog. /// * [InputDatePickerFormField], which provides a text input field for entering dates. /// * [DisplayFeatureSubScreen], which documents the specifics of how /// [DisplayFeature]s can split the screen into sub-screens. -/// * [showTimePicker], which shows a dialog that contains a material design time picker. +/// * [showTimePicker], which shows a dialog that contains a Material Design time picker. /// Future showDatePicker({ required BuildContext context, @@ -925,7 +925,7 @@ class _DatePickerHeader extends StatelessWidget { /// /// See also: /// -/// * [showDatePicker], which shows a material design date picker used to +/// * [showDatePicker], which shows a Material Design date picker used to /// select a single date. /// * [DateTimeRange], which is used to describe a date range. /// * [DisplayFeatureSubScreen], which documents the specifics of how diff --git a/packages/flutter/lib/src/material/debug.dart b/packages/flutter/lib/src/material/debug.dart index ef61d8014ebc3..8f2e97f5f6946 100644 --- a/packages/flutter/lib/src/material/debug.dart +++ b/packages/flutter/lib/src/material/debug.dart @@ -10,7 +10,7 @@ import 'scaffold.dart' show Scaffold, ScaffoldMessenger; /// Asserts that the given context has a [Material] ancestor. /// -/// Used by many material design widgets to make sure that they are +/// Used by many Material Design widgets to make sure that they are /// only used in contexts where they can print ink onto some material. /// /// To call this function, use the following pattern, typically in the @@ -31,7 +31,7 @@ bool debugCheckHasMaterial(BuildContext context) { ErrorDescription( '${context.widget.runtimeType} widgets require a Material ' 'widget ancestor.\n' - 'In material design, most widgets are conceptually "printed" on ' + 'In Material Design, most widgets are conceptually "printed" on ' "a sheet of material. In Flutter's material library, that " 'material is represented by the Material widget. It is the ' 'Material widget that renders ink splashes, for instance. ' @@ -54,7 +54,7 @@ bool debugCheckHasMaterial(BuildContext context) { /// Asserts that the given context has a [Localizations] ancestor that contains /// a [MaterialLocalizations] delegate. /// -/// Used by many material design widgets to make sure that they are +/// Used by many Material Design widgets to make sure that they are /// only used in contexts where they have access to localizations. /// /// To call this function, use the following pattern, typically in the diff --git a/packages/flutter/lib/src/material/dialog.dart b/packages/flutter/lib/src/material/dialog.dart index 1a26d32dadd2e..fcc519d7d8aa4 100644 --- a/packages/flutter/lib/src/material/dialog.dart +++ b/packages/flutter/lib/src/material/dialog.dart @@ -24,11 +24,11 @@ import 'theme_data.dart'; const EdgeInsets _defaultInsetPadding = EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0); -/// A material design dialog. +/// A Material Design dialog. /// /// This dialog widget does not have any opinion about the contents of the /// dialog. Rather than using this widget directly, consider using [AlertDialog] -/// or [SimpleDialog], which implement specific kinds of material design +/// or [SimpleDialog], which implement specific kinds of Material Design /// dialogs. /// /// See also: @@ -166,7 +166,7 @@ class Dialog extends StatelessWidget { } } -/// A material design alert dialog. +/// A Material Design alert dialog. /// /// An alert dialog informs the user about situations that require /// acknowledgement. An alert dialog has an optional title and an optional list @@ -700,7 +700,7 @@ class SimpleDialogOption extends StatelessWidget { } } -/// A simple material design dialog. +/// A simple Material Design dialog. /// /// A simple dialog offers the user a choice between several options. A simple /// dialog has an optional title that is displayed above the choices. diff --git a/packages/flutter/lib/src/material/dialog_theme.dart b/packages/flutter/lib/src/material/dialog_theme.dart index f3718fdd2ad3f..9621050a9f875 100644 --- a/packages/flutter/lib/src/material/dialog_theme.dart +++ b/packages/flutter/lib/src/material/dialog_theme.dart @@ -24,7 +24,7 @@ import 'theme.dart'; /// /// See also: /// -/// * [Dialog], a material dialog that can be customized using this [DialogTheme]. +/// * [Dialog], a Material Design dialog that can be customized using this [DialogTheme]. /// * [ThemeData], which describes the overall theme information for the /// application. @immutable diff --git a/packages/flutter/lib/src/material/divider.dart b/packages/flutter/lib/src/material/divider.dart index 341b10f5ae6be..44b3f6649b827 100644 --- a/packages/flutter/lib/src/material/divider.dart +++ b/packages/flutter/lib/src/material/divider.dart @@ -12,7 +12,7 @@ import 'theme.dart'; /// A thin horizontal line, with padding on either side. /// -/// In the material design language, this represents a divider. Dividers can be +/// In the Material Design language, this represents a divider. Dividers can be /// used in lists, [Drawer]s, and elsewhere to separate content. /// /// To create a divider between [ListTile] items, consider using @@ -41,7 +41,7 @@ import 'theme.dart'; /// * [VerticalDivider], which is the vertical analog of this widget. /// * class Divider extends StatelessWidget { - /// Creates a material design divider. + /// Creates a Material Design divider. /// /// The [height], [thickness], [indent], and [endIndent] must be null or /// non-negative. @@ -179,7 +179,7 @@ class Divider extends StatelessWidget { /// A thin vertical line, with padding on either side. /// -/// In the material design language, this represents a divider. Vertical +/// In the Material Design language, this represents a divider. Vertical /// dividers can be used in horizontally scrolling lists, such as a /// [ListView] with [ListView.scrollDirection] set to [Axis.horizontal]. /// @@ -201,7 +201,7 @@ class Divider extends StatelessWidget { /// * [Divider], which is the horizontal analog of this widget. /// * class VerticalDivider extends StatelessWidget { - /// Creates a material design vertical divider. + /// Creates a Material Design vertical divider. /// /// The [width], [thickness], [indent], and [endIndent] must be null or /// non-negative. diff --git a/packages/flutter/lib/src/material/drawer.dart b/packages/flutter/lib/src/material/drawer.dart index 667566279e974..6542de82dc7e6 100644 --- a/packages/flutter/lib/src/material/drawer.dart +++ b/packages/flutter/lib/src/material/drawer.dart @@ -47,7 +47,7 @@ const double _kEdgeDragWidth = 20.0; const double _kMinFlingVelocity = 365.0; const Duration _kBaseSettleDuration = Duration(milliseconds: 246); -/// A material design panel that slides in horizontally from the edge of a +/// A Material Design panel that slides in horizontally from the edge of a /// [Scaffold] to show navigation links in an application. /// /// {@youtube 560 315 https://www.youtube.com/watch?v=WRj86iHihgY} @@ -134,7 +134,7 @@ const Duration _kBaseSettleDuration = Duration(milliseconds: 246); /// * [ScaffoldState.openDrawer], which displays its [Drawer], if any. /// * class Drawer extends StatelessWidget { - /// Creates a material design drawer. + /// Creates a Material Design drawer. /// /// Typically used in the [Scaffold.drawer] property. /// diff --git a/packages/flutter/lib/src/material/drawer_header.dart b/packages/flutter/lib/src/material/drawer_header.dart index 1a7e91c17b3e8..4b5a2df6f9f78 100644 --- a/packages/flutter/lib/src/material/drawer_header.dart +++ b/packages/flutter/lib/src/material/drawer_header.dart @@ -10,11 +10,11 @@ import 'theme.dart'; const double _kDrawerHeaderHeight = 160.0 + 1.0; // bottom edge -/// The top-most region of a material design drawer. The header's [child] +/// The top-most region of a Material Design drawer. The header's [child] /// widget, if any, is placed inside a [Container] whose [decoration] can be /// passed as an argument, inset by the given [padding]. /// -/// Part of the material design [Drawer]. +/// Part of the Material Design [Drawer]. /// /// Requires one of its ancestors to be a [Material] widget. This condition is /// satisfied by putting the [DrawerHeader] in a [Drawer]. @@ -25,7 +25,7 @@ const double _kDrawerHeaderHeight = 160.0 + 1.0; // bottom edge /// specialized for showing user accounts. /// * class DrawerHeader extends StatelessWidget { - /// Creates a material design drawer header. + /// Creates a Material Design drawer header. /// /// Requires one of its ancestors to be a [Material] widget. const DrawerHeader({ diff --git a/packages/flutter/lib/src/material/dropdown.dart b/packages/flutter/lib/src/material/dropdown.dart index 9b186ca28b56d..1fad88a9735ad 100644 --- a/packages/flutter/lib/src/material/dropdown.dart +++ b/packages/flutter/lib/src/material/dropdown.dart @@ -759,7 +759,7 @@ class DropdownMenuItem extends _DropdownMenuItemContainer { /// /// This is used by [DataTable] to remove the underline from any /// [DropdownButton] widgets placed within material data tables, as -/// required by the material design specification. +/// required by the Material Design specification. class DropdownButtonHideUnderline extends InheritedWidget { /// Creates a [DropdownButtonHideUnderline]. A non-null [child] must /// be given. @@ -778,7 +778,7 @@ class DropdownButtonHideUnderline extends InheritedWidget { bool updateShouldNotify(DropdownButtonHideUnderline oldWidget) => false; } -/// A material design button for selecting from a list of items. +/// A Material Design button for selecting from a list of items. /// /// A dropdown button lets the user select from a number of items. The button /// shows the currently selected item as well as an arrow that opens a menu for diff --git a/packages/flutter/lib/src/material/flexible_space_bar.dart b/packages/flutter/lib/src/material/flexible_space_bar.dart index 58c841c1539a5..58ec0cb05a3ac 100644 --- a/packages/flutter/lib/src/material/flexible_space_bar.dart +++ b/packages/flutter/lib/src/material/flexible_space_bar.dart @@ -35,7 +35,7 @@ enum StretchMode { fadeTitle, } -/// The part of a material design [AppBar] that expands, collapses, and +/// The part of a Material Design [AppBar] that expands, collapses, and /// stretches. /// /// {@youtube 560 315 https://www.youtube.com/watch?v=mSc7qFzxHDw} diff --git a/packages/flutter/lib/src/material/floating_action_button.dart b/packages/flutter/lib/src/material/floating_action_button.dart index 2ca2e7ace9dcf..021e7c5809102 100644 --- a/packages/flutter/lib/src/material/floating_action_button.dart +++ b/packages/flutter/lib/src/material/floating_action_button.dart @@ -30,7 +30,7 @@ enum _FloatingActionButtonType { extended, } -/// A material design floating action button. +/// A Material Design floating action button. /// /// A floating action button is a circular icon button that hovers over content /// to promote a primary action in the application. Floating action buttons are @@ -331,7 +331,7 @@ class FloatingActionButton extends StatelessWidget { /// If this is not explicitly set, then there can only be one /// [FloatingActionButton] per route (that is, per screen), since otherwise /// there would be a tag conflict (multiple heroes on one route can't have the - /// same tag). The material design specification recommends only using one + /// same tag). The Material Design specification recommends only using one /// floating action button per screen. final Object? heroTag; diff --git a/packages/flutter/lib/src/material/grid_tile.dart b/packages/flutter/lib/src/material/grid_tile.dart index 59f703d95d65e..e6bd778765dac 100644 --- a/packages/flutter/lib/src/material/grid_tile.dart +++ b/packages/flutter/lib/src/material/grid_tile.dart @@ -4,7 +4,7 @@ import 'package:flutter/widgets.dart'; -/// A tile in a material design grid list. +/// A tile in a Material Design grid list. /// /// A grid list is a [GridView] of tiles in a vertical and horizontal /// array. Each tile typically contains some visually rich content (e.g., an diff --git a/packages/flutter/lib/src/material/grid_tile_bar.dart b/packages/flutter/lib/src/material/grid_tile_bar.dart index c4782a9824b63..70d158128e566 100644 --- a/packages/flutter/lib/src/material/grid_tile_bar.dart +++ b/packages/flutter/lib/src/material/grid_tile_bar.dart @@ -7,7 +7,7 @@ import 'package:flutter/widgets.dart'; import 'colors.dart'; import 'theme.dart'; -/// A header used in a material design [GridTile]. +/// A header used in a Material Design [GridTile]. /// /// Typically used to add a one or two line header or footer on a [GridTile]. /// diff --git a/packages/flutter/lib/src/material/icon_button.dart b/packages/flutter/lib/src/material/icon_button.dart index 1677b2d137a59..267b9dcecd43e 100644 --- a/packages/flutter/lib/src/material/icon_button.dart +++ b/packages/flutter/lib/src/material/icon_button.dart @@ -21,7 +21,7 @@ import 'tooltip.dart'; // See: . const double _kMinButtonSize = kMinInteractiveDimension; -/// A material design icon button. +/// A Material Design icon button. /// /// An icon button is a picture printed on a [Material] widget that reacts to /// touches by filling with color (ink). @@ -94,7 +94,7 @@ const double _kMinButtonSize = kMinInteractiveDimension; /// /// See also: /// -/// * [Icons], a library of predefined icons. +/// * [Icons], the library of Material Icons. /// * [BackButton], an icon button for a "back" affordance which adapts to the /// current platform's conventions. /// * [CloseButton], an icon button for closing pages. diff --git a/packages/flutter/lib/src/material/icons.dart b/packages/flutter/lib/src/material/icons.dart index 5b19c625b1b0c..fd2ae28a3b4dc 100644 --- a/packages/flutter/lib/src/material/icons.dart +++ b/packages/flutter/lib/src/material/icons.dart @@ -7,7 +7,7 @@ import 'package:flutter/widgets.dart'; // ignore_for_file: non_constant_identifier_names -/// A set of platform-adaptive material design icons. +/// A set of platform-adaptive Material Design icons. /// /// Use [Icons.adaptive] to access a static instance of this class. class PlatformAdaptiveIcons implements Icons { @@ -93,7 +93,7 @@ class PlatformAdaptiveIcons implements Icons { // END GENERATED PLATFORM ADAPTIVE ICONS } -/// Identifiers for the supported material design icons. +/// Identifiers for the supported Material Design icons. /// /// Use with the [Icon] class to show specific icons. /// @@ -152,7 +152,7 @@ class Icons { // prevents instantiation and extension. Icons._(); - /// A set of platform-adaptive material design icons. + /// A set of platform-adaptive Material Design icons. /// /// Provides a convenient way to show a certain set of platform-appropriate /// icons on Apple platforms. diff --git a/packages/flutter/lib/src/material/ink_well.dart b/packages/flutter/lib/src/material/ink_well.dart index 6192ec59b005f..f8faa5dd1b44c 100644 --- a/packages/flutter/lib/src/material/ink_well.dart +++ b/packages/flutter/lib/src/material/ink_well.dart @@ -247,7 +247,7 @@ typedef _CheckContext = bool Function(BuildContext context); /// /// The [InkResponse] widget must have a [Material] widget as an ancestor. The /// [Material] widget is where the ink reactions are actually painted. This -/// matches the material design premise wherein the [Material] is what is +/// matches the Material Design premise wherein the [Material] is what is /// actually reacting to touches by spreading ink. /// /// If a Widget uses this class directly, it should include the following line @@ -280,7 +280,7 @@ typedef _CheckContext = bool Function(BuildContext context); /// See also: /// /// * [GestureDetector], for listening for gestures without ink splashes. -/// * [ElevatedButton] and [TextButton], two kinds of buttons in material design. +/// * [ElevatedButton] and [TextButton], two kinds of buttons in Material Design. /// * [IconButton], which combines [InkResponse] with an [Icon]. class InkResponse extends StatelessWidget { /// Creates an area of a [Material] that responds to touch. @@ -1147,7 +1147,7 @@ class _InkResponseState extends State<_InkResponseStateWidget> /// /// The [InkWell] widget must have a [Material] widget as an ancestor. The /// [Material] widget is where the ink reactions are actually painted. This -/// matches the material design premise wherein the [Material] is what is +/// matches the Material Design premise wherein the [Material] is what is /// actually reacting to touches by spreading ink. /// /// If a Widget uses this class directly, it should include the following line @@ -1211,7 +1211,7 @@ class _InkResponseState extends State<_InkResponseStateWidget> /// See also: /// /// * [GestureDetector], for listening for gestures without ink splashes. -/// * [ElevatedButton] and [TextButton], two kinds of buttons in material design. +/// * [ElevatedButton] and [TextButton], two kinds of buttons in Material Design. /// * [InkResponse], a variant of [InkWell] that doesn't force a rectangular /// shape on the ink reaction. class InkWell extends InkResponse { diff --git a/packages/flutter/lib/src/material/input_date_picker_form_field.dart b/packages/flutter/lib/src/material/input_date_picker_form_field.dart index c0b27573a7d7c..3fcec07161001 100644 --- a/packages/flutter/lib/src/material/input_date_picker_form_field.dart +++ b/packages/flutter/lib/src/material/input_date_picker_form_field.dart @@ -25,7 +25,7 @@ import 'theme.dart'; /// /// See also: /// -/// * [showDatePicker], which shows a dialog that contains a material design +/// * [showDatePicker], which shows a dialog that contains a Material Design /// date picker which includes support for text entry of dates. /// * [MaterialLocalizations.parseCompactDate], which is used to parse the text /// input into a [DateTime]. diff --git a/packages/flutter/lib/src/material/input_decorator.dart b/packages/flutter/lib/src/material/input_decorator.dart index 5edd6046beb1f..2ff89d206686f 100644 --- a/packages/flutter/lib/src/material/input_decorator.dart +++ b/packages/flutter/lib/src/material/input_decorator.dart @@ -2844,10 +2844,10 @@ class InputDecoration { /// /// The prefix icon is constrained with a minimum size of 48px by 48px, but /// can be expanded beyond that. Anything larger than 24px will require - /// additional padding to ensure it matches the material spec of 12px padding - /// between the left edge of the input and leading edge of the prefix icon. - /// The following snippet shows how to pad the leading edge of the prefix - /// icon: + /// additional padding to ensure it matches the Material Design spec of 12px + /// padding between the left edge of the input and leading edge of the prefix + /// icon. The following snippet shows how to pad the leading edge of the + /// prefix icon: /// /// ```dart /// prefixIcon: Padding( @@ -2966,10 +2966,10 @@ class InputDecoration { /// /// The suffix icon is constrained with a minimum size of 48px by 48px, but /// can be expanded beyond that. Anything larger than 24px will require - /// additional padding to ensure it matches the material spec of 12px padding - /// between the right edge of the input and trailing edge of the prefix icon. - /// The following snippet shows how to pad the trailing edge of the suffix - /// icon: + /// additional padding to ensure it matches the Material Design spec of 12px + /// padding between the right edge of the input and trailing edge of the + /// prefix icon. The following snippet shows how to pad the trailing edge of + /// the suffix icon: /// /// ```dart /// suffixIcon: Padding( diff --git a/packages/flutter/lib/src/material/list_tile.dart b/packages/flutter/lib/src/material/list_tile.dart index 5dd7aec93cd9a..3dd93577239f3 100644 --- a/packages/flutter/lib/src/material/list_tile.dart +++ b/packages/flutter/lib/src/material/list_tile.dart @@ -95,7 +95,7 @@ enum ListTileControlAffinity { /// widget, like `Container(color: Colors.white)`, is included in /// between the [ListTile] and its [Material] ancestor, then the /// opaque widget will obscure the material widget and its background -/// [tileColor], etc. If this a problem, one can wrap a material +/// [tileColor], etc. If this a problem, one can wrap a [Material] /// widget around the list tile, e.g.: /// /// ```dart diff --git a/packages/flutter/lib/src/material/material.dart b/packages/flutter/lib/src/material/material.dart index dc2aecff251e3..a8fddca7025ed 100644 --- a/packages/flutter/lib/src/material/material.dart +++ b/packages/flutter/lib/src/material/material.dart @@ -15,7 +15,7 @@ import 'theme.dart'; /// Used by [InkHighlight] and [InkSplash], for example. typedef RectCallback = Rect Function(); -/// The various kinds of material in material design. Used to +/// The various kinds of material in Material Design. Used to /// configure the default behavior of [Material] widgets. /// /// See also: @@ -48,7 +48,7 @@ enum MaterialType { transparency } -/// The border radii used by the various kinds of material in material design. +/// The border radii used by the various kinds of material in Material Design. /// /// See also: /// @@ -62,7 +62,7 @@ const Map kMaterialEdges = class OutlinedButton extends ButtonStyleButton { /// Create an OutlinedButton. diff --git a/packages/flutter/lib/src/material/paginated_data_table.dart b/packages/flutter/lib/src/material/paginated_data_table.dart index 5669eb0485020..f79abdbab4e6d 100644 --- a/packages/flutter/lib/src/material/paginated_data_table.dart +++ b/packages/flutter/lib/src/material/paginated_data_table.dart @@ -20,7 +20,7 @@ import 'material_localizations.dart'; import 'progress_indicator.dart'; import 'theme.dart'; -/// A material design data table that shows data using multiple pages. +/// A Material Design data table that shows data using multiple pages. /// /// A paginated data table shows [rowsPerPage] rows of data per page and /// provides controls for showing other pages. diff --git a/packages/flutter/lib/src/material/popup_menu.dart b/packages/flutter/lib/src/material/popup_menu.dart index 1fc280ad18fbf..aaefd3da6ad7e 100644 --- a/packages/flutter/lib/src/material/popup_menu.dart +++ b/packages/flutter/lib/src/material/popup_menu.dart @@ -47,7 +47,7 @@ enum PopupMenuPosition { under, } -/// A base class for entries in a material design popup menu. +/// A base class for entries in a Material Design popup menu. /// /// The popup menu widget uses this interface to interact with the menu items. /// To show a popup menu, use the [showMenu] function. To create a button that @@ -96,7 +96,7 @@ abstract class PopupMenuEntry extends StatefulWidget { bool represents(T? value); } -/// A horizontal divider in a material design popup menu. +/// A horizontal divider in a Material Design popup menu. /// /// This widget adapts the [Divider] for use in popup menus. /// @@ -180,7 +180,7 @@ class _RenderMenuItem extends RenderShiftedBox { } } -/// An item in a material design popup menu. +/// An item in a Material Design popup menu. /// /// To show a popup menu, use the [showMenu] function. To create a button that /// shows a popup menu, consider using [PopupMenuButton]. @@ -384,7 +384,7 @@ class PopupMenuItemState> extends State { } } -/// An item with a checkmark in a material design popup menu. +/// An item with a checkmark in a Material Design popup menu. /// /// To show a popup menu, use the [showMenu] function. To create a button that /// shows a popup menu, consider using [PopupMenuButton]. @@ -1123,7 +1123,7 @@ class PopupMenuButton extends StatefulWidget { /// ``` /// /// The default constraints ensure that the menu width matches maximum width - /// recommended by the material design guidelines. + /// recommended by the Material Design guidelines. /// Specifying this parameter enables creation of menu wider than /// the default maximum width. final BoxConstraints? constraints; diff --git a/packages/flutter/lib/src/material/progress_indicator.dart b/packages/flutter/lib/src/material/progress_indicator.dart index 3a5fbbad475d6..afc387d49c21f 100644 --- a/packages/flutter/lib/src/material/progress_indicator.dart +++ b/packages/flutter/lib/src/material/progress_indicator.dart @@ -18,7 +18,7 @@ const int _kIndeterminateCircularDuration = 1333 * 2222; enum _ActivityIndicatorType { material, adaptive } -/// A base class for material design progress indicators. +/// A base class for Material Design progress indicators. /// /// This widget cannot be instantiated directly. For a linear progress /// indicator, see [LinearProgressIndicator]. For a circular progress indicator, @@ -225,7 +225,7 @@ class _LinearProgressIndicatorPainter extends CustomPainter { } } -/// A material design linear progress indicator, also known as a progress bar. +/// A Material Design linear progress indicator, also known as a progress bar. /// /// {@youtube 560 315 https://www.youtube.com/watch?v=O-rhXZLtpv0} /// @@ -438,7 +438,7 @@ class _CircularProgressIndicatorPainter extends CustomPainter { } } -/// A material design circular progress indicator, which spins to indicate that +/// A Material Design circular progress indicator, which spins to indicate that /// the application is busy. /// /// {@youtube 560 315 https://www.youtube.com/watch?v=O-rhXZLtpv0} diff --git a/packages/flutter/lib/src/material/radio.dart b/packages/flutter/lib/src/material/radio.dart index 9d5ed4ac1c03f..79714204f0b35 100644 --- a/packages/flutter/lib/src/material/radio.dart +++ b/packages/flutter/lib/src/material/radio.dart @@ -15,7 +15,7 @@ import 'toggleable.dart'; const double _kOuterRadius = 8.0; const double _kInnerRadius = 4.5; -/// A material design radio button. +/// A Material Design radio button. /// /// Used to select between a number of mutually exclusive values. When one radio /// button in a group is selected, the other radio buttons in the group cease to @@ -55,7 +55,7 @@ const double _kInnerRadius = 4.5; /// * [Checkbox] and [Switch], for toggling a particular value on or off. /// * class Radio extends StatefulWidget { - /// Creates a material design radio button. + /// Creates a Material Design radio button. /// /// The radio button itself does not maintain any state. Instead, when the /// radio button is selected, the widget calls the [onChanged] callback. Most diff --git a/packages/flutter/lib/src/material/scaffold.dart b/packages/flutter/lib/src/material/scaffold.dart index 8aa2a72d84537..1bde8e9190908 100644 --- a/packages/flutter/lib/src/material/scaffold.dart +++ b/packages/flutter/lib/src/material/scaffold.dart @@ -474,8 +474,8 @@ class ScaffoldMessengerState extends State with TickerProvide } } - /// Removes all the materialBanners currently in queue by clearing the queue - /// and running normal exit animation on the current materialBanner. + /// Removes all the [MaterialBanner]s currently in queue by clearing the queue + /// and running normal exit animation on the current [MaterialBanner]. void clearMaterialBanners() { if (_materialBanners.isEmpty || _materialBannerController!.status == AnimationStatus.dismissed) return; @@ -1333,7 +1333,7 @@ class _FloatingActionButtonTransitionState extends State<_FloatingActionButtonTr } } -/// Implements the basic material design visual layout structure. +/// Implements the basic Material Design visual layout structure. /// /// This class provides APIs for showing drawers and bottom sheets. /// @@ -1454,7 +1454,7 @@ class _FloatingActionButtonTransitionState extends State<_FloatingActionButtonTr /// * /// * Cookbook: [Add a Drawer to a screen](https://flutter.dev/docs/cookbook/design/drawer) class Scaffold extends StatefulWidget { - /// Creates a visual scaffold for material design widgets. + /// Creates a visual scaffold for Material Design widgets. const Scaffold({ super.key, this.appBar, @@ -2250,7 +2250,7 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto ); } - /// Shows a material design bottom sheet in the nearest [Scaffold]. To show + /// Shows a Material Design bottom sheet in the nearest [Scaffold]. To show /// a persistent bottom sheet, use the [Scaffold.bottomSheet]. /// /// Returns a controller that can be used to close and otherwise manipulate the diff --git a/packages/flutter/lib/src/material/scrollbar.dart b/packages/flutter/lib/src/material/scrollbar.dart index 3d0e0823643df..2d62f967a8cb3 100644 --- a/packages/flutter/lib/src/material/scrollbar.dart +++ b/packages/flutter/lib/src/material/scrollbar.dart @@ -70,7 +70,7 @@ const Duration _kScrollbarTimeToFade = Duration(milliseconds: 600); /// * [ListView], which displays a linear, scrollable list of children. /// * [GridView], which displays a 2 dimensional, scrollable array of children. class Scrollbar extends StatelessWidget { - /// Creates a material design scrollbar that by default will connect to the + /// Creates a Material Design scrollbar that by default will connect to the /// closest Scrollable descendant of [child]. /// /// The [child] should be a source of [ScrollNotification] notifications, diff --git a/packages/flutter/lib/src/material/shadows.dart b/packages/flutter/lib/src/material/shadows.dart index 523dfb6eb6d25..35947a61b842d 100644 --- a/packages/flutter/lib/src/material/shadows.dart +++ b/packages/flutter/lib/src/material/shadows.dart @@ -8,7 +8,7 @@ import 'package:flutter/painting.dart'; // Currently, only the elevation values that are bound to one or more widgets are // defined here. -/// Map of elevation offsets used by material design to [BoxShadow] definitions. +/// Map of elevation offsets used by Material Design to [BoxShadow] definitions. /// /// The following elevations have defined shadows: 1, 2, 3, 4, 6, 8, 9, 12, 16, 24. /// diff --git a/packages/flutter/lib/src/material/slider_theme.dart b/packages/flutter/lib/src/material/slider_theme.dart index f485f4badc525..96efbbd0b0922 100644 --- a/packages/flutter/lib/src/material/slider_theme.dart +++ b/packages/flutter/lib/src/material/slider_theme.dart @@ -150,7 +150,7 @@ enum Thumb { end, } -/// Holds the color, shape, and typography values for a material design slider +/// Holds the color, shape, and typography values for a Material Design slider /// theme. /// /// Use this class to configure a [SliderTheme] widget, or to set the @@ -2286,7 +2286,7 @@ class RoundSliderThumbShape extends SliderComponentShape { /// The preferred radius of the round thumb shape when the slider is enabled. /// - /// If it is not provided, then the material default of 10 is used. + /// If it is not provided, then the Material Design default of 10 is used. final double enabledThumbRadius; /// The preferred radius of the round thumb shape when the slider is disabled. @@ -2394,7 +2394,7 @@ class RoundRangeSliderThumbShape extends RangeSliderThumbShape { /// The preferred radius of the round thumb shape when the slider is enabled. /// - /// If it is not provided, then the material default of 10 is used. + /// If it is not provided, then the Material Design default of 10 is used. final double enabledThumbRadius; /// The preferred radius of the round thumb shape when the slider is disabled. diff --git a/packages/flutter/lib/src/material/switch.dart b/packages/flutter/lib/src/material/switch.dart index f9474184f8f0d..9d5c04248b43a 100644 --- a/packages/flutter/lib/src/material/switch.dart +++ b/packages/flutter/lib/src/material/switch.dart @@ -28,7 +28,7 @@ const double _kSwitchHeightCollapsed = _kSwitchMinSize; enum _SwitchType { material, adaptive } -/// A material design switch. +/// A Material Design switch. /// /// Used to toggle the on/off state of a single setting. /// @@ -53,7 +53,7 @@ enum _SwitchType { material, adaptive } /// * [Slider], for selecting a value in a range. /// * class Switch extends StatelessWidget { - /// Creates a material design switch. + /// Creates a Material Design switch. /// /// The switch itself does not maintain any state. Instead, when the state of /// the switch changes, the widget calls the [onChanged] callback. Most widgets diff --git a/packages/flutter/lib/src/material/tabs.dart b/packages/flutter/lib/src/material/tabs.dart index f24f4344a758e..a8ab3c2090e31 100644 --- a/packages/flutter/lib/src/material/tabs.dart +++ b/packages/flutter/lib/src/material/tabs.dart @@ -47,7 +47,7 @@ enum TabBarIndicatorSize { label, } -/// A material design [TabBar] tab. +/// A Material Design [TabBar] tab. /// /// If both [icon] and [text] are provided, the text is displayed below /// the icon. @@ -59,7 +59,7 @@ enum TabBarIndicatorSize { /// * [TabController], which coordinates tab selection between a [TabBar] and a [TabBarView]. /// * class Tab extends StatelessWidget implements PreferredSizeWidget { - /// Creates a material design [TabBar] tab. + /// Creates a Material Design [TabBar] tab. /// /// At least one of [text], [icon], and [child] must be non-null. The [text] /// and [child] arguments must not be used at the same time. The @@ -552,7 +552,7 @@ class _TabBarScrollController extends ScrollController { } } -/// A material design widget that displays a horizontal row of tabs. +/// A Material Design widget that displays a horizontal row of tabs. /// /// Typically created as the [AppBar.bottom] part of an [AppBar] and in /// conjunction with a [TabBarView]. @@ -588,7 +588,7 @@ class _TabBarScrollController extends ScrollController { /// * [TabBarView], which displays page views that correspond to each tab. /// * [TabBar], which is used to display the [Tab] that corresponds to each page of the [TabBarView]. class TabBar extends StatefulWidget implements PreferredSizeWidget { - /// Creates a material design tab bar. + /// Creates a Material Design tab bar. /// /// The [tabs] argument must not be null and its length must match the [controller]'s /// [TabController.length]. diff --git a/packages/flutter/lib/src/material/text_field.dart b/packages/flutter/lib/src/material/text_field.dart index 74e5585c90bf4..c7caa46b07238 100644 --- a/packages/flutter/lib/src/material/text_field.dart +++ b/packages/flutter/lib/src/material/text_field.dart @@ -113,7 +113,7 @@ class _TextFieldSelectionGestureDetectorBuilder extends TextSelectionGestureDete } } -/// A material design text field. +/// A Material Design text field. /// /// A text field lets the user enter text, either with hardware keyboard or with /// an onscreen keyboard. diff --git a/packages/flutter/lib/src/material/text_theme.dart b/packages/flutter/lib/src/material/text_theme.dart index 24f8ace1b416c..8c26fdc7247c1 100644 --- a/packages/flutter/lib/src/material/text_theme.dart +++ b/packages/flutter/lib/src/material/text_theme.dart @@ -66,7 +66,7 @@ import 'typography.dart'; /// See also: /// /// * [Typography], the class that generates [TextTheme]s appropriate for a platform. -/// * [Theme], for other aspects of a material design application that can be +/// * [Theme], for other aspects of a Material Design application that can be /// globally adjusted, such as the color scheme. /// * @immutable @@ -75,7 +75,7 @@ class TextTheme with Diagnosticable { /// /// Rather than creating a new text theme, consider using [Typography.black] /// or [Typography.white], which implement the typography styles in the - /// material design specification: + /// Material Design specification: /// /// /// @@ -280,7 +280,7 @@ class TextTheme with Diagnosticable { /// the new values. /// /// Consider using [Typography.black] or [Typography.white], which implement - /// the typography styles in the material design specification, as a starting + /// the typography styles in the Material Design specification, as a starting /// point. /// /// {@tool snippet} @@ -455,7 +455,7 @@ class TextTheme with Diagnosticable { /// `bodyColor` is applied to the remaining text styles. /// /// Consider using [Typography.black] or [Typography.white], which implement - /// the typography styles in the material design specification, as a starting + /// the typography styles in the Material Design specification, as a starting /// point. TextTheme apply({ String? fontFamily, diff --git a/packages/flutter/lib/src/material/theme_data.dart b/packages/flutter/lib/src/material/theme_data.dart index 40b8e54ed1bd7..b9e7202e4efd7 100644 --- a/packages/flutter/lib/src/material/theme_data.dart +++ b/packages/flutter/lib/src/material/theme_data.dart @@ -994,7 +994,7 @@ class ThemeData with Diagnosticable { /// /// See also: /// - /// * [StretchingOverscrollIndicator], a material design edge effect + /// * [StretchingOverscrollIndicator], a Material Design edge effect /// that transforms the contents of a scrollable when overscrolled. /// * [GlowingOverscrollIndicator], an edge effect that paints a glow /// over the contents of a scrollable when overscrolled. @@ -1867,7 +1867,7 @@ class ThemeData with Diagnosticable { /// [Brightness.dark]. /// /// This compares the luminosity of the given color to a threshold value that - /// matches the material design specification. + /// matches the Material Design specification. static Brightness estimateBrightnessForColor(Color color) { final double relativeLuminance = color.computeLuminance(); @@ -2624,7 +2624,7 @@ class VisualDensity with Diagnosticable { /// The base adjustment in logical pixels of the visual density of UI components. /// /// The input density values are multiplied by a constant to arrive at a base - /// size adjustment that fits material design guidelines. + /// size adjustment that fits Material Design guidelines. /// /// Individual components may adjust this value based upon their own /// individual interpretation of density. diff --git a/packages/flutter/lib/src/material/time_picker.dart b/packages/flutter/lib/src/material/time_picker.dart index 62c0d780c7f2a..450fdaa39dc2e 100644 --- a/packages/flutter/lib/src/material/time_picker.dart +++ b/packages/flutter/lib/src/material/time_picker.dart @@ -1782,14 +1782,14 @@ class _HourMinuteTextFieldState extends State<_HourMinuteTextField> with Restora /// Signature for when the time picker entry mode is changed. typedef EntryModeChangeCallback = void Function(TimePickerEntryMode); -/// A material design time picker designed to appear inside a popup dialog. +/// A Material Design time picker designed to appear inside a popup dialog. /// /// Pass this widget to [showDialog]. The value returned by [showDialog] is the /// selected [TimeOfDay] if the user taps the "OK" button, or null if the user /// taps the "CANCEL" button. The selected time is reported by calling /// [Navigator.pop]. class TimePickerDialog extends StatefulWidget { - /// Creates a material time picker. + /// Creates a Material Design time picker. /// /// [initialTime] must not be null. const TimePickerDialog({ @@ -2327,7 +2327,7 @@ class _TimePickerDialogState extends State with RestorationMix } } -/// Shows a dialog containing a material design time picker. +/// Shows a dialog containing a Material Design time picker. /// /// The returned Future resolves to the time selected by the user when the user /// closes the dialog. If the user cancels the dialog, null is returned. @@ -2400,7 +2400,7 @@ class _TimePickerDialogState extends State with RestorationMix /// /// See also: /// -/// * [showDatePicker], which shows a dialog that contains a material design +/// * [showDatePicker], which shows a dialog that contains a Material Design /// date picker. /// * [TimePickerThemeData], which allows you to customize the colors, /// typography, and shape of the time picker. diff --git a/packages/flutter/lib/src/material/tooltip.dart b/packages/flutter/lib/src/material/tooltip.dart index fd70a6b5eec2d..2ba01e05a6299 100644 --- a/packages/flutter/lib/src/material/tooltip.dart +++ b/packages/flutter/lib/src/material/tooltip.dart @@ -16,7 +16,7 @@ import 'theme.dart'; import 'tooltip_theme.dart'; import 'tooltip_visibility.dart'; -/// A material design tooltip. +/// A Material Design tooltip. /// /// Tooltips provide text labels which help explain the function of a button or /// other user interface action. Wrap the button in a [Tooltip] widget and provide diff --git a/packages/flutter/lib/src/material/typography.dart b/packages/flutter/lib/src/material/typography.dart index 5b1fffd3bd5a9..79ef493687dff 100644 --- a/packages/flutter/lib/src/material/typography.dart +++ b/packages/flutter/lib/src/material/typography.dart @@ -91,7 +91,7 @@ class Typography with Diagnosticable { TextTheme? tall, }) = Typography.material2018; - /// Creates a typography instance using material design's 2014 defaults. + /// Creates a typography instance using Material Design's 2014 defaults. /// /// If [platform] is [TargetPlatform.iOS] or [TargetPlatform.macOS], the /// default values for [black] and [white] are [blackCupertino] and @@ -119,7 +119,7 @@ class Typography with Diagnosticable { ); } - /// Creates a typography instance using material design's 2018 defaults. + /// Creates a typography instance using Material Design's 2018 defaults. /// /// If [platform] is [TargetPlatform.iOS] or [TargetPlatform.macOS], the /// default values for [black] and [white] are [blackCupertino] and @@ -222,7 +222,7 @@ class Typography with Diagnosticable { assert(dense != null), assert(tall != null); - /// A material design text theme with dark glyphs. + /// A Material Design text theme with dark glyphs. /// /// This [TextTheme] should provide color but not geometry (font size, /// weight, etc). A text theme's geometry depends on the locale. To look @@ -233,7 +233,7 @@ class Typography with Diagnosticable { /// geometry. final TextTheme black; - /// A material design text theme with light glyphs. + /// A Material Design text theme with light glyphs. /// /// This [TextTheme] provides color but not geometry (font size, weight, etc). /// A text theme's geometry depends on the locale. To look up a localized @@ -354,7 +354,7 @@ class Typography with Diagnosticable { properties.add(DiagnosticsProperty('tall', tall, defaultValue: defaultTypography.tall)); } - /// A material design text theme with dark glyphs based on Roboto. + /// A Material Design text theme with dark glyphs based on Roboto. /// /// This [TextTheme] provides color but not geometry (font size, weight, etc). static const TextTheme blackMountainView = TextTheme( @@ -375,7 +375,7 @@ class Typography with Diagnosticable { labelSmall: TextStyle(debugLabel: 'blackMountainView labelSmall', fontFamily: 'Roboto', color: Colors.black, decoration: TextDecoration.none), ); - /// A material design text theme with light glyphs based on Roboto. + /// A Material Design text theme with light glyphs based on Roboto. /// /// This [TextTheme] provides color but not geometry (font size, weight, etc). static const TextTheme whiteMountainView = TextTheme( @@ -396,7 +396,7 @@ class Typography with Diagnosticable { labelSmall: TextStyle(debugLabel: 'whiteMountainView labelSmall', fontFamily: 'Roboto', color: Colors.white, decoration: TextDecoration.none), ); - /// A material design text theme with dark glyphs based on Segoe UI. + /// A Material Design text theme with dark glyphs based on Segoe UI. /// /// This [TextTheme] provides color but not geometry (font size, weight, etc). static const TextTheme blackRedmond = TextTheme( @@ -417,7 +417,7 @@ class Typography with Diagnosticable { labelSmall: TextStyle(debugLabel: 'blackRedmond labelSmall', fontFamily: 'Segoe UI', color: Colors.black, decoration: TextDecoration.none), ); - /// A material design text theme with light glyphs based on Segoe UI. + /// A Material Design text theme with light glyphs based on Segoe UI. /// /// This [TextTheme] provides color but not geometry (font size, weight, etc). static const TextTheme whiteRedmond = TextTheme( @@ -439,7 +439,7 @@ class Typography with Diagnosticable { ); static const List _helsinkiFontFallbacks = ['Ubuntu', 'Cantarell', 'DejaVu Sans', 'Liberation Sans', 'Arial']; - /// A material design text theme with dark glyphs based on Roboto, with + /// A Material Design text theme with dark glyphs based on Roboto, with /// fallback fonts that are likely (but not guaranteed) to be installed on /// Linux. /// @@ -462,7 +462,7 @@ class Typography with Diagnosticable { labelSmall: TextStyle(debugLabel: 'blackHelsinki labelSmall', fontFamily: 'Roboto', fontFamilyFallback: _helsinkiFontFallbacks, color: Colors.black, decoration: TextDecoration.none), ); - /// A material design text theme with light glyphs based on Roboto, with fallbacks of DejaVu Sans, Liberation Sans and Arial. + /// A Material Design text theme with light glyphs based on Roboto, with fallbacks of DejaVu Sans, Liberation Sans and Arial. /// /// This [TextTheme] provides color but not geometry (font size, weight, etc). static const TextTheme whiteHelsinki = TextTheme( @@ -483,7 +483,7 @@ class Typography with Diagnosticable { labelSmall: TextStyle(debugLabel: 'whiteHelsinki labelSmall', fontFamily: 'Roboto', fontFamilyFallback: _helsinkiFontFallbacks, color: Colors.white, decoration: TextDecoration.none), ); - /// A material design text theme with dark glyphs based on San Francisco. + /// A Material Design text theme with dark glyphs based on San Francisco. /// /// This [TextTheme] provides color but not geometry (font size, weight, etc). /// @@ -506,7 +506,7 @@ class Typography with Diagnosticable { labelSmall: TextStyle(debugLabel: 'blackCupertino labelSmall', fontFamily: '.SF UI Text', color: Colors.black, decoration: TextDecoration.none), ); - /// A material design text theme with light glyphs based on San Francisco. + /// A Material Design text theme with light glyphs based on San Francisco. /// /// This [TextTheme] provides color but not geometry (font size, weight, etc). /// @@ -529,7 +529,7 @@ class Typography with Diagnosticable { labelSmall: TextStyle(debugLabel: 'whiteCupertino labelSmall', fontFamily: '.SF UI Text', color: Colors.white, decoration: TextDecoration.none), ); - /// A material design text theme with dark glyphs based on San Francisco. + /// A Material Design text theme with dark glyphs based on San Francisco. /// /// This [TextTheme] provides color but not geometry (font size, weight, etc). /// @@ -552,7 +552,7 @@ class Typography with Diagnosticable { labelSmall: TextStyle(debugLabel: 'blackRedwoodCity labelSmall', fontFamily: '.AppleSystemUIFont', color: Colors.black, decoration: TextDecoration.none), ); - /// A material design text theme with light glyphs based on San Francisco. + /// A Material Design text theme with light glyphs based on San Francisco. /// /// This [TextTheme] provides color but not geometry (font size, weight, etc). /// diff --git a/packages/flutter/lib/src/material/user_accounts_drawer_header.dart b/packages/flutter/lib/src/material/user_accounts_drawer_header.dart index f53b220bed595..a49f8da2bf80d 100644 --- a/packages/flutter/lib/src/material/user_accounts_drawer_header.dart +++ b/packages/flutter/lib/src/material/user_accounts_drawer_header.dart @@ -282,7 +282,7 @@ class _AccountDetailsLayout extends MultiChildLayoutDelegate { } } -/// A material design [Drawer] header that identifies the app's user. +/// A Material Design [Drawer] header that identifies the app's user. /// /// Requires one of its ancestors to be a [Material] widget. /// @@ -291,7 +291,7 @@ class _AccountDetailsLayout extends MultiChildLayoutDelegate { /// * [DrawerHeader], for a drawer header that doesn't show user accounts. /// * class UserAccountsDrawerHeader extends StatefulWidget { - /// Creates a material design drawer header. + /// Creates a Material Design drawer header. /// /// Requires one of its ancestors to be a [Material] widget. const UserAccountsDrawerHeader({ diff --git a/packages/flutter/lib/src/painting/box_border.dart b/packages/flutter/lib/src/painting/box_border.dart index 930f81459ddb0..9819e1d65891f 100644 --- a/packages/flutter/lib/src/painting/box_border.dart +++ b/packages/flutter/lib/src/painting/box_border.dart @@ -253,7 +253,7 @@ abstract class BoxBorder extends ShapeBorder { /// {@end-tool} /// {@tool snippet} /// -/// The border for a material design divider: +/// The border for a Material Design divider: /// /// ```dart /// Border(bottom: BorderSide(color: Theme.of(context).dividerColor)) @@ -299,7 +299,7 @@ abstract class BoxBorder extends ShapeBorder { /// * [BoxDecoration], which uses this class to describe its edge decoration. /// * [BorderSide], which is used to describe each side of the box. /// * [Theme], from the material layer, which can be queried to obtain appropriate colors -/// to use for borders in a material app, as shown in the "divider" sample above. +/// to use for borders in a [MaterialApp], as shown in the "divider" sample above. class Border extends BoxBorder { /// Creates a border. /// @@ -594,7 +594,7 @@ class Border extends BoxBorder { /// * [BoxDecoration], which uses this class to describe its edge decoration. /// * [BorderSide], which is used to describe each side of the box. /// * [Theme], from the material layer, which can be queried to obtain appropriate colors -/// to use for borders in a material app, as shown in the "divider" sample above. +/// to use for borders in a [MaterialApp], as shown in the "divider" sample above. class BorderDirectional extends BoxBorder { /// Creates a border. /// diff --git a/packages/flutter/lib/src/painting/colors.dart b/packages/flutter/lib/src/painting/colors.dart index f8b1462214ece..4acde694c947e 100644 --- a/packages/flutter/lib/src/painting/colors.dart +++ b/packages/flutter/lib/src/painting/colors.dart @@ -421,9 +421,9 @@ class HSLColor { /// /// See also: /// -/// * [MaterialColor] and [MaterialAccentColor], which define material design +/// * [MaterialColor] and [MaterialAccentColor], which define Material Design /// primary and accent color swatches. -/// * [material.Colors], which defines all of the standard material design +/// * [material.Colors], which defines all of the standard Material Design /// colors. @immutable class ColorSwatch extends Color { diff --git a/packages/flutter/lib/src/widgets/app.dart b/packages/flutter/lib/src/widgets/app.dart index 8af3de9de8a44..214aa58d85bee 100644 --- a/packages/flutter/lib/src/widgets/app.dart +++ b/packages/flutter/lib/src/widgets/app.dart @@ -973,8 +973,8 @@ class WidgetsApp extends StatefulWidget { /// Builds the widget the [WidgetInspector] uses to switch between view and /// inspect modes. /// - /// This lets [MaterialApp] to use a material button to toggle the inspector - /// select mode without requiring [WidgetInspector] to depend on the + /// This lets [MaterialApp] to use a Material Design button to toggle the + /// inspector select mode without requiring [WidgetInspector] to depend on the /// material package. final InspectorSelectButtonBuilder? inspectorSelectButtonBuilder; diff --git a/packages/flutter/lib/src/widgets/icon.dart b/packages/flutter/lib/src/widgets/icon.dart index be704ce37df1b..cd3fb4c9b086a 100644 --- a/packages/flutter/lib/src/widgets/icon.dart +++ b/packages/flutter/lib/src/widgets/icon.dart @@ -61,7 +61,7 @@ import 'icon_theme_data.dart'; /// See also: /// /// * [IconButton], for interactive icons. -/// * [Icons], for the list of available icons for use with this class. +/// * [Icons], the library of Material Icons available for use with this class. /// * [IconTheme], which provides ambient configuration for icons. /// * [ImageIcon], for showing icons from [AssetImage]s or other [ImageProvider]s. class Icon extends StatelessWidget { diff --git a/packages/flutter/lib/src/widgets/image_icon.dart b/packages/flutter/lib/src/widgets/image_icon.dart index 66210e287e8be..548fb4e0d8ea5 100644 --- a/packages/flutter/lib/src/widgets/image_icon.dart +++ b/packages/flutter/lib/src/widgets/image_icon.dart @@ -18,7 +18,7 @@ import 'image.dart'; /// * [IconButton], for interactive icons. /// * [IconTheme], which provides ambient configuration for icons. /// * [Icon], for icons based on glyphs from fonts instead of images. -/// * [Icons], a predefined font based set of icons from the material design library. +/// * [Icons], the library of Material Icons. class ImageIcon extends StatelessWidget { /// Creates an image icon. /// diff --git a/packages/flutter/lib/src/widgets/reorderable_list.dart b/packages/flutter/lib/src/widgets/reorderable_list.dart index 7e18c9b1e349a..b20bf7116b7d9 100644 --- a/packages/flutter/lib/src/widgets/reorderable_list.dart +++ b/packages/flutter/lib/src/widgets/reorderable_list.dart @@ -60,7 +60,7 @@ import 'transitions.dart'; /// its items. /// * [SliverReorderableList], a sliver list that allows the user to reorder /// its items. -/// * [ReorderableListView], a material design list that allows the user to +/// * [ReorderableListView], a Material Design list that allows the user to /// reorder its items. typedef ReorderCallback = void Function(int oldIndex, int newIndex); @@ -102,7 +102,7 @@ typedef ReorderItemProxyDecorator = Widget Function(Widget child, int index, Ani /// /// * [SliverReorderableList], a sliver list that allows the user to reorder /// its items. -/// * [ReorderableListView], a material design list that allows the user to +/// * [ReorderableListView], a Material Design list that allows the user to /// reorder its items. class ReorderableList extends StatefulWidget { /// Creates a scrolling container that allows the user to interactively @@ -419,7 +419,7 @@ class ReorderableListState extends State { /// /// * [ReorderableList], a regular widget list that allows the user to reorder /// its items. -/// * [ReorderableListView], a material design list that allows the user to +/// * [ReorderableListView], a Material Design list that allows the user to /// reorder its items. class SliverReorderableList extends StatefulWidget { /// Creates a sliver list that allows the user to interactively reorder its @@ -1223,7 +1223,7 @@ class _ReorderableItemState extends State<_ReorderableItem> { /// its items. /// * [SliverReorderableList], a sliver list that allows the user to reorder /// its items. -/// * [ReorderableListView], a material design list that allows the user to +/// * [ReorderableListView], a Material Design list that allows the user to /// reorder its items. class ReorderableDragStartListener extends StatelessWidget { /// Creates a listener for a drag immediately following a pointer down @@ -1291,7 +1291,7 @@ class ReorderableDragStartListener extends StatelessWidget { /// its items. /// * [SliverReorderableList], a sliver list that allows the user to reorder /// its items. -/// * [ReorderableListView], a material design list that allows the user to +/// * [ReorderableListView], a Material Design list that allows the user to /// reorder its items. class ReorderableDelayedDragStartListener extends ReorderableDragStartListener { /// Creates a listener for an drag following a long press event over the diff --git a/packages/flutter/lib/src/widgets/text.dart b/packages/flutter/lib/src/widgets/text.dart index a5f060e1e666a..b56a880c2a538 100644 --- a/packages/flutter/lib/src/widgets/text.dart +++ b/packages/flutter/lib/src/widgets/text.dart @@ -334,7 +334,7 @@ class DefaultTextHeightBehavior extends InheritedTheme { /// To make [Text] react to touch events, wrap it in a [GestureDetector] widget /// with a [GestureDetector.onTap] handler. /// -/// In a material design application, consider using a [TextButton] instead, or +/// In a Material Design application, consider using a [TextButton] instead, or /// if that isn't appropriate, at least using an [InkWell] instead of /// [GestureDetector]. /// diff --git a/packages/flutter/test/material/debug_test.dart b/packages/flutter/test/material/debug_test.dart index 46f9e61b37fd9..59474c5acc714 100644 --- a/packages/flutter/test/material/debug_test.dart +++ b/packages/flutter/test/material/debug_test.dart @@ -29,7 +29,7 @@ void main() { 'FlutterError\n' ' No Material widget found.\n' ' Chip widgets require a Material widget ancestor.\n' - ' In material design, most widgets are conceptually "printed" on a\n' + ' In Material Design, most widgets are conceptually "printed" on a\n' " sheet of material. In Flutter's material library, that material\n" ' is represented by the Material widget. It is the Material widget\n' ' that renders ink splashes, for instance. Because of this, many\n' diff --git a/packages/flutter_tools/test/general.shard/asset_bundle_test.dart b/packages/flutter_tools/test/general.shard/asset_bundle_test.dart index 5400ddddade71..238f12c12d8a0 100644 --- a/packages/flutter_tools/test/general.shard/asset_bundle_test.dart +++ b/packages/flutter_tools/test/general.shard/asset_bundle_test.dart @@ -521,7 +521,7 @@ flutter: Platform: () => FakePlatform(), }); - testUsingContext('does not include material design assets if uses-material-design: true is ' + testUsingContext('does not include Material Design assets if uses-material-design: true is ' 'specified only by a dependency', () async { globals.fs.file('.packages').writeAsStringSync(r''' example:lib/ diff --git a/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart index b9cb05d25d576..0a084a9aa6082 100644 --- a/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart +++ b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart @@ -65,7 +65,7 @@ dependencies: expect(flutterManifest.assets, isEmpty); }); - testWithoutContext('FlutterManifest knows if material design is used', () async { + testWithoutContext('FlutterManifest knows if Material Design is used', () async { const String manifest = ''' name: test dependencies: From 0f397c08dc99c720bea06ff925106d9858547ee3 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 13:04:07 -0400 Subject: [PATCH 116/141] Roll Engine from 6abf69920824 to 8f7e55b13064 (1 revision) (#102666) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 70c1ac2cc015f..47dcf32d81d82 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -6abf6992082482af1cb314be495a5839c98b883b +8f7e55b130646e368e6a9aed2a63ca4ec41874c2 From 6d8f9ed992ff715478eedb1d4320be5d3c0db5a8 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 14:09:10 -0400 Subject: [PATCH 117/141] Roll Engine from 8f7e55b13064 to 9e6911e4da21 (2 revisions) (#102673) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 47dcf32d81d82..9830e4895d677 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -8f7e55b130646e368e6a9aed2a63ca4ec41874c2 +9e6911e4da21a42b352f67f6271cb28f6592b88f From 29d814b7002b4c76f6f6b71b128fc2044d7da56b Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Wed, 27 Apr 2022 11:14:05 -0700 Subject: [PATCH 118/141] [intl] speed up localization generation and regenerate symbols (#102614) --- .../bin/gen_date_localizations.dart | 65 +- .../localization/localizations_utils.dart | 2 +- .../l10n/generated_date_localizations.dart | 5000 ++++++++--------- .../lib/src/utils/date_localizations.dart | 4 +- 4 files changed, 2513 insertions(+), 2558 deletions(-) diff --git a/dev/tools/localization/bin/gen_date_localizations.dart b/dev/tools/localization/bin/gen_date_localizations.dart index 49465c2af67b6..b5954ad71a36d 100644 --- a/dev/tools/localization/bin/gen_date_localizations.dart +++ b/dev/tools/localization/bin/gen_date_localizations.dart @@ -87,16 +87,26 @@ Future main(List rawArgs) async { // To regenerate run (omit --overwrite to print to console instead of the file): // dart --enable-asserts dev/tools/localization/bin/gen_date_localizations.dart --overwrite +import 'package:intl/date_symbols.dart' as intl; + ''' ); buffer.writeln(''' /// The subset of date symbols supported by the intl package which are also /// supported by flutter_localizations.'''); - buffer.writeln('const Map dateSymbols = {'); + buffer.writeln('final Map dateSymbols = {'); symbolFiles.forEach((String locale, File data) { currentLocale = locale; - if (supportedLocales.contains(locale)) - buffer.writeln(_jsonToMapEntry(locale, json.decode(data.readAsStringSync()))); + if (supportedLocales.contains(locale)) { + final Map objData = json.decode(data.readAsStringSync()) as Map; + buffer.writeln("'$locale': intl.DateSymbols("); + objData.forEach((String key, Object? value) { + if (value == null) + return; + buffer.writeln(_jsonToConstructorEntry(key, value)); + }); + buffer.writeln('),'); + } }); currentLocale = null; buffer.writeln('};'); @@ -123,28 +133,67 @@ Future main(List rawArgs) async { if (writeToFile) { final File dateLocalizationsFile = File(path.join('packages', 'flutter_localizations', 'lib', 'src', 'l10n', 'generated_date_localizations.dart')); dateLocalizationsFile.writeAsStringSync(buffer.toString()); - Process.runSync(path.join('bin', 'cache', 'dart-sdk', 'bin', 'dartfmt'), [ - '-w', + final String extension = Platform.isWindows ? '.exe' : ''; + final ProcessResult result = Process.runSync(path.join('bin', 'cache', 'dart-sdk', 'bin', 'dart$extension'), [ + 'format', dateLocalizationsFile.path, ]); + if (result.exitCode != 0) { + print(result.exitCode); + print(result.stdout); + print(result.stderr); + } } else { print(buffer); } } +String _jsonToConstructorEntry(String key, dynamic value) { + return '$key: ${_jsonToObject(value)},'; +} + String _jsonToMapEntry(String key, dynamic value) { return "'$key': ${_jsonToMap(value)},"; } +String _jsonToObject(dynamic json) { + if (json == null || json is num || json is bool) + return '$json'; + + if (json is String) + return generateEncodedString(currentLocale, json); + + if (json is Iterable) { + final String type = json.first.runtimeType.toString(); + final StringBuffer buffer = StringBuffer('const <$type>['); + for (final dynamic value in json) { + buffer.writeln('${_jsonToMap(value)},'); + } + buffer.write(']'); + return buffer.toString(); + } + + if (json is Map) { + final StringBuffer buffer = StringBuffer('{'); + json.forEach((String key, dynamic value) { + buffer.writeln(_jsonToMapEntry(key, value)); + }); + buffer.write('}'); + return buffer.toString(); + } + + throw 'Unsupported JSON type ${json.runtimeType} of value $json.'; +} + String _jsonToMap(dynamic json) { if (json == null || json is num || json is bool) return '$json'; if (json is String) - return generateEncodedString(currentLocale!, json); + return generateEncodedString(currentLocale, json); if (json is Iterable) { - final StringBuffer buffer = StringBuffer('['); + final StringBuffer buffer = StringBuffer('['); for (final dynamic value in json) { buffer.writeln('${_jsonToMap(value)},'); } @@ -153,7 +202,7 @@ String _jsonToMap(dynamic json) { } if (json is Map) { - final StringBuffer buffer = StringBuffer('{'); + final StringBuffer buffer = StringBuffer('{'); json.forEach((String key, dynamic value) { buffer.writeln(_jsonToMapEntry(key, value)); }); diff --git a/dev/tools/localization/localizations_utils.dart b/dev/tools/localization/localizations_utils.dart index e6d29cb8d5131..0767404b49d41 100644 --- a/dev/tools/localization/localizations_utils.dart +++ b/dev/tools/localization/localizations_utils.dart @@ -427,7 +427,7 @@ String generateString(String value) { /// Only used to generate localization strings for the Kannada locale ('kn') because /// some of the localized strings contain characters that can crash Emacs on Linux. /// See packages/flutter_localizations/lib/src/l10n/README for more information. -String generateEncodedString(String locale, String value) { +String generateEncodedString(String? locale, String value) { if (locale != 'kn' || value.runes.every((int code) => code <= 0xFF)) return generateString(value); diff --git a/packages/flutter_localizations/lib/src/l10n/generated_date_localizations.dart b/packages/flutter_localizations/lib/src/l10n/generated_date_localizations.dart index 7eebc72f46906..c11519bd448df 100644 --- a/packages/flutter_localizations/lib/src/l10n/generated_date_localizations.dart +++ b/packages/flutter_localizations/lib/src/l10n/generated_date_localizations.dart @@ -6,20 +6,22 @@ // To regenerate run (omit --overwrite to print to console instead of the file): // dart --enable-asserts dev/tools/localization/bin/gen_date_localizations.dart --overwrite +import 'package:intl/date_symbols.dart' as intl; + /// The subset of date symbols supported by the intl package which are also /// supported by flutter_localizations. -const Map dateSymbols = { - 'af': { - 'NAME': 'af', - 'ERAS': [ +final Map dateSymbols = { + 'af': intl.DateSymbols( + NAME: 'af', + ERAS: const [ 'v.C.', 'n.C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'voor Christus', 'na Christus', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -33,7 +35,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -47,7 +49,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'Januarie', 'Februarie', 'Maart', @@ -61,7 +63,7 @@ const Map dateSymbols = { 'November', 'Desember', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Januarie', 'Februarie', 'Maart', @@ -75,7 +77,7 @@ const Map dateSymbols = { 'November', 'Desember', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan.', 'Feb.', 'Mrt.', @@ -89,7 +91,7 @@ const Map dateSymbols = { 'Nov.', 'Des.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan.', 'Feb.', 'Mrt.', @@ -103,7 +105,7 @@ const Map dateSymbols = { 'Nov.', 'Des.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sondag', 'Maandag', 'Dinsdag', @@ -112,7 +114,7 @@ const Map dateSymbols = { 'Vrydag', 'Saterdag', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sondag', 'Maandag', 'Dinsdag', @@ -121,7 +123,7 @@ const Map dateSymbols = { 'Vrydag', 'Saterdag', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'So.', 'Ma.', 'Di.', @@ -130,7 +132,7 @@ const Map dateSymbols = { 'Vr.', 'Sa.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'So.', 'Ma.', 'Di.', @@ -139,7 +141,7 @@ const Map dateSymbols = { 'Vr.', 'Sa.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'D', @@ -148,7 +150,7 @@ const Map dateSymbols = { 'V', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'D', @@ -157,59 +159,58 @@ const Map dateSymbols = { 'V', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'K1', 'K2', 'K3', 'K4', ], - 'QUARTERS': [ + QUARTERS: const [ '1ste kwartaal', '2de kwartaal', '3de kwartaal', '4de kwartaal', ], - 'AMPMS': [ + AMPMS: const [ 'vm.', 'nm.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE dd MMMM y', 'dd MMMM y', 'dd MMM y', 'y-MM-dd', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'am': { - 'NAME': 'am', - 'ERAS': [ + ), + 'am': intl.DateSymbols( + NAME: 'am', + ERAS: const [ 'ዓ/ዓ', 'ዓ/ም', ], - 'ERANAMES': [ + ERANAMES: const [ 'ዓመተ ዓለም', 'ዓመተ ምሕረት', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ጃ', 'ፌ', 'ማ', @@ -223,7 +224,7 @@ const Map dateSymbols = { 'ኖ', 'ዲ', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ጃ', 'ፌ', 'ማ', @@ -237,7 +238,7 @@ const Map dateSymbols = { 'ኖ', 'ዲ', ], - 'MONTHS': [ + MONTHS: const [ 'ጃንዩወሪ', 'ፌብሩወሪ', 'ማርች', @@ -251,7 +252,7 @@ const Map dateSymbols = { 'ኖቬምበር', 'ዲሴምበር', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ጃንዩወሪ', 'ፌብሩወሪ', 'ማርች', @@ -265,7 +266,7 @@ const Map dateSymbols = { 'ኖቬምበር', 'ዲሴምበር', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ጃንዩ', 'ፌብሩ', 'ማርች', @@ -279,7 +280,7 @@ const Map dateSymbols = { 'ኖቬም', 'ዲሴም', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ጃንዩ', 'ፌብሩ', 'ማርች', @@ -293,7 +294,7 @@ const Map dateSymbols = { 'ኖቬም', 'ዲሴም', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'እሑድ', 'ሰኞ', 'ማክሰኞ', @@ -302,7 +303,7 @@ const Map dateSymbols = { 'ዓርብ', 'ቅዳሜ', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'እሑድ', 'ሰኞ', 'ማክሰኞ', @@ -311,7 +312,7 @@ const Map dateSymbols = { 'ዓርብ', 'ቅዳሜ', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'እሑድ', 'ሰኞ', 'ማክሰ', @@ -320,7 +321,7 @@ const Map dateSymbols = { 'ዓርብ', 'ቅዳሜ', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'እሑድ', 'ሰኞ', 'ማክሰ', @@ -329,7 +330,7 @@ const Map dateSymbols = { 'ዓርብ', 'ቅዳሜ', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'እ', 'ሰ', 'ማ', @@ -338,7 +339,7 @@ const Map dateSymbols = { 'ዓ', 'ቅ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'እ', 'ሰ', 'ማ', @@ -347,59 +348,58 @@ const Map dateSymbols = { 'ዓ', 'ቅ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'ሩብ1', 'ሩብ2', 'ሩብ3', 'ሩብ4', ], - 'QUARTERS': [ + QUARTERS: const [ '1ኛው ሩብ', '2ኛው ሩብ', '3ኛው ሩብ', '4ኛው ሩብ', ], - 'AMPMS': [ + AMPMS: const [ 'ጥዋት', 'ከሰዓት', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y MMMM d, EEEE', 'd MMMM y', 'd MMM y', 'dd/MM/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'ar': { - 'NAME': 'ar', - 'ERAS': [ + ), + 'ar': intl.DateSymbols( + NAME: 'ar', + ERAS: const [ 'ق.م', 'م', ], - 'ERANAMES': [ + ERANAMES: const [ 'قبل الميلاد', 'ميلادي', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ي', 'ف', 'م', @@ -413,7 +413,7 @@ const Map dateSymbols = { 'ب', 'د', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ي', 'ف', 'م', @@ -427,7 +427,7 @@ const Map dateSymbols = { 'ب', 'د', ], - 'MONTHS': [ + MONTHS: const [ 'يناير', 'فبراير', 'مارس', @@ -441,7 +441,7 @@ const Map dateSymbols = { 'نوفمبر', 'ديسمبر', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'يناير', 'فبراير', 'مارس', @@ -455,7 +455,7 @@ const Map dateSymbols = { 'نوفمبر', 'ديسمبر', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'يناير', 'فبراير', 'مارس', @@ -469,7 +469,7 @@ const Map dateSymbols = { 'نوفمبر', 'ديسمبر', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'يناير', 'فبراير', 'مارس', @@ -483,7 +483,7 @@ const Map dateSymbols = { 'نوفمبر', 'ديسمبر', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'الأحد', 'الاثنين', 'الثلاثاء', @@ -492,7 +492,7 @@ const Map dateSymbols = { 'الجمعة', 'السبت', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'الأحد', 'الاثنين', 'الثلاثاء', @@ -501,7 +501,7 @@ const Map dateSymbols = { 'الجمعة', 'السبت', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'الأحد', 'الاثنين', 'الثلاثاء', @@ -510,7 +510,7 @@ const Map dateSymbols = { 'الجمعة', 'السبت', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'الأحد', 'الاثنين', 'الثلاثاء', @@ -519,7 +519,7 @@ const Map dateSymbols = { 'الجمعة', 'السبت', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'ح', 'ن', 'ث', @@ -528,7 +528,7 @@ const Map dateSymbols = { 'ج', 'س', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'ح', 'ن', 'ث', @@ -537,60 +537,59 @@ const Map dateSymbols = { 'ج', 'س', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع', ], - 'QUARTERS': [ + QUARTERS: const [ 'الربع الأول', 'الربع الثاني', 'الربع الثالث', 'الربع الرابع', ], - 'AMPMS': [ + AMPMS: const [ 'ص', 'م', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE، d MMMM y', 'd MMMM y', 'dd‏/MM‏/y', 'd‏/M‏/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 5, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 5, + WEEKENDRANGE: const [ 4, 5, ], - 'FIRSTWEEKCUTOFFDAY': 4, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 4, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - 'ZERODIGIT': '٠', - }, - 'az': { - 'NAME': 'az', - 'ERAS': [ + ZERODIGIT: '٠', + ), + 'az': intl.DateSymbols( + NAME: 'az', + ERAS: const [ 'e.ə.', 'y.e.', ], - 'ERANAMES': [ + ERANAMES: const [ 'eramızdan əvvəl', 'yeni era', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1', '2', '3', @@ -604,7 +603,7 @@ const Map dateSymbols = { '11', '12', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1', '2', '3', @@ -618,7 +617,7 @@ const Map dateSymbols = { '11', '12', ], - 'MONTHS': [ + MONTHS: const [ 'yanvar', 'fevral', 'mart', @@ -632,7 +631,7 @@ const Map dateSymbols = { 'noyabr', 'dekabr', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Yanvar', 'Fevral', 'Mart', @@ -646,7 +645,7 @@ const Map dateSymbols = { 'Noyabr', 'Dekabr', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'yan', 'fev', 'mar', @@ -660,7 +659,7 @@ const Map dateSymbols = { 'noy', 'dek', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'yan', 'fev', 'mar', @@ -674,7 +673,7 @@ const Map dateSymbols = { 'noy', 'dek', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'bazar', 'bazar ertəsi', 'çərşənbə axşamı', @@ -683,7 +682,7 @@ const Map dateSymbols = { 'cümə', 'şənbə', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'bazar', 'bazar ertəsi', 'çərşənbə axşamı', @@ -692,7 +691,7 @@ const Map dateSymbols = { 'cümə', 'şənbə', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'B.', 'B.E.', 'Ç.A.', @@ -701,7 +700,7 @@ const Map dateSymbols = { 'C.', 'Ş.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'B.', 'B.E.', 'Ç.A.', @@ -710,7 +709,7 @@ const Map dateSymbols = { 'C.', 'Ş.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ '7', '1', '2', @@ -719,7 +718,7 @@ const Map dateSymbols = { '5', '6', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ '7', '1', '2', @@ -728,59 +727,58 @@ const Map dateSymbols = { '5', '6', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1-ci kv.', '2-ci kv.', '3-cü kv.', '4-cü kv.', ], - 'QUARTERS': [ + QUARTERS: const [ '1-ci kvartal', '2-ci kvartal', '3-cü kvartal', '4-cü kvartal', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'd MMMM y, EEEE', 'd MMMM y', 'd MMM y', 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'be': { - 'NAME': 'be', - 'ERAS': [ + ), + 'be': intl.DateSymbols( + NAME: 'be', + ERAS: const [ 'да н.э.', 'н.э.', ], - 'ERANAMES': [ + ERANAMES: const [ 'да нараджэння Хрыстова', 'ад нараджэння Хрыстова', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'с', 'л', 'с', @@ -794,7 +792,7 @@ const Map dateSymbols = { 'л', 'с', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'с', 'л', 'с', @@ -808,7 +806,7 @@ const Map dateSymbols = { 'л', 'с', ], - 'MONTHS': [ + MONTHS: const [ 'студзеня', 'лютага', 'сакавіка', @@ -822,7 +820,7 @@ const Map dateSymbols = { 'лістапада', 'снежня', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'студзень', 'люты', 'сакавік', @@ -836,7 +834,7 @@ const Map dateSymbols = { 'лістапад', 'снежань', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'сту', 'лют', 'сак', @@ -850,7 +848,7 @@ const Map dateSymbols = { 'ліс', 'сне', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'сту', 'лют', 'сак', @@ -864,7 +862,7 @@ const Map dateSymbols = { 'ліс', 'сне', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'нядзеля', 'панядзелак', 'аўторак', @@ -873,7 +871,7 @@ const Map dateSymbols = { 'пятніца', 'субота', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'нядзеля', 'панядзелак', 'аўторак', @@ -882,7 +880,7 @@ const Map dateSymbols = { 'пятніца', 'субота', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'нд', 'пн', 'аў', @@ -891,7 +889,7 @@ const Map dateSymbols = { 'пт', 'сб', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'нд', 'пн', 'аў', @@ -900,7 +898,7 @@ const Map dateSymbols = { 'пт', 'сб', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'н', 'п', 'а', @@ -909,7 +907,7 @@ const Map dateSymbols = { 'п', 'с', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'н', 'п', 'а', @@ -918,59 +916,58 @@ const Map dateSymbols = { 'п', 'с', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1-шы кв.', '2-гі кв.', '3-ці кв.', '4-ты кв.', ], - 'QUARTERS': [ + QUARTERS: const [ '1-шы квартал', '2-гі квартал', '3-ці квартал', '4-ты квартал', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d MMMM y 'г'.", "d MMMM y 'г'.", 'd.MM.y', 'd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss, zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ "{1} 'у' {0}", "{1} 'у' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'bg': { - 'NAME': 'bg', - 'ERAS': [ + ), + 'bg': intl.DateSymbols( + NAME: 'bg', + ERAS: const [ 'пр.Хр.', 'сл.Хр.', ], - 'ERANAMES': [ + ERANAMES: const [ 'преди Христа', 'след Христа', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'я', 'ф', 'м', @@ -984,7 +981,7 @@ const Map dateSymbols = { 'н', 'д', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'я', 'ф', 'м', @@ -998,7 +995,7 @@ const Map dateSymbols = { 'н', 'д', ], - 'MONTHS': [ + MONTHS: const [ 'януари', 'февруари', 'март', @@ -1012,7 +1009,7 @@ const Map dateSymbols = { 'ноември', 'декември', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'януари', 'февруари', 'март', @@ -1026,7 +1023,7 @@ const Map dateSymbols = { 'ноември', 'декември', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'яну', 'фев', 'март', @@ -1040,7 +1037,7 @@ const Map dateSymbols = { 'ное', 'дек', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'яну', 'фев', 'март', @@ -1054,7 +1051,7 @@ const Map dateSymbols = { 'ное', 'дек', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'неделя', 'понеделник', 'вторник', @@ -1063,7 +1060,7 @@ const Map dateSymbols = { 'петък', 'събота', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'неделя', 'понеделник', 'вторник', @@ -1072,7 +1069,7 @@ const Map dateSymbols = { 'петък', 'събота', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'нд', 'пн', 'вт', @@ -1081,7 +1078,7 @@ const Map dateSymbols = { 'пт', 'сб', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'нд', 'пн', 'вт', @@ -1090,7 +1087,7 @@ const Map dateSymbols = { 'пт', 'сб', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'н', 'п', 'в', @@ -1099,7 +1096,7 @@ const Map dateSymbols = { 'п', 'с', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'н', 'п', 'в', @@ -1108,59 +1105,58 @@ const Map dateSymbols = { 'п', 'с', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1. трим.', '2. трим.', '3. трим.', '4. трим.', ], - 'QUARTERS': [ + QUARTERS: const [ '1. тримесечие', '2. тримесечие', '3. тримесечие', '4. тримесечие', ], - 'AMPMS': [ + AMPMS: const [ 'пр.об.', 'сл.об.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d MMMM y 'г'.", "d MMMM y 'г'.", "d.MM.y 'г'.", "d.MM.yy 'г'.", ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ "H:mm:ss 'ч'. zzzz", "H:mm:ss 'ч'. z", "H:mm:ss 'ч'.", "H:mm 'ч'.", ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'bn': { - 'NAME': 'bn', - 'ERAS': [ + ), + 'bn': intl.DateSymbols( + NAME: 'bn', + ERAS: const [ 'খ্রিস্টপূর্ব', 'খৃষ্টাব্দ', ], - 'ERANAMES': [ + ERANAMES: const [ 'খ্রিস্টপূর্ব', 'খ্রীষ্টাব্দ', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'জা', 'ফে', 'মা', @@ -1174,7 +1170,7 @@ const Map dateSymbols = { 'ন', 'ডি', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'জা', 'ফে', 'মা', @@ -1188,7 +1184,7 @@ const Map dateSymbols = { 'ন', 'ডি', ], - 'MONTHS': [ + MONTHS: const [ 'জানুয়ারী', 'ফেব্রুয়ারী', 'মার্চ', @@ -1202,7 +1198,7 @@ const Map dateSymbols = { 'নভেম্বর', 'ডিসেম্বর', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'জানুয়ারী', 'ফেব্রুয়ারী', 'মার্চ', @@ -1216,7 +1212,7 @@ const Map dateSymbols = { 'নভেম্বর', 'ডিসেম্বর', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'জানু', 'ফেব', 'মার্চ', @@ -1230,7 +1226,7 @@ const Map dateSymbols = { 'নভেম্বর', 'ডিসেম্বর', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'জানুয়ারী', 'ফেব্রুয়ারী', 'মার্চ', @@ -1244,7 +1240,7 @@ const Map dateSymbols = { 'নভেম্বর', 'ডিসেম্বর', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'রবিবার', 'সোমবার', 'মঙ্গলবার', @@ -1253,7 +1249,7 @@ const Map dateSymbols = { 'শুক্রবার', 'শনিবার', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'রবিবার', 'সোমবার', 'মঙ্গলবার', @@ -1262,7 +1258,7 @@ const Map dateSymbols = { 'শুক্রবার', 'শনিবার', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'রবি', 'সোম', 'মঙ্গল', @@ -1271,7 +1267,7 @@ const Map dateSymbols = { 'শুক্র', 'শনি', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'রবি', 'সোম', 'মঙ্গল', @@ -1280,7 +1276,7 @@ const Map dateSymbols = { 'শুক্র', 'শনি', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'র', 'সো', 'ম', @@ -1289,7 +1285,7 @@ const Map dateSymbols = { 'শু', 'শ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'র', 'সো', 'ম', @@ -1298,60 +1294,59 @@ const Map dateSymbols = { 'শু', 'শ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'ত্রৈমাসিক', 'দ্বিতীয় ত্রৈমাসিক', 'তৃতীয় ত্রৈমাসিক', 'চতুর্থ ত্রৈমাসিক', ], - 'QUARTERS': [ + QUARTERS: const [ 'ত্রৈমাসিক', 'দ্বিতীয় ত্রৈমাসিক', 'তৃতীয় ত্রৈমাসিক', 'চতুর্থ ত্রৈমাসিক', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM, y', 'd MMMM, y', 'd MMM, y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - 'ZERODIGIT': '০', - }, - 'bs': { - 'NAME': 'bs', - 'ERAS': [ + ZERODIGIT: '০', + ), + 'bs': intl.DateSymbols( + NAME: 'bs', + ERAS: const [ 'p. n. e.', 'n. e.', ], - 'ERANAMES': [ + ERANAMES: const [ 'prije nove ere', 'nove ere', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'j', 'f', 'm', @@ -1365,7 +1360,7 @@ const Map dateSymbols = { 'n', 'd', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'j', 'f', 'm', @@ -1379,7 +1374,7 @@ const Map dateSymbols = { 'n', 'd', ], - 'MONTHS': [ + MONTHS: const [ 'januar', 'februar', 'mart', @@ -1393,7 +1388,7 @@ const Map dateSymbols = { 'novembar', 'decembar', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'januar', 'februar', 'mart', @@ -1407,7 +1402,7 @@ const Map dateSymbols = { 'novembar', 'decembar', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan', 'feb', 'mar', @@ -1421,7 +1416,7 @@ const Map dateSymbols = { 'nov', 'dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan', 'feb', 'mar', @@ -1435,7 +1430,7 @@ const Map dateSymbols = { 'nov', 'dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'nedjelja', 'ponedjeljak', 'utorak', @@ -1444,7 +1439,7 @@ const Map dateSymbols = { 'petak', 'subota', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'nedjelja', 'ponedjeljak', 'utorak', @@ -1453,7 +1448,7 @@ const Map dateSymbols = { 'petak', 'subota', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ned', 'pon', 'uto', @@ -1462,7 +1457,7 @@ const Map dateSymbols = { 'pet', 'sub', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ned', 'pon', 'uto', @@ -1471,7 +1466,7 @@ const Map dateSymbols = { 'pet', 'sub', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'N', 'P', 'U', @@ -1480,7 +1475,7 @@ const Map dateSymbols = { 'P', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'n', 'p', 'u', @@ -1489,59 +1484,58 @@ const Map dateSymbols = { 'p', 's', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'KV1', 'KV2', 'KV3', 'KV4', ], - 'QUARTERS': [ + QUARTERS: const [ 'Prvi kvartal', 'Drugi kvartal', 'Treći kvartal', 'Četvrti kvartal', ], - 'AMPMS': [ + AMPMS: const [ 'prijepodne', 'popodne', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d. MMMM y.', 'd. MMMM y.', 'd. MMM y.', 'd. M. y.', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ "{1} 'u' {0}", "{1} 'u' {0}", '{1} {0}', '{1} {0}', ], - }, - 'ca': { - 'NAME': 'ca', - 'ERAS': [ + ), + 'ca': intl.DateSymbols( + NAME: 'ca', + ERAS: const [ 'aC', 'dC', ], - 'ERANAMES': [ + ERANAMES: const [ 'abans de Crist', 'després de Crist', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'GN', 'FB', 'MÇ', @@ -1555,7 +1549,7 @@ const Map dateSymbols = { 'NV', 'DS', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'GN', 'FB', 'MÇ', @@ -1569,7 +1563,7 @@ const Map dateSymbols = { 'NV', 'DS', ], - 'MONTHS': [ + MONTHS: const [ 'de gener', 'de febrer', 'de març', @@ -1583,7 +1577,7 @@ const Map dateSymbols = { 'de novembre', 'de desembre', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'gener', 'febrer', 'març', @@ -1597,7 +1591,7 @@ const Map dateSymbols = { 'novembre', 'desembre', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'de gen.', 'de febr.', 'de març', @@ -1611,7 +1605,7 @@ const Map dateSymbols = { 'de nov.', 'de des.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'gen.', 'febr.', 'març', @@ -1625,7 +1619,7 @@ const Map dateSymbols = { 'nov.', 'des.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'diumenge', 'dilluns', 'dimarts', @@ -1634,7 +1628,7 @@ const Map dateSymbols = { 'divendres', 'dissabte', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'diumenge', 'dilluns', 'dimarts', @@ -1643,7 +1637,7 @@ const Map dateSymbols = { 'divendres', 'dissabte', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dg.', 'dl.', 'dt.', @@ -1652,7 +1646,7 @@ const Map dateSymbols = { 'dv.', 'ds.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'dg.', 'dl.', 'dt.', @@ -1661,7 +1655,7 @@ const Map dateSymbols = { 'dv.', 'ds.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'dg', 'dl', 'dt', @@ -1670,7 +1664,7 @@ const Map dateSymbols = { 'dv', 'ds', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'dg', 'dl', 'dt', @@ -1679,59 +1673,58 @@ const Map dateSymbols = { 'dv', 'ds', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1T', '2T', '3T', '4T', ], - 'QUARTERS': [ + QUARTERS: const [ '1r trimestre', '2n trimestre', '3r trimestre', '4t trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'a. m.', 'p. m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d MMMM 'de' y", "d MMMM 'de' y", 'd MMM y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H:mm:ss zzzz', 'H:mm:ss z', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{1} 'a' 'les' {0}", "{1} 'a' 'les' {0}", '{1}, {0}', '{1} {0}', ], - }, - 'cs': { - 'NAME': 'cs', - 'ERAS': [ + ), + 'cs': intl.DateSymbols( + NAME: 'cs', + ERAS: const [ 'př. n. l.', 'n. l.', ], - 'ERANAMES': [ + ERANAMES: const [ 'před naším letopočtem', 'našeho letopočtu', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1', '2', '3', @@ -1745,7 +1738,7 @@ const Map dateSymbols = { '11', '12', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1', '2', '3', @@ -1759,7 +1752,7 @@ const Map dateSymbols = { '11', '12', ], - 'MONTHS': [ + MONTHS: const [ 'ledna', 'února', 'března', @@ -1773,7 +1766,7 @@ const Map dateSymbols = { 'listopadu', 'prosince', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'leden', 'únor', 'březen', @@ -1787,7 +1780,7 @@ const Map dateSymbols = { 'listopad', 'prosinec', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'led', 'úno', 'bře', @@ -1801,7 +1794,7 @@ const Map dateSymbols = { 'lis', 'pro', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'led', 'úno', 'bře', @@ -1815,7 +1808,7 @@ const Map dateSymbols = { 'lis', 'pro', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'neděle', 'pondělí', 'úterý', @@ -1824,7 +1817,7 @@ const Map dateSymbols = { 'pátek', 'sobota', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'neděle', 'pondělí', 'úterý', @@ -1833,7 +1826,7 @@ const Map dateSymbols = { 'pátek', 'sobota', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ne', 'po', 'út', @@ -1842,7 +1835,7 @@ const Map dateSymbols = { 'pá', 'so', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ne', 'po', 'út', @@ -1851,7 +1844,7 @@ const Map dateSymbols = { 'pá', 'so', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'N', 'P', 'Ú', @@ -1860,7 +1853,7 @@ const Map dateSymbols = { 'P', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'N', 'P', 'Ú', @@ -1869,59 +1862,58 @@ const Map dateSymbols = { 'P', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1. čtvrtletí', '2. čtvrtletí', '3. čtvrtletí', '4. čtvrtletí', ], - 'AMPMS': [ + AMPMS: const [ 'dop.', 'odp.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d. MMMM y', 'd. MMMM y', 'd. M. y', 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H:mm:ss zzzz', 'H:mm:ss z', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'da': { - 'NAME': 'da', - 'ERAS': [ + ), + 'da': intl.DateSymbols( + NAME: 'da', + ERAS: const [ 'f.Kr.', 'e.Kr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'f.Kr.', 'e.Kr.', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -1935,7 +1927,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -1949,7 +1941,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'januar', 'februar', 'marts', @@ -1963,7 +1955,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'januar', 'februar', 'marts', @@ -1977,7 +1969,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan.', 'feb.', 'mar.', @@ -1991,7 +1983,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan.', 'feb.', 'mar.', @@ -2005,7 +1997,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'søndag', 'mandag', 'tirsdag', @@ -2014,7 +2006,7 @@ const Map dateSymbols = { 'fredag', 'lørdag', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'søndag', 'mandag', 'tirsdag', @@ -2023,7 +2015,7 @@ const Map dateSymbols = { 'fredag', 'lørdag', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'søn.', 'man.', 'tir.', @@ -2032,7 +2024,7 @@ const Map dateSymbols = { 'fre.', 'lør.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'søn', 'man', 'tir', @@ -2041,7 +2033,7 @@ const Map dateSymbols = { 'fre', 'lør', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -2050,7 +2042,7 @@ const Map dateSymbols = { 'F', 'L', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -2059,59 +2051,58 @@ const Map dateSymbols = { 'F', 'L', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1. kvt.', '2. kvt.', '3. kvt.', '4. kvt.', ], - 'QUARTERS': [ + QUARTERS: const [ '1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE 'den' d. MMMM y", 'd. MMMM y', 'd. MMM y', 'dd.MM.y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH.mm.ss zzzz', 'HH.mm.ss z', 'HH.mm.ss', 'HH.mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{1} 'kl'. {0}", "{1} 'kl'. {0}", '{1} {0}', '{1} {0}', ], - }, - 'de': { - 'NAME': 'de', - 'ERAS': [ + ), + 'de': intl.DateSymbols( + NAME: 'de', + ERAS: const [ 'v. Chr.', 'n. Chr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'v. Chr.', 'n. Chr.', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -2125,7 +2116,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -2139,7 +2130,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'Januar', 'Februar', 'März', @@ -2153,7 +2144,7 @@ const Map dateSymbols = { 'November', 'Dezember', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Januar', 'Februar', 'März', @@ -2167,7 +2158,7 @@ const Map dateSymbols = { 'November', 'Dezember', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan.', 'Feb.', 'März', @@ -2181,7 +2172,7 @@ const Map dateSymbols = { 'Nov.', 'Dez.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mär', @@ -2195,7 +2186,7 @@ const Map dateSymbols = { 'Nov', 'Dez', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sonntag', 'Montag', 'Dienstag', @@ -2204,7 +2195,7 @@ const Map dateSymbols = { 'Freitag', 'Samstag', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sonntag', 'Montag', 'Dienstag', @@ -2213,7 +2204,7 @@ const Map dateSymbols = { 'Freitag', 'Samstag', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'So.', 'Mo.', 'Di.', @@ -2222,7 +2213,7 @@ const Map dateSymbols = { 'Fr.', 'Sa.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'So', 'Mo', 'Di', @@ -2231,7 +2222,7 @@ const Map dateSymbols = { 'Fr', 'Sa', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'D', @@ -2240,7 +2231,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'D', @@ -2249,59 +2240,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d. MMMM y', 'd. MMMM y', 'dd.MM.y', 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{1} 'um' {0}", "{1} 'um' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'de_CH': { - 'NAME': 'de_CH', - 'ERAS': [ + ), + 'de_CH': intl.DateSymbols( + NAME: 'de_CH', + ERAS: const [ 'v. Chr.', 'n. Chr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'v. Chr.', 'n. Chr.', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -2315,7 +2305,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -2329,7 +2319,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'Januar', 'Februar', 'März', @@ -2343,7 +2333,7 @@ const Map dateSymbols = { 'November', 'Dezember', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Januar', 'Februar', 'März', @@ -2357,7 +2347,7 @@ const Map dateSymbols = { 'November', 'Dezember', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan.', 'Feb.', 'März', @@ -2371,7 +2361,7 @@ const Map dateSymbols = { 'Nov.', 'Dez.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mär', @@ -2385,7 +2375,7 @@ const Map dateSymbols = { 'Nov', 'Dez', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sonntag', 'Montag', 'Dienstag', @@ -2394,7 +2384,7 @@ const Map dateSymbols = { 'Freitag', 'Samstag', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sonntag', 'Montag', 'Dienstag', @@ -2403,7 +2393,7 @@ const Map dateSymbols = { 'Freitag', 'Samstag', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'So.', 'Mo.', 'Di.', @@ -2412,7 +2402,7 @@ const Map dateSymbols = { 'Fr.', 'Sa.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'So', 'Mo', 'Di', @@ -2421,7 +2411,7 @@ const Map dateSymbols = { 'Fr', 'Sa', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'D', @@ -2430,7 +2420,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'D', @@ -2439,59 +2429,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d. MMMM y', 'd. MMMM y', 'dd.MM.y', 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{1} 'um' {0}", "{1} 'um' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'el': { - 'NAME': 'el', - 'ERAS': [ + ), + 'el': intl.DateSymbols( + NAME: 'el', + ERAS: const [ 'π.Χ.', 'μ.Χ.', ], - 'ERANAMES': [ + ERANAMES: const [ 'προ Χριστού', 'μετά Χριστόν', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'Ι', 'Φ', 'Μ', @@ -2505,7 +2494,7 @@ const Map dateSymbols = { 'Ν', 'Δ', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'Ι', 'Φ', 'Μ', @@ -2519,7 +2508,7 @@ const Map dateSymbols = { 'Ν', 'Δ', ], - 'MONTHS': [ + MONTHS: const [ 'Ιανουαρίου', 'Φεβρουαρίου', 'Μαρτίου', @@ -2533,7 +2522,7 @@ const Map dateSymbols = { 'Νοεμβρίου', 'Δεκεμβρίου', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Ιανουάριος', 'Φεβρουάριος', 'Μάρτιος', @@ -2547,7 +2536,7 @@ const Map dateSymbols = { 'Νοέμβριος', 'Δεκέμβριος', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Ιαν', 'Φεβ', 'Μαρ', @@ -2561,7 +2550,7 @@ const Map dateSymbols = { 'Νοε', 'Δεκ', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Ιαν', 'Φεβ', 'Μάρ', @@ -2575,7 +2564,7 @@ const Map dateSymbols = { 'Νοέ', 'Δεκ', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Κυριακή', 'Δευτέρα', 'Τρίτη', @@ -2584,7 +2573,7 @@ const Map dateSymbols = { 'Παρασκευή', 'Σάββατο', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Κυριακή', 'Δευτέρα', 'Τρίτη', @@ -2593,7 +2582,7 @@ const Map dateSymbols = { 'Παρασκευή', 'Σάββατο', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Κυρ', 'Δευ', 'Τρί', @@ -2602,7 +2591,7 @@ const Map dateSymbols = { 'Παρ', 'Σάβ', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Κυρ', 'Δευ', 'Τρί', @@ -2611,7 +2600,7 @@ const Map dateSymbols = { 'Παρ', 'Σάβ', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Κ', 'Δ', 'Τ', @@ -2620,7 +2609,7 @@ const Map dateSymbols = { 'Π', 'Σ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Κ', 'Δ', 'Τ', @@ -2629,59 +2618,58 @@ const Map dateSymbols = { 'Π', 'Σ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Τ1', 'Τ2', 'Τ3', 'Τ4', ], - 'QUARTERS': [ + QUARTERS: const [ '1ο τρίμηνο', '2ο τρίμηνο', '3ο τρίμηνο', '4ο τρίμηνο', ], - 'AMPMS': [ + AMPMS: const [ 'π.μ.', 'μ.μ.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} - {0}', '{1} - {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'en': { - 'NAME': 'en', - 'ERAS': [ + ), + 'en': intl.DateSymbols( + NAME: 'en', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -2695,7 +2683,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -2709,7 +2697,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'January', 'February', 'March', @@ -2723,7 +2711,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'January', 'February', 'March', @@ -2737,7 +2725,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -2751,7 +2739,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -2765,7 +2753,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -2774,7 +2762,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -2783,7 +2771,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -2792,7 +2780,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -2801,7 +2789,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -2810,7 +2798,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -2819,59 +2807,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1st quarter', '2nd quarter', '3rd quarter', '4th quarter', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, MMMM d, y', 'MMMM d, y', 'MMM d, y', 'M/d/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ "{1} 'at' {0}", "{1} 'at' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'en_AU': { - 'NAME': 'en_AU', - 'ERAS': [ + ), + 'en_AU': intl.DateSymbols( + NAME: 'en_AU', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -2885,7 +2872,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -2899,7 +2886,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'January', 'February', 'March', @@ -2913,7 +2900,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'January', 'February', 'March', @@ -2927,7 +2914,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -2941,7 +2928,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -2955,7 +2942,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -2964,7 +2951,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -2973,7 +2960,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -2982,7 +2969,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -2991,7 +2978,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Su.', 'M.', 'Tu.', @@ -3000,7 +2987,7 @@ const Map dateSymbols = { 'F.', 'Sa.', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Su.', 'M.', 'Tu.', @@ -3009,59 +2996,58 @@ const Map dateSymbols = { 'F.', 'Sa.', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1st quarter', '2nd quarter', '3rd quarter', '4th quarter', ], - 'AMPMS': [ + AMPMS: const [ 'am', 'pm', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ "{1} 'at' {0}", "{1} 'at' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'en_CA': { - 'NAME': 'en_CA', - 'ERAS': [ + ), + 'en_CA': intl.DateSymbols( + NAME: 'en_CA', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -3075,7 +3061,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -3089,7 +3075,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'January', 'February', 'March', @@ -3103,7 +3089,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'January', 'February', 'March', @@ -3117,7 +3103,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan.', 'Feb.', 'Mar.', @@ -3131,7 +3117,7 @@ const Map dateSymbols = { 'Nov.', 'Dec.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan.', 'Feb.', 'Mar.', @@ -3145,7 +3131,7 @@ const Map dateSymbols = { 'Nov.', 'Dec.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -3154,7 +3140,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -3163,7 +3149,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Sun.', 'Mon.', 'Tue.', @@ -3172,7 +3158,7 @@ const Map dateSymbols = { 'Fri.', 'Sat.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Sun.', 'Mon.', 'Tue.', @@ -3181,7 +3167,7 @@ const Map dateSymbols = { 'Fri.', 'Sat.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -3190,7 +3176,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -3199,59 +3185,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1st quarter', '2nd quarter', '3rd quarter', '4th quarter', ], - 'AMPMS': [ + AMPMS: const [ 'a.m.', 'p.m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, MMMM d, y', 'MMMM d, y', 'MMM d, y', 'y-MM-dd', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ "{1} 'at' {0}", "{1} 'at' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'en_GB': { - 'NAME': 'en_GB', - 'ERAS': [ + ), + 'en_GB': intl.DateSymbols( + NAME: 'en_GB', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -3265,7 +3250,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -3279,7 +3264,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'January', 'February', 'March', @@ -3293,7 +3278,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'January', 'February', 'March', @@ -3307,7 +3292,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -3321,7 +3306,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -3335,7 +3320,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -3344,7 +3329,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -3353,7 +3338,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -3362,7 +3347,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -3371,7 +3356,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -3380,7 +3365,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -3389,59 +3374,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1st quarter', '2nd quarter', '3rd quarter', '4th quarter', ], - 'AMPMS': [ + AMPMS: const [ 'am', 'pm', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'dd/MM/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{1} 'at' {0}", "{1} 'at' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'en_IE': { - 'NAME': 'en_IE', - 'ERAS': [ + ), + 'en_IE': intl.DateSymbols( + NAME: 'en_IE', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -3455,7 +3439,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -3469,7 +3453,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'January', 'February', 'March', @@ -3483,7 +3467,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'January', 'February', 'March', @@ -3497,7 +3481,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -3511,7 +3495,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -3525,7 +3509,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -3534,7 +3518,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -3543,7 +3527,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -3552,7 +3536,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -3561,7 +3545,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -3570,7 +3554,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -3579,59 +3563,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1st quarter', '2nd quarter', '3rd quarter', '4th quarter', ], - 'AMPMS': [ + AMPMS: const [ 'a.m.', 'p.m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d MMMM y', 'd MMMM y', 'd MMM y', 'dd/MM/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{1} 'at' {0}", "{1} 'at' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'en_IN': { - 'NAME': 'en_IN', - 'ERAS': [ + ), + 'en_IN': intl.DateSymbols( + NAME: 'en_IN', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -3645,7 +3628,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -3659,7 +3642,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'January', 'February', 'March', @@ -3673,7 +3656,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'January', 'February', 'March', @@ -3687,7 +3670,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -3701,7 +3684,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -3715,7 +3698,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -3724,7 +3707,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -3733,7 +3716,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -3742,7 +3725,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -3751,7 +3734,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -3760,7 +3743,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -3769,59 +3752,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1st quarter', '2nd quarter', '3rd quarter', '4th quarter', ], - 'AMPMS': [ + AMPMS: const [ 'am', 'pm', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM, y', 'd MMMM y', 'dd-MMM-y', 'dd/MM/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 6, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ "{1} 'at' {0}", "{1} 'at' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'en_SG': { - 'NAME': 'en_SG', - 'ERAS': [ + ), + 'en_SG': intl.DateSymbols( + NAME: 'en_SG', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -3835,7 +3817,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -3849,7 +3831,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'January', 'February', 'March', @@ -3863,7 +3845,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'January', 'February', 'March', @@ -3877,7 +3859,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -3891,7 +3873,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -3905,7 +3887,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -3914,7 +3896,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -3923,7 +3905,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -3932,7 +3914,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -3941,7 +3923,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -3950,7 +3932,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -3959,59 +3941,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1st quarter', '2nd quarter', '3rd quarter', '4th quarter', ], - 'AMPMS': [ + AMPMS: const [ 'am', 'pm', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ "{1} 'at' {0}", "{1} 'at' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'en_US': { - 'NAME': 'en_US', - 'ERAS': [ + ), + 'en_US': intl.DateSymbols( + NAME: 'en_US', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -4025,7 +4006,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -4039,7 +4020,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'January', 'February', 'March', @@ -4053,7 +4034,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'January', 'February', 'March', @@ -4067,7 +4048,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -4081,7 +4062,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -4095,7 +4076,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -4104,7 +4085,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -4113,7 +4094,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -4122,7 +4103,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -4131,7 +4112,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -4140,7 +4121,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -4149,59 +4130,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1st quarter', '2nd quarter', '3rd quarter', '4th quarter', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, MMMM d, y', 'MMMM d, y', 'MMM d, y', 'M/d/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ "{1} 'at' {0}", "{1} 'at' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'en_ZA': { - 'NAME': 'en_ZA', - 'ERAS': [ + ), + 'en_ZA': intl.DateSymbols( + NAME: 'en_ZA', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -4215,7 +4195,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -4229,7 +4209,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'January', 'February', 'March', @@ -4243,7 +4223,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'January', 'February', 'March', @@ -4257,7 +4237,7 @@ const Map dateSymbols = { 'November', 'December', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -4271,7 +4251,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -4285,7 +4265,7 @@ const Map dateSymbols = { 'Nov', 'Dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -4294,7 +4274,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sunday', 'Monday', 'Tuesday', @@ -4303,7 +4283,7 @@ const Map dateSymbols = { 'Friday', 'Saturday', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -4312,7 +4292,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Sun', 'Mon', 'Tue', @@ -4321,7 +4301,7 @@ const Map dateSymbols = { 'Fri', 'Sat', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -4330,7 +4310,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -4339,59 +4319,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1st quarter', '2nd quarter', '3rd quarter', '4th quarter', ], - 'AMPMS': [ + AMPMS: const [ 'am', 'pm', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, dd MMMM y', 'dd MMMM y', 'dd MMM y', 'y/MM/dd', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ "{1} 'at' {0}", "{1} 'at' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'es': { - 'NAME': 'es', - 'ERAS': [ + ), + 'es': intl.DateSymbols( + NAME: 'es', + ERAS: const [ 'a. C.', 'd. C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'antes de Cristo', 'después de Cristo', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'E', 'F', 'M', @@ -4405,7 +4384,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'E', 'F', 'M', @@ -4419,7 +4398,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'enero', 'febrero', 'marzo', @@ -4433,7 +4412,7 @@ const Map dateSymbols = { 'noviembre', 'diciembre', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'enero', 'febrero', 'marzo', @@ -4447,7 +4426,7 @@ const Map dateSymbols = { 'noviembre', 'diciembre', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ene.', 'feb.', 'mar.', @@ -4461,7 +4440,7 @@ const Map dateSymbols = { 'nov.', 'dic.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ene.', 'feb.', 'mar.', @@ -4475,7 +4454,7 @@ const Map dateSymbols = { 'nov.', 'dic.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'domingo', 'lunes', 'martes', @@ -4484,7 +4463,7 @@ const Map dateSymbols = { 'viernes', 'sábado', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'domingo', 'lunes', 'martes', @@ -4493,7 +4472,7 @@ const Map dateSymbols = { 'viernes', 'sábado', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dom.', 'lun.', 'mar.', @@ -4502,7 +4481,7 @@ const Map dateSymbols = { 'vie.', 'sáb.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'dom.', 'lun.', 'mar.', @@ -4511,7 +4490,7 @@ const Map dateSymbols = { 'vie.', 'sáb.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -4520,7 +4499,7 @@ const Map dateSymbols = { 'V', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -4529,59 +4508,58 @@ const Map dateSymbols = { 'V', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'T1', 'T2', 'T3', 'T4', ], - 'QUARTERS': [ + QUARTERS: const [ '1.er trimestre', '2.º trimestre', '3.er trimestre', '4.º trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'a. m.', 'p. m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", 'd MMM y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H:mm:ss (zzzz)', 'H:mm:ss z', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1} {0}', '{1} {0}', ], - }, - 'es_419': { - 'NAME': 'es_419', - 'ERAS': [ + ), + 'es_419': intl.DateSymbols( + NAME: 'es_419', + ERAS: const [ 'a. C.', 'd. C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'antes de Cristo', 'después de Cristo', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'E', 'F', 'M', @@ -4595,7 +4573,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'E', 'F', 'M', @@ -4609,7 +4587,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'enero', 'febrero', 'marzo', @@ -4623,7 +4601,7 @@ const Map dateSymbols = { 'noviembre', 'diciembre', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'enero', 'febrero', 'marzo', @@ -4637,7 +4615,7 @@ const Map dateSymbols = { 'noviembre', 'diciembre', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ene.', 'feb.', 'mar.', @@ -4651,7 +4629,7 @@ const Map dateSymbols = { 'nov.', 'dic.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ene.', 'feb.', 'mar.', @@ -4665,7 +4643,7 @@ const Map dateSymbols = { 'nov.', 'dic.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'domingo', 'lunes', 'martes', @@ -4674,7 +4652,7 @@ const Map dateSymbols = { 'viernes', 'sábado', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'domingo', 'lunes', 'martes', @@ -4683,7 +4661,7 @@ const Map dateSymbols = { 'viernes', 'sábado', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dom.', 'lun.', 'mar.', @@ -4692,7 +4670,7 @@ const Map dateSymbols = { 'vie.', 'sáb.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'dom.', 'lun.', 'mar.', @@ -4701,7 +4679,7 @@ const Map dateSymbols = { 'vie.', 'sáb.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'd', 'l', 'm', @@ -4710,7 +4688,7 @@ const Map dateSymbols = { 'v', 's', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -4719,59 +4697,58 @@ const Map dateSymbols = { 'V', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'T1', 'T2', 'T3', 'T4', ], - 'QUARTERS': [ + QUARTERS: const [ '1.º trimestre', '2.º trimestre', '3.º trimestre', '4.º trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'a.m.', 'p.m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", 'd MMM y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1} {0}', '{1} {0}', ], - }, - 'es_MX': { - 'NAME': 'es_MX', - 'ERAS': [ + ), + 'es_MX': intl.DateSymbols( + NAME: 'es_MX', + ERAS: const [ 'a. C.', 'd. C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'antes de Cristo', 'después de Cristo', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'E', 'F', 'M', @@ -4785,7 +4762,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'E', 'F', 'M', @@ -4799,7 +4776,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'enero', 'febrero', 'marzo', @@ -4813,7 +4790,7 @@ const Map dateSymbols = { 'noviembre', 'diciembre', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'enero', 'febrero', 'marzo', @@ -4827,7 +4804,7 @@ const Map dateSymbols = { 'noviembre', 'diciembre', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ene.', 'feb.', 'mar.', @@ -4841,7 +4818,7 @@ const Map dateSymbols = { 'nov.', 'dic.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ene.', 'feb.', 'mar.', @@ -4855,7 +4832,7 @@ const Map dateSymbols = { 'nov.', 'dic.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'domingo', 'lunes', 'martes', @@ -4864,7 +4841,7 @@ const Map dateSymbols = { 'viernes', 'sábado', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'domingo', 'lunes', 'martes', @@ -4873,7 +4850,7 @@ const Map dateSymbols = { 'viernes', 'sábado', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dom.', 'lun.', 'mar.', @@ -4882,7 +4859,7 @@ const Map dateSymbols = { 'vie.', 'sáb.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'dom.', 'lun.', 'mar.', @@ -4891,7 +4868,7 @@ const Map dateSymbols = { 'vie.', 'sáb.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -4900,7 +4877,7 @@ const Map dateSymbols = { 'V', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -4909,59 +4886,58 @@ const Map dateSymbols = { 'V', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1er. trim.', '2º. trim.', '3er. trim.', '4º trim.', ], - 'QUARTERS': [ + QUARTERS: const [ '1.er trimestre', '2º. trimestre', '3.er trimestre', '4o. trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'a. m.', 'p. m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", 'd MMM y', 'dd/MM/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H:mm:ss zzzz', 'H:mm:ss z', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1} {0}', '{1} {0}', ], - }, - 'es_US': { - 'NAME': 'es_US', - 'ERAS': [ + ), + 'es_US': intl.DateSymbols( + NAME: 'es_US', + ERAS: const [ 'a. C.', 'd. C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'antes de Cristo', 'después de Cristo', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'E', 'F', 'M', @@ -4975,7 +4951,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'E', 'F', 'M', @@ -4989,7 +4965,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'enero', 'febrero', 'marzo', @@ -5003,7 +4979,7 @@ const Map dateSymbols = { 'noviembre', 'diciembre', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'enero', 'febrero', 'marzo', @@ -5017,7 +4993,7 @@ const Map dateSymbols = { 'noviembre', 'diciembre', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ene.', 'feb.', 'mar.', @@ -5031,7 +5007,7 @@ const Map dateSymbols = { 'nov.', 'dic.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ene.', 'feb.', 'mar.', @@ -5045,7 +5021,7 @@ const Map dateSymbols = { 'nov.', 'dic.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'domingo', 'lunes', 'martes', @@ -5054,7 +5030,7 @@ const Map dateSymbols = { 'viernes', 'sábado', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'domingo', 'lunes', 'martes', @@ -5063,7 +5039,7 @@ const Map dateSymbols = { 'viernes', 'sábado', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dom.', 'lun.', 'mar.', @@ -5072,7 +5048,7 @@ const Map dateSymbols = { 'vie.', 'sáb.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'dom.', 'lun.', 'mar.', @@ -5081,7 +5057,7 @@ const Map dateSymbols = { 'vie.', 'sáb.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -5090,7 +5066,7 @@ const Map dateSymbols = { 'V', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -5099,59 +5075,58 @@ const Map dateSymbols = { 'V', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'T1', 'T2', 'T3', 'T4', ], - 'QUARTERS': [ + QUARTERS: const [ '1.er trimestre', '2.º trimestre', '3.er trimestre', '4.º trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'a. m.', 'p. m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", 'd MMM y', 'd/M/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1} {0}', '{1} {0}', ], - }, - 'et': { - 'NAME': 'et', - 'ERAS': [ + ), + 'et': intl.DateSymbols( + NAME: 'et', + ERAS: const [ 'eKr', 'pKr', ], - 'ERANAMES': [ + ERANAMES: const [ 'enne Kristust', 'pärast Kristust', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'V', 'M', @@ -5165,7 +5140,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'V', 'M', @@ -5179,7 +5154,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'jaanuar', 'veebruar', 'märts', @@ -5193,7 +5168,7 @@ const Map dateSymbols = { 'november', 'detsember', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'jaanuar', 'veebruar', 'märts', @@ -5207,7 +5182,7 @@ const Map dateSymbols = { 'november', 'detsember', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jaan', 'veebr', 'märts', @@ -5221,7 +5196,7 @@ const Map dateSymbols = { 'nov', 'dets', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jaan', 'veebr', 'märts', @@ -5235,7 +5210,7 @@ const Map dateSymbols = { 'nov', 'dets', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'pühapäev', 'esmaspäev', 'teisipäev', @@ -5244,7 +5219,7 @@ const Map dateSymbols = { 'reede', 'laupäev', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'pühapäev', 'esmaspäev', 'teisipäev', @@ -5253,7 +5228,7 @@ const Map dateSymbols = { 'reede', 'laupäev', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'P', 'E', 'T', @@ -5262,7 +5237,7 @@ const Map dateSymbols = { 'R', 'L', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'P', 'E', 'T', @@ -5271,7 +5246,7 @@ const Map dateSymbols = { 'R', 'L', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'P', 'E', 'T', @@ -5280,7 +5255,7 @@ const Map dateSymbols = { 'R', 'L', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'P', 'E', 'T', @@ -5289,59 +5264,58 @@ const Map dateSymbols = { 'R', 'L', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'K1', 'K2', 'K3', 'K4', ], - 'QUARTERS': [ + QUARTERS: const [ '1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d. MMMM y', 'd. MMMM y', 'd. MMM y', 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'eu': { - 'NAME': 'eu', - 'ERAS': [ + ), + 'eu': intl.DateSymbols( + NAME: 'eu', + ERAS: const [ 'K.a.', 'K.o.', ], - 'ERANAMES': [ + ERANAMES: const [ 'K.a.', 'Kristo ondoren', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'U', 'O', 'M', @@ -5355,7 +5329,7 @@ const Map dateSymbols = { 'A', 'A', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'U', 'O', 'M', @@ -5369,7 +5343,7 @@ const Map dateSymbols = { 'A', 'A', ], - 'MONTHS': [ + MONTHS: const [ 'urtarrila', 'otsaila', 'martxoa', @@ -5383,7 +5357,7 @@ const Map dateSymbols = { 'azaroa', 'abendua', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'urtarrila', 'otsaila', 'martxoa', @@ -5397,7 +5371,7 @@ const Map dateSymbols = { 'azaroa', 'abendua', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'urt.', 'ots.', 'mar.', @@ -5411,7 +5385,7 @@ const Map dateSymbols = { 'aza.', 'abe.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'urt.', 'ots.', 'mar.', @@ -5425,7 +5399,7 @@ const Map dateSymbols = { 'aza.', 'abe.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'igandea', 'astelehena', 'asteartea', @@ -5434,7 +5408,7 @@ const Map dateSymbols = { 'ostirala', 'larunbata', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'igandea', 'astelehena', 'asteartea', @@ -5443,7 +5417,7 @@ const Map dateSymbols = { 'ostirala', 'larunbata', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ig.', 'al.', 'ar.', @@ -5452,7 +5426,7 @@ const Map dateSymbols = { 'or.', 'lr.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ig.', 'al.', 'ar.', @@ -5461,7 +5435,7 @@ const Map dateSymbols = { 'or.', 'lr.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'I', 'A', 'A', @@ -5470,7 +5444,7 @@ const Map dateSymbols = { 'O', 'L', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'I', 'A', 'A', @@ -5479,59 +5453,58 @@ const Map dateSymbols = { 'O', 'L', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1Hh', '2Hh', '3Hh', '4Hh', ], - 'QUARTERS': [ + QUARTERS: const [ '1. hiruhilekoa', '2. hiruhilekoa', '3. hiruhilekoa', '4. hiruhilekoa', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "y('e')'ko' MMMM'ren' d('a'), EEEE", "y('e')'ko' MMMM'ren' d('a')", "y('e')'ko' MMM d('a')", 'yy/M/d', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss (zzzz)', 'HH:mm:ss (z)', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'fa': { - 'NAME': 'fa', - 'ERAS': [ + ), + 'fa': intl.DateSymbols( + NAME: 'fa', + ERAS: const [ 'ق.م.', 'م.', ], - 'ERANAMES': [ + ERANAMES: const [ 'قبل از میلاد', 'میلادی', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ژ', 'ف', 'م', @@ -5545,7 +5518,7 @@ const Map dateSymbols = { 'ن', 'د', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ژ', 'ف', 'م', @@ -5559,7 +5532,7 @@ const Map dateSymbols = { 'ن', 'د', ], - 'MONTHS': [ + MONTHS: const [ 'ژانویهٔ', 'فوریهٔ', 'مارس', @@ -5573,7 +5546,7 @@ const Map dateSymbols = { 'نوامبر', 'دسامبر', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ژانویه', 'فوریه', 'مارس', @@ -5587,7 +5560,7 @@ const Map dateSymbols = { 'نوامبر', 'دسامبر', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ژانویهٔ', 'فوریهٔ', 'مارس', @@ -5601,7 +5574,7 @@ const Map dateSymbols = { 'نوامبر', 'دسامبر', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ژانویه', 'فوریه', 'مارس', @@ -5615,7 +5588,7 @@ const Map dateSymbols = { 'نوامبر', 'دسامبر', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'یکشنبه', 'دوشنبه', 'سه‌شنبه', @@ -5624,7 +5597,7 @@ const Map dateSymbols = { 'جمعه', 'شنبه', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'یکشنبه', 'دوشنبه', 'سه‌شنبه', @@ -5633,7 +5606,7 @@ const Map dateSymbols = { 'جمعه', 'شنبه', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'یکشنبه', 'دوشنبه', 'سه‌شنبه', @@ -5642,7 +5615,7 @@ const Map dateSymbols = { 'جمعه', 'شنبه', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'یکشنبه', 'دوشنبه', 'سه‌شنبه', @@ -5651,7 +5624,7 @@ const Map dateSymbols = { 'جمعه', 'شنبه', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'ی', 'د', 'س', @@ -5660,7 +5633,7 @@ const Map dateSymbols = { 'ج', 'ش', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'ی', 'د', 'س', @@ -5669,60 +5642,59 @@ const Map dateSymbols = { 'ج', 'ش', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'س‌م۱', 'س‌م۲', 'س‌م۳', 'س‌م۴', ], - 'QUARTERS': [ + QUARTERS: const [ 'سه‌ماههٔ اول', 'سه‌ماههٔ دوم', 'سه‌ماههٔ سوم', 'سه‌ماههٔ چهارم', ], - 'AMPMS': [ + AMPMS: const [ 'قبل‌ازظهر', 'بعدازظهر', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d MMMM y', 'd MMMM y', 'd MMM y', 'y/M/d', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H:mm:ss (zzzz)', 'H:mm:ss (z)', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 5, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 5, + WEEKENDRANGE: const [ 4, 4, ], - 'FIRSTWEEKCUTOFFDAY': 4, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 4, + DATETIMEFORMATS: const [ '{1}، ساعت {0}', '{1}، ساعت {0}', '{1}،‏ {0}', '{1}،‏ {0}', ], - 'ZERODIGIT': '۰', - }, - 'fi': { - 'NAME': 'fi', - 'ERAS': [ + ZERODIGIT: '۰', + ), + 'fi': intl.DateSymbols( + NAME: 'fi', + ERAS: const [ 'eKr.', 'jKr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'ennen Kristuksen syntymää', 'jälkeen Kristuksen syntymän', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'T', 'H', 'M', @@ -5736,7 +5708,7 @@ const Map dateSymbols = { 'M', 'J', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'T', 'H', 'M', @@ -5750,7 +5722,7 @@ const Map dateSymbols = { 'M', 'J', ], - 'MONTHS': [ + MONTHS: const [ 'tammikuuta', 'helmikuuta', 'maaliskuuta', @@ -5764,7 +5736,7 @@ const Map dateSymbols = { 'marraskuuta', 'joulukuuta', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'tammikuu', 'helmikuu', 'maaliskuu', @@ -5778,7 +5750,7 @@ const Map dateSymbols = { 'marraskuu', 'joulukuu', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'tammik.', 'helmik.', 'maalisk.', @@ -5792,7 +5764,7 @@ const Map dateSymbols = { 'marrask.', 'jouluk.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'tammi', 'helmi', 'maalis', @@ -5806,7 +5778,7 @@ const Map dateSymbols = { 'marras', 'joulu', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'sunnuntaina', 'maanantaina', 'tiistaina', @@ -5815,7 +5787,7 @@ const Map dateSymbols = { 'perjantaina', 'lauantaina', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'sunnuntai', 'maanantai', 'tiistai', @@ -5824,7 +5796,7 @@ const Map dateSymbols = { 'perjantai', 'lauantai', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'su', 'ma', 'ti', @@ -5833,7 +5805,7 @@ const Map dateSymbols = { 'pe', 'la', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'su', 'ma', 'ti', @@ -5842,7 +5814,7 @@ const Map dateSymbols = { 'pe', 'la', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -5851,7 +5823,7 @@ const Map dateSymbols = { 'P', 'L', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -5860,59 +5832,58 @@ const Map dateSymbols = { 'P', 'L', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1. nelj.', '2. nelj.', '3. nelj.', '4. nelj.', ], - 'QUARTERS': [ + QUARTERS: const [ '1. neljännes', '2. neljännes', '3. neljännes', '4. neljännes', ], - 'AMPMS': [ + AMPMS: const [ 'ap.', 'ip.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'cccc d. MMMM y', 'd. MMMM y', 'd.M.y', 'd.M.y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H.mm.ss zzzz', 'H.mm.ss z', 'H.mm.ss', 'H.mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{1} 'klo' {0}", "{1} 'klo' {0}", "{1} 'klo' {0}", '{1} {0}', ], - }, - 'fil': { - 'NAME': 'fil', - 'ERAS': [ + ), + 'fil': intl.DateSymbols( + NAME: 'fil', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'Ene', 'Peb', 'Mar', @@ -5926,7 +5897,7 @@ const Map dateSymbols = { 'Nob', 'Dis', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'E', 'P', 'M', @@ -5940,7 +5911,7 @@ const Map dateSymbols = { 'Nob', 'Dis', ], - 'MONTHS': [ + MONTHS: const [ 'Enero', 'Pebrero', 'Marso', @@ -5954,7 +5925,7 @@ const Map dateSymbols = { 'Nobyembre', 'Disyembre', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Enero', 'Pebrero', 'Marso', @@ -5968,7 +5939,7 @@ const Map dateSymbols = { 'Nobyembre', 'Disyembre', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Ene', 'Peb', 'Mar', @@ -5982,7 +5953,7 @@ const Map dateSymbols = { 'Nob', 'Dis', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Ene', 'Peb', 'Mar', @@ -5996,7 +5967,7 @@ const Map dateSymbols = { 'Nob', 'Dis', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Linggo', 'Lunes', 'Martes', @@ -6005,7 +5976,7 @@ const Map dateSymbols = { 'Biyernes', 'Sabado', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Linggo', 'Lunes', 'Martes', @@ -6014,7 +5985,7 @@ const Map dateSymbols = { 'Biyernes', 'Sabado', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Lin', 'Lun', 'Mar', @@ -6023,7 +5994,7 @@ const Map dateSymbols = { 'Biy', 'Sab', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Lin', 'Lun', 'Mar', @@ -6032,7 +6003,7 @@ const Map dateSymbols = { 'Biy', 'Sab', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Lin', 'Lun', 'Mar', @@ -6041,7 +6012,7 @@ const Map dateSymbols = { 'Biy', 'Sab', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Lin', 'Lun', 'Mar', @@ -6050,59 +6021,58 @@ const Map dateSymbols = { 'Biy', 'Sab', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ 'ika-1 quarter', 'ika-2 quarter', 'ika-3 quarter', 'ika-4 na quarter', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, MMMM d, y', 'MMMM d, y', 'MMM d, y', 'M/d/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ "{1} 'nang' {0}", "{1} 'nang' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'fr': { - 'NAME': 'fr', - 'ERAS': [ + ), + 'fr': intl.DateSymbols( + NAME: 'fr', + ERAS: const [ 'av. J.-C.', 'ap. J.-C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'avant Jésus-Christ', 'après Jésus-Christ', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -6116,7 +6086,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -6130,7 +6100,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'janvier', 'février', 'mars', @@ -6144,7 +6114,7 @@ const Map dateSymbols = { 'novembre', 'décembre', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'janvier', 'février', 'mars', @@ -6158,7 +6128,7 @@ const Map dateSymbols = { 'novembre', 'décembre', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'janv.', 'févr.', 'mars', @@ -6172,7 +6142,7 @@ const Map dateSymbols = { 'nov.', 'déc.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'janv.', 'févr.', 'mars', @@ -6186,7 +6156,7 @@ const Map dateSymbols = { 'nov.', 'déc.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'dimanche', 'lundi', 'mardi', @@ -6195,7 +6165,7 @@ const Map dateSymbols = { 'vendredi', 'samedi', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'dimanche', 'lundi', 'mardi', @@ -6204,7 +6174,7 @@ const Map dateSymbols = { 'vendredi', 'samedi', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dim.', 'lun.', 'mar.', @@ -6213,7 +6183,7 @@ const Map dateSymbols = { 'ven.', 'sam.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'dim.', 'lun.', 'mar.', @@ -6222,7 +6192,7 @@ const Map dateSymbols = { 'ven.', 'sam.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -6231,7 +6201,7 @@ const Map dateSymbols = { 'V', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -6240,59 +6210,58 @@ const Map dateSymbols = { 'V', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'T1', 'T2', 'T3', 'T4', ], - 'QUARTERS': [ + QUARTERS: const [ '1er trimestre', '2e trimestre', '3e trimestre', '4e trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d MMMM y', 'd MMMM y', 'd MMM y', 'dd/MM/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{1} 'à' {0}", "{1} 'à' {0}", "{1} 'à' {0}", '{1} {0}', ], - }, - 'fr_CA': { - 'NAME': 'fr_CA', - 'ERAS': [ + ), + 'fr_CA': intl.DateSymbols( + NAME: 'fr_CA', + ERAS: const [ 'av. J.-C.', 'ap. J.-C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'avant Jésus-Christ', 'après Jésus-Christ', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -6306,7 +6275,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -6320,7 +6289,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'janvier', 'février', 'mars', @@ -6334,7 +6303,7 @@ const Map dateSymbols = { 'novembre', 'décembre', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'janvier', 'février', 'mars', @@ -6348,7 +6317,7 @@ const Map dateSymbols = { 'novembre', 'décembre', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'janv.', 'févr.', 'mars', @@ -6362,7 +6331,7 @@ const Map dateSymbols = { 'nov.', 'déc.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'janv.', 'févr.', 'mars', @@ -6376,7 +6345,7 @@ const Map dateSymbols = { 'nov.', 'déc.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'dimanche', 'lundi', 'mardi', @@ -6385,7 +6354,7 @@ const Map dateSymbols = { 'vendredi', 'samedi', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'dimanche', 'lundi', 'mardi', @@ -6394,7 +6363,7 @@ const Map dateSymbols = { 'vendredi', 'samedi', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dim.', 'lun.', 'mar.', @@ -6403,7 +6372,7 @@ const Map dateSymbols = { 'ven.', 'sam.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'dim.', 'lun.', 'mar.', @@ -6412,7 +6381,7 @@ const Map dateSymbols = { 'ven.', 'sam.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -6421,7 +6390,7 @@ const Map dateSymbols = { 'V', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -6430,59 +6399,58 @@ const Map dateSymbols = { 'V', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'T1', 'T2', 'T3', 'T4', ], - 'QUARTERS': [ + QUARTERS: const [ '1er trimestre', '2e trimestre', '3e trimestre', '4e trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'a.m.', 'p.m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d MMMM y', 'd MMMM y', 'd MMM y', 'yy-MM-dd', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ "HH 'h' mm 'min' ss 's' zzzz", "HH 'h' mm 'min' ss 's' z", "HH 'h' mm 'min' ss 's'", "HH 'h' mm", ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ "{1} 'à' {0}", "{1} 'à' {0}", '{1} {0}', '{1} {0}', ], - }, - 'gl': { - 'NAME': 'gl', - 'ERAS': [ + ), + 'gl': intl.DateSymbols( + NAME: 'gl', + ERAS: const [ 'a.C.', 'd.C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'antes de Cristo', 'despois de Cristo', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'x.', 'f.', 'm.', @@ -6496,7 +6464,7 @@ const Map dateSymbols = { 'n.', 'd.', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'X', 'F', 'M', @@ -6510,7 +6478,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'xaneiro', 'febreiro', 'marzo', @@ -6524,7 +6492,7 @@ const Map dateSymbols = { 'novembro', 'decembro', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Xaneiro', 'Febreiro', 'Marzo', @@ -6538,7 +6506,7 @@ const Map dateSymbols = { 'Novembro', 'Decembro', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'xan.', 'feb.', 'mar.', @@ -6552,7 +6520,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Xan.', 'Feb.', 'Mar.', @@ -6566,7 +6534,7 @@ const Map dateSymbols = { 'Nov.', 'Dec.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'domingo', 'luns', 'martes', @@ -6575,7 +6543,7 @@ const Map dateSymbols = { 'venres', 'sábado', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Domingo', 'Luns', 'Martes', @@ -6584,7 +6552,7 @@ const Map dateSymbols = { 'Venres', 'Sábado', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dom.', 'luns', 'mar.', @@ -6593,7 +6561,7 @@ const Map dateSymbols = { 'ven.', 'sáb.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Dom.', 'Luns', 'Mar.', @@ -6602,7 +6570,7 @@ const Map dateSymbols = { 'Ven.', 'Sáb.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'd.', 'l.', 'm.', @@ -6611,7 +6579,7 @@ const Map dateSymbols = { 'v.', 's.', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -6620,59 +6588,58 @@ const Map dateSymbols = { 'V', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'T1', 'T2', 'T3', 'T4', ], - 'QUARTERS': [ + QUARTERS: const [ '1.º trimestre', '2.º trimestre', '3.º trimestre', '4.º trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'a.m.', 'p.m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", "d 'de' MMM 'de' y", 'dd/MM/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{0} 'do' {1}", "{0} 'do' {1}", '{0}, {1}', '{0}, {1}', ], - }, - 'gsw': { - 'NAME': 'gsw', - 'ERAS': [ + ), + 'gsw': intl.DateSymbols( + NAME: 'gsw', + ERAS: const [ 'v. Chr.', 'n. Chr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'v. Chr.', 'n. Chr.', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -6686,7 +6653,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -6700,7 +6667,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'Januar', 'Februar', 'März', @@ -6714,7 +6681,7 @@ const Map dateSymbols = { 'Novämber', 'Dezämber', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Januar', 'Februar', 'März', @@ -6728,7 +6695,7 @@ const Map dateSymbols = { 'Novämber', 'Dezämber', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mär', @@ -6742,7 +6709,7 @@ const Map dateSymbols = { 'Nov', 'Dez', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mär', @@ -6756,7 +6723,7 @@ const Map dateSymbols = { 'Nov', 'Dez', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Sunntig', 'Määntig', 'Ziischtig', @@ -6765,7 +6732,7 @@ const Map dateSymbols = { 'Friitig', 'Samschtig', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Sunntig', 'Määntig', 'Ziischtig', @@ -6774,7 +6741,7 @@ const Map dateSymbols = { 'Friitig', 'Samschtig', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Su.', 'Mä.', 'Zi.', @@ -6783,7 +6750,7 @@ const Map dateSymbols = { 'Fr.', 'Sa.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Su.', 'Mä.', 'Zi.', @@ -6792,7 +6759,7 @@ const Map dateSymbols = { 'Fr.', 'Sa.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'D', @@ -6801,7 +6768,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'D', @@ -6810,59 +6777,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1. Quartal', '2. Quartal', '3. Quartal', '4. Quartal', ], - 'AMPMS': [ + AMPMS: const [ 'am Vormittag', 'am Namittag', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d. MMMM y', 'd. MMMM y', 'dd.MM.y', 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'gu': { - 'NAME': 'gu', - 'ERAS': [ + ), + 'gu': intl.DateSymbols( + NAME: 'gu', + ERAS: const [ 'ઈ.સ.પૂર્વે', 'ઈ.સ.', ], - 'ERANAMES': [ + ERANAMES: const [ 'ઈસવીસન પૂર્વે', 'ઇસવીસન', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'જા', 'ફે', 'મા', @@ -6876,7 +6842,7 @@ const Map dateSymbols = { 'ન', 'ડિ', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'જા', 'ફે', 'મા', @@ -6890,7 +6856,7 @@ const Map dateSymbols = { 'ન', 'ડિ', ], - 'MONTHS': [ + MONTHS: const [ 'જાન્યુઆરી', 'ફેબ્રુઆરી', 'માર્ચ', @@ -6904,7 +6870,7 @@ const Map dateSymbols = { 'નવેમ્બર', 'ડિસેમ્બર', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'જાન્યુઆરી', 'ફેબ્રુઆરી', 'માર્ચ', @@ -6918,7 +6884,7 @@ const Map dateSymbols = { 'નવેમ્બર', 'ડિસેમ્બર', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'જાન્યુ', 'ફેબ્રુ', 'માર્ચ', @@ -6932,7 +6898,7 @@ const Map dateSymbols = { 'નવે', 'ડિસે', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'જાન્યુ', 'ફેબ્રુ', 'માર્ચ', @@ -6946,7 +6912,7 @@ const Map dateSymbols = { 'નવે', 'ડિસે', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'રવિવાર', 'સોમવાર', 'મંગળવાર', @@ -6955,7 +6921,7 @@ const Map dateSymbols = { 'શુક્રવાર', 'શનિવાર', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'રવિવાર', 'સોમવાર', 'મંગળવાર', @@ -6964,7 +6930,7 @@ const Map dateSymbols = { 'શુક્રવાર', 'શનિવાર', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'રવિ', 'સોમ', 'મંગળ', @@ -6973,7 +6939,7 @@ const Map dateSymbols = { 'શુક્ર', 'શનિ', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'રવિ', 'સોમ', 'મંગળ', @@ -6982,7 +6948,7 @@ const Map dateSymbols = { 'શુક્ર', 'શનિ', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'ર', 'સો', 'મં', @@ -6991,7 +6957,7 @@ const Map dateSymbols = { 'શુ', 'શ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'ર', 'સો', 'મં', @@ -7000,59 +6966,58 @@ const Map dateSymbols = { 'શુ', 'શ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1લો ત્રિમાસ', '2જો ત્રિમાસ', '3જો ત્રિમાસ', '4થો ત્રિમાસ', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM, y', 'd MMMM, y', 'd MMM, y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'hh:mm:ss a zzzz', 'hh:mm:ss a z', 'hh:mm:ss a', 'hh:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 6, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} એ {0} વાગ્યે', '{1} એ {0} વાગ્યે', '{1} {0}', '{1} {0}', ], - }, - 'he': { - 'NAME': 'he', - 'ERAS': [ + ), + 'he': intl.DateSymbols( + NAME: 'he', + ERAS: const [ 'לפנה״ס', 'לספירה', ], - 'ERANAMES': [ + ERANAMES: const [ 'לפני הספירה', 'לספירה', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1', '2', '3', @@ -7066,7 +7031,7 @@ const Map dateSymbols = { '11', '12', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1', '2', '3', @@ -7080,7 +7045,7 @@ const Map dateSymbols = { '11', '12', ], - 'MONTHS': [ + MONTHS: const [ 'ינואר', 'פברואר', 'מרץ', @@ -7094,7 +7059,7 @@ const Map dateSymbols = { 'נובמבר', 'דצמבר', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ינואר', 'פברואר', 'מרץ', @@ -7108,7 +7073,7 @@ const Map dateSymbols = { 'נובמבר', 'דצמבר', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ינו׳', 'פבר׳', 'מרץ', @@ -7122,7 +7087,7 @@ const Map dateSymbols = { 'נוב׳', 'דצמ׳', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ינו׳', 'פבר׳', 'מרץ', @@ -7136,7 +7101,7 @@ const Map dateSymbols = { 'נוב׳', 'דצמ׳', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'יום ראשון', 'יום שני', 'יום שלישי', @@ -7145,7 +7110,7 @@ const Map dateSymbols = { 'יום שישי', 'יום שבת', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'יום ראשון', 'יום שני', 'יום שלישי', @@ -7154,7 +7119,7 @@ const Map dateSymbols = { 'יום שישי', 'יום שבת', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'יום א׳', 'יום ב׳', 'יום ג׳', @@ -7163,7 +7128,7 @@ const Map dateSymbols = { 'יום ו׳', 'שבת', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'יום א׳', 'יום ב׳', 'יום ג׳', @@ -7172,7 +7137,7 @@ const Map dateSymbols = { 'יום ו׳', 'שבת', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'א׳', 'ב׳', 'ג׳', @@ -7181,7 +7146,7 @@ const Map dateSymbols = { 'ו׳', 'ש׳', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'א׳', 'ב׳', 'ג׳', @@ -7190,59 +7155,58 @@ const Map dateSymbols = { 'ו׳', 'ש׳', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ 'רבעון 1', 'רבעון 2', 'רבעון 3', 'רבעון 4', ], - 'AMPMS': [ + AMPMS: const [ 'לפנה״צ', 'אחה״צ', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d בMMMM y', 'd בMMMM y', 'd בMMM y', 'd.M.y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H:mm:ss zzzz', 'H:mm:ss z', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 4, 5, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} בשעה {0}', '{1} בשעה {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'hi': { - 'NAME': 'hi', - 'ERAS': [ + ), + 'hi': intl.DateSymbols( + NAME: 'hi', + ERAS: const [ 'ईसा-पूर्व', 'ईस्वी', ], - 'ERANAMES': [ + ERANAMES: const [ 'ईसा-पूर्व', 'ईसवी सन', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ज', 'फ़', 'मा', @@ -7256,7 +7220,7 @@ const Map dateSymbols = { 'न', 'दि', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ज', 'फ़', 'मा', @@ -7270,7 +7234,7 @@ const Map dateSymbols = { 'न', 'दि', ], - 'MONTHS': [ + MONTHS: const [ 'जनवरी', 'फ़रवरी', 'मार्च', @@ -7284,7 +7248,7 @@ const Map dateSymbols = { 'नवंबर', 'दिसंबर', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'जनवरी', 'फ़रवरी', 'मार्च', @@ -7298,7 +7262,7 @@ const Map dateSymbols = { 'नवंबर', 'दिसंबर', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'जन॰', 'फ़र॰', 'मार्च', @@ -7312,7 +7276,7 @@ const Map dateSymbols = { 'नव॰', 'दिस॰', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'जन॰', 'फ़र॰', 'मार्च', @@ -7326,7 +7290,7 @@ const Map dateSymbols = { 'नव॰', 'दिस॰', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'रविवार', 'सोमवार', 'मंगलवार', @@ -7335,7 +7299,7 @@ const Map dateSymbols = { 'शुक्रवार', 'शनिवार', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'रविवार', 'सोमवार', 'मंगलवार', @@ -7344,7 +7308,7 @@ const Map dateSymbols = { 'शुक्रवार', 'शनिवार', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'रवि', 'सोम', 'मंगल', @@ -7353,7 +7317,7 @@ const Map dateSymbols = { 'शुक्र', 'शनि', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'रवि', 'सोम', 'मंगल', @@ -7362,7 +7326,7 @@ const Map dateSymbols = { 'शुक्र', 'शनि', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'र', 'सो', 'मं', @@ -7371,7 +7335,7 @@ const Map dateSymbols = { 'शु', 'श', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'र', 'सो', 'मं', @@ -7380,59 +7344,58 @@ const Map dateSymbols = { 'शु', 'श', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'ति1', 'ति2', 'ति3', 'ति4', ], - 'QUARTERS': [ + QUARTERS: const [ 'पहली तिमाही', 'दूसरी तिमाही', 'तीसरी तिमाही', 'चौथी तिमाही', ], - 'AMPMS': [ + AMPMS: const [ 'am', 'pm', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 6, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} को {0}', '{1} को {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'hr': { - 'NAME': 'hr', - 'ERAS': [ + ), + 'hr': intl.DateSymbols( + NAME: 'hr', + ERAS: const [ 'pr. Kr.', 'po. Kr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'prije Krista', 'poslije Krista', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1.', '2.', '3.', @@ -7446,7 +7409,7 @@ const Map dateSymbols = { '11.', '12.', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1.', '2.', '3.', @@ -7460,7 +7423,7 @@ const Map dateSymbols = { '11.', '12.', ], - 'MONTHS': [ + MONTHS: const [ 'siječnja', 'veljače', 'ožujka', @@ -7474,7 +7437,7 @@ const Map dateSymbols = { 'studenoga', 'prosinca', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'siječanj', 'veljača', 'ožujak', @@ -7488,7 +7451,7 @@ const Map dateSymbols = { 'studeni', 'prosinac', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'sij', 'velj', 'ožu', @@ -7502,7 +7465,7 @@ const Map dateSymbols = { 'stu', 'pro', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'sij', 'velj', 'ožu', @@ -7516,7 +7479,7 @@ const Map dateSymbols = { 'stu', 'pro', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'nedjelja', 'ponedjeljak', 'utorak', @@ -7525,7 +7488,7 @@ const Map dateSymbols = { 'petak', 'subota', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'nedjelja', 'ponedjeljak', 'utorak', @@ -7534,7 +7497,7 @@ const Map dateSymbols = { 'petak', 'subota', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ned', 'pon', 'uto', @@ -7543,7 +7506,7 @@ const Map dateSymbols = { 'pet', 'sub', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ned', 'pon', 'uto', @@ -7552,7 +7515,7 @@ const Map dateSymbols = { 'pet', 'sub', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'N', 'P', 'U', @@ -7561,7 +7524,7 @@ const Map dateSymbols = { 'P', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'n', 'p', 'u', @@ -7570,59 +7533,58 @@ const Map dateSymbols = { 'p', 's', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1kv', '2kv', '3kv', '4kv', ], - 'QUARTERS': [ + QUARTERS: const [ '1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d. MMMM y.', 'd. MMMM y.', 'd. MMM y.', 'dd. MM. y.', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss (zzzz)', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ "{1} 'u' {0}", "{1} 'u' {0}", '{1} {0}', '{1} {0}', ], - }, - 'hu': { - 'NAME': 'hu', - 'ERAS': [ + ), + 'hu': intl.DateSymbols( + NAME: 'hu', + ERAS: const [ 'i. e.', 'i. sz.', ], - 'ERANAMES': [ + ERANAMES: const [ 'Krisztus előtt', 'időszámításunk szerint', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -7636,7 +7598,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -7650,7 +7612,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'január', 'február', 'március', @@ -7664,7 +7626,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'január', 'február', 'március', @@ -7678,7 +7640,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan.', 'febr.', 'márc.', @@ -7692,7 +7654,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan.', 'febr.', 'márc.', @@ -7706,7 +7668,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'vasárnap', 'hétfő', 'kedd', @@ -7715,7 +7677,7 @@ const Map dateSymbols = { 'péntek', 'szombat', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'vasárnap', 'hétfő', 'kedd', @@ -7724,7 +7686,7 @@ const Map dateSymbols = { 'péntek', 'szombat', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'V', 'H', 'K', @@ -7733,7 +7695,7 @@ const Map dateSymbols = { 'P', 'Szo', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'V', 'H', 'K', @@ -7742,7 +7704,7 @@ const Map dateSymbols = { 'P', 'Szo', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'V', 'H', 'K', @@ -7751,7 +7713,7 @@ const Map dateSymbols = { 'P', 'Sz', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'V', 'H', 'K', @@ -7760,59 +7722,58 @@ const Map dateSymbols = { 'P', 'Sz', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'I. n.év', 'II. n.év', 'III. n.év', 'IV. n.év', ], - 'QUARTERS': [ + QUARTERS: const [ 'I. negyedév', 'II. negyedév', 'III. negyedév', 'IV. negyedév', ], - 'AMPMS': [ + AMPMS: const [ 'de.', 'du.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y. MMMM d., EEEE', 'y. MMMM d.', 'y. MMM d.', 'y. MM. dd.', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H:mm:ss zzzz', 'H:mm:ss z', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'hy': { - 'NAME': 'hy', - 'ERAS': [ + ), + 'hy': intl.DateSymbols( + NAME: 'hy', + ERAS: const [ 'մ.թ.ա.', 'մ.թ.', ], - 'ERANAMES': [ + ERANAMES: const [ 'Քրիստոսից առաջ', 'Քրիստոսից հետո', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'Հ', 'Փ', 'Մ', @@ -7826,7 +7787,7 @@ const Map dateSymbols = { 'Ն', 'Դ', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'Հ', 'Փ', 'Մ', @@ -7840,7 +7801,7 @@ const Map dateSymbols = { 'Ն', 'Դ', ], - 'MONTHS': [ + MONTHS: const [ 'հունվարի', 'փետրվարի', 'մարտի', @@ -7854,7 +7815,7 @@ const Map dateSymbols = { 'նոյեմբերի', 'դեկտեմբերի', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'հունվար', 'փետրվար', 'մարտ', @@ -7868,7 +7829,7 @@ const Map dateSymbols = { 'նոյեմբեր', 'դեկտեմբեր', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'հնվ', 'փտվ', 'մրտ', @@ -7882,7 +7843,7 @@ const Map dateSymbols = { 'նոյ', 'դեկ', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'հնվ', 'փտվ', 'մրտ', @@ -7896,7 +7857,7 @@ const Map dateSymbols = { 'նոյ', 'դեկ', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'կիրակի', 'երկուշաբթի', 'երեքշաբթի', @@ -7905,7 +7866,7 @@ const Map dateSymbols = { 'ուրբաթ', 'շաբաթ', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'կիրակի', 'երկուշաբթի', 'երեքշաբթի', @@ -7914,7 +7875,7 @@ const Map dateSymbols = { 'ուրբաթ', 'շաբաթ', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'կիր', 'երկ', 'երք', @@ -7923,7 +7884,7 @@ const Map dateSymbols = { 'ուր', 'շբթ', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'կիր', 'երկ', 'երք', @@ -7932,7 +7893,7 @@ const Map dateSymbols = { 'ուր', 'շբթ', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Կ', 'Ե', 'Ե', @@ -7941,7 +7902,7 @@ const Map dateSymbols = { 'Ո', 'Շ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Կ', 'Ե', 'Ե', @@ -7950,59 +7911,58 @@ const Map dateSymbols = { 'Ո', 'Շ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1-ին եռմս.', '2-րդ եռմս.', '3-րդ եռմս.', '4-րդ եռմս.', ], - 'QUARTERS': [ + QUARTERS: const [ '1-ին եռամսյակ', '2-րդ եռամսյակ', '3-րդ եռամսյակ', '4-րդ եռամսյակ', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y թ. MMMM d, EEEE', 'dd MMMM, y թ.', 'dd MMM, y թ.', 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'id': { - 'NAME': 'id', - 'ERAS': [ + ), + 'id': intl.DateSymbols( + NAME: 'id', + ERAS: const [ 'SM', 'M', ], - 'ERANAMES': [ + ERANAMES: const [ 'Sebelum Masehi', 'Masehi', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -8016,7 +7976,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -8030,7 +7990,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'Januari', 'Februari', 'Maret', @@ -8044,7 +8004,7 @@ const Map dateSymbols = { 'November', 'Desember', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Januari', 'Februari', 'Maret', @@ -8058,7 +8018,7 @@ const Map dateSymbols = { 'November', 'Desember', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -8072,7 +8032,7 @@ const Map dateSymbols = { 'Nov', 'Des', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mar', @@ -8086,7 +8046,7 @@ const Map dateSymbols = { 'Nov', 'Des', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Minggu', 'Senin', 'Selasa', @@ -8095,7 +8055,7 @@ const Map dateSymbols = { 'Jumat', 'Sabtu', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Minggu', 'Senin', 'Selasa', @@ -8104,7 +8064,7 @@ const Map dateSymbols = { 'Jumat', 'Sabtu', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Min', 'Sen', 'Sel', @@ -8113,7 +8073,7 @@ const Map dateSymbols = { 'Jum', 'Sab', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Min', 'Sen', 'Sel', @@ -8122,7 +8082,7 @@ const Map dateSymbols = { 'Jum', 'Sab', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'M', 'S', 'S', @@ -8131,7 +8091,7 @@ const Map dateSymbols = { 'J', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'M', 'S', 'S', @@ -8140,59 +8100,58 @@ const Map dateSymbols = { 'J', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'K1', 'K2', 'K3', 'K4', ], - 'QUARTERS': [ + QUARTERS: const [ 'Kuartal ke-1', 'Kuartal ke-2', 'Kuartal ke-3', 'Kuartal ke-4', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, dd MMMM y', 'd MMMM y', 'd MMM y', 'dd/MM/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH.mm.ss zzzz', 'HH.mm.ss z', 'HH.mm.ss', 'HH.mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'is': { - 'NAME': 'is', - 'ERAS': [ + ), + 'is': intl.DateSymbols( + NAME: 'is', + ERAS: const [ 'f.Kr.', 'e.Kr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'fyrir Krist', 'eftir Krist', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -8206,7 +8165,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -8220,7 +8179,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'janúar', 'febrúar', 'mars', @@ -8234,7 +8193,7 @@ const Map dateSymbols = { 'nóvember', 'desember', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'janúar', 'febrúar', 'mars', @@ -8248,7 +8207,7 @@ const Map dateSymbols = { 'nóvember', 'desember', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan.', 'feb.', 'mar.', @@ -8262,7 +8221,7 @@ const Map dateSymbols = { 'nóv.', 'des.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan.', 'feb.', 'mar.', @@ -8276,7 +8235,7 @@ const Map dateSymbols = { 'nóv.', 'des.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'sunnudagur', 'mánudagur', 'þriðjudagur', @@ -8285,7 +8244,7 @@ const Map dateSymbols = { 'föstudagur', 'laugardagur', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'sunnudagur', 'mánudagur', 'þriðjudagur', @@ -8294,7 +8253,7 @@ const Map dateSymbols = { 'föstudagur', 'laugardagur', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'sun.', 'mán.', 'þri.', @@ -8303,7 +8262,7 @@ const Map dateSymbols = { 'fös.', 'lau.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'sun.', 'mán.', 'þri.', @@ -8312,7 +8271,7 @@ const Map dateSymbols = { 'fös.', 'lau.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'Þ', @@ -8321,7 +8280,7 @@ const Map dateSymbols = { 'F', 'L', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'Þ', @@ -8330,59 +8289,58 @@ const Map dateSymbols = { 'F', 'L', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'F1', 'F2', 'F3', 'F4', ], - 'QUARTERS': [ + QUARTERS: const [ '1. fjórðungur', '2. fjórðungur', '3. fjórðungur', '4. fjórðungur', ], - 'AMPMS': [ + AMPMS: const [ 'f.h.', 'e.h.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d. MMMM y', 'd. MMMM y', 'd. MMM y', 'd.M.y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{1} 'kl'. {0}", "{1} 'kl'. {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'it': { - 'NAME': 'it', - 'ERAS': [ + ), + 'it': intl.DateSymbols( + NAME: 'it', + ERAS: const [ 'a.C.', 'd.C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'avanti Cristo', 'dopo Cristo', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'G', 'F', 'M', @@ -8396,7 +8354,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'G', 'F', 'M', @@ -8410,7 +8368,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'gennaio', 'febbraio', 'marzo', @@ -8424,7 +8382,7 @@ const Map dateSymbols = { 'novembre', 'dicembre', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'gennaio', 'febbraio', 'marzo', @@ -8438,7 +8396,7 @@ const Map dateSymbols = { 'novembre', 'dicembre', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'gen', 'feb', 'mar', @@ -8452,7 +8410,7 @@ const Map dateSymbols = { 'nov', 'dic', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'gen', 'feb', 'mar', @@ -8466,7 +8424,7 @@ const Map dateSymbols = { 'nov', 'dic', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'domenica', 'lunedì', 'martedì', @@ -8475,7 +8433,7 @@ const Map dateSymbols = { 'venerdì', 'sabato', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'domenica', 'lunedì', 'martedì', @@ -8484,7 +8442,7 @@ const Map dateSymbols = { 'venerdì', 'sabato', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dom', 'lun', 'mar', @@ -8493,7 +8451,7 @@ const Map dateSymbols = { 'ven', 'sab', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'dom', 'lun', 'mar', @@ -8502,7 +8460,7 @@ const Map dateSymbols = { 'ven', 'sab', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -8511,7 +8469,7 @@ const Map dateSymbols = { 'V', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -8520,59 +8478,58 @@ const Map dateSymbols = { 'V', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'T1', 'T2', 'T3', 'T4', ], - 'QUARTERS': [ + QUARTERS: const [ '1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d MMMM y', 'd MMMM y', 'd MMM y', 'dd/MM/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'ja': { - 'NAME': 'ja', - 'ERAS': [ + ), + 'ja': intl.DateSymbols( + NAME: 'ja', + ERAS: const [ '紀元前', '西暦', ], - 'ERANAMES': [ + ERANAMES: const [ '紀元前', '西暦', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1', '2', '3', @@ -8586,7 +8543,7 @@ const Map dateSymbols = { '11', '12', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1', '2', '3', @@ -8600,7 +8557,7 @@ const Map dateSymbols = { '11', '12', ], - 'MONTHS': [ + MONTHS: const [ '1月', '2月', '3月', @@ -8614,7 +8571,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ '1月', '2月', '3月', @@ -8628,7 +8585,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ '1月', '2月', '3月', @@ -8642,7 +8599,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ '1月', '2月', '3月', @@ -8656,7 +8613,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ '日曜日', '月曜日', '火曜日', @@ -8665,7 +8622,7 @@ const Map dateSymbols = { '金曜日', '土曜日', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ '日曜日', '月曜日', '火曜日', @@ -8674,7 +8631,7 @@ const Map dateSymbols = { '金曜日', '土曜日', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ '日', '月', '火', @@ -8683,7 +8640,7 @@ const Map dateSymbols = { '金', '土', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ '日', '月', '火', @@ -8692,7 +8649,7 @@ const Map dateSymbols = { '金', '土', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ '日', '月', '火', @@ -8701,7 +8658,7 @@ const Map dateSymbols = { '金', '土', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ '日', '月', '火', @@ -8710,59 +8667,58 @@ const Map dateSymbols = { '金', '土', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '第1四半期', '第2四半期', '第3四半期', '第4四半期', ], - 'AMPMS': [ + AMPMS: const [ '午前', '午後', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y年M月d日EEEE', 'y年M月d日', 'y/MM/dd', 'y/MM/dd', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H時mm分ss秒 zzzz', 'H:mm:ss z', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'ka': { - 'NAME': 'ka', - 'ERAS': [ + ), + 'ka': intl.DateSymbols( + NAME: 'ka', + ERAS: const [ 'ძვ. წ.', 'ახ. წ.', ], - 'ERANAMES': [ + ERANAMES: const [ 'ძველი წელთაღრიცხვით', 'ახალი წელთაღრიცხვით', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ი', 'თ', 'მ', @@ -8776,7 +8732,7 @@ const Map dateSymbols = { 'ნ', 'დ', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ი', 'თ', 'მ', @@ -8790,7 +8746,7 @@ const Map dateSymbols = { 'ნ', 'დ', ], - 'MONTHS': [ + MONTHS: const [ 'იანვარი', 'თებერვალი', 'მარტი', @@ -8804,7 +8760,7 @@ const Map dateSymbols = { 'ნოემბერი', 'დეკემბერი', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'იანვარი', 'თებერვალი', 'მარტი', @@ -8818,7 +8774,7 @@ const Map dateSymbols = { 'ნოემბერი', 'დეკემბერი', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'იან', 'თებ', 'მარ', @@ -8832,7 +8788,7 @@ const Map dateSymbols = { 'ნოე', 'დეკ', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'იან', 'თებ', 'მარ', @@ -8846,7 +8802,7 @@ const Map dateSymbols = { 'ნოე', 'დეკ', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'კვირა', 'ორშაბათი', 'სამშაბათი', @@ -8855,7 +8811,7 @@ const Map dateSymbols = { 'პარასკევი', 'შაბათი', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'კვირა', 'ორშაბათი', 'სამშაბათი', @@ -8864,7 +8820,7 @@ const Map dateSymbols = { 'პარასკევი', 'შაბათი', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'კვი', 'ორშ', 'სამ', @@ -8873,7 +8829,7 @@ const Map dateSymbols = { 'პარ', 'შაბ', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'კვი', 'ორშ', 'სამ', @@ -8882,7 +8838,7 @@ const Map dateSymbols = { 'პარ', 'შაბ', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'კ', 'ო', 'ს', @@ -8891,7 +8847,7 @@ const Map dateSymbols = { 'პ', 'შ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'კ', 'ო', 'ს', @@ -8900,59 +8856,58 @@ const Map dateSymbols = { 'პ', 'შ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'I კვ.', 'II კვ.', 'III კვ.', 'IV კვ.', ], - 'QUARTERS': [ + QUARTERS: const [ 'I კვარტალი', 'II კვარტალი', 'III კვარტალი', 'IV კვარტალი', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, dd MMMM, y', 'd MMMM, y', 'd MMM. y', 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'kk': { - 'NAME': 'kk', - 'ERAS': [ + ), + 'kk': intl.DateSymbols( + NAME: 'kk', + ERAS: const [ 'б.з.д.', 'б.з.', ], - 'ERANAMES': [ + ERANAMES: const [ 'Біздің заманымызға дейін', 'біздің заманымыз', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'Қ', 'А', 'Н', @@ -8966,7 +8921,7 @@ const Map dateSymbols = { 'Қ', 'Ж', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'Қ', 'А', 'Н', @@ -8980,7 +8935,7 @@ const Map dateSymbols = { 'Қ', 'Ж', ], - 'MONTHS': [ + MONTHS: const [ 'қаңтар', 'ақпан', 'наурыз', @@ -8994,7 +8949,7 @@ const Map dateSymbols = { 'қараша', 'желтоқсан', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Қаңтар', 'Ақпан', 'Наурыз', @@ -9008,7 +8963,7 @@ const Map dateSymbols = { 'Қараша', 'Желтоқсан', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'қаң.', 'ақп.', 'нау.', @@ -9022,7 +8977,7 @@ const Map dateSymbols = { 'қар.', 'жел.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'қаң.', 'ақп.', 'нау.', @@ -9036,7 +8991,7 @@ const Map dateSymbols = { 'қар.', 'жел.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'жексенбі', 'дүйсенбі', 'сейсенбі', @@ -9045,7 +9000,7 @@ const Map dateSymbols = { 'жұма', 'сенбі', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'жексенбі', 'дүйсенбі', 'сейсенбі', @@ -9054,7 +9009,7 @@ const Map dateSymbols = { 'жұма', 'сенбі', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'жс', 'дс', 'сс', @@ -9063,7 +9018,7 @@ const Map dateSymbols = { 'жм', 'сб', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'жс', 'дс', 'сс', @@ -9072,7 +9027,7 @@ const Map dateSymbols = { 'жм', 'сб', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Ж', 'Д', 'С', @@ -9081,7 +9036,7 @@ const Map dateSymbols = { 'Ж', 'С', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Ж', 'Д', 'С', @@ -9090,59 +9045,58 @@ const Map dateSymbols = { 'Ж', 'С', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'І тқс.', 'ІІ тқс.', 'ІІІ тқс.', 'IV тқс.', ], - 'QUARTERS': [ + QUARTERS: const [ 'І тоқсан', 'ІІ тоқсан', 'ІІІ тоқсан', 'IV тоқсан', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "y 'ж'. d MMMM, EEEE", "y 'ж'. d MMMM", "y 'ж'. dd MMM", 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'km': { - 'NAME': 'km', - 'ERAS': [ + ), + 'km': intl.DateSymbols( + NAME: 'km', + ERAS: const [ 'មុន គ.ស.', 'គ.ស.', ], - 'ERANAMES': [ + ERANAMES: const [ 'មុន​គ្រិស្តសករាជ', 'គ្រិស្តសករាជ', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ម', 'ក', 'ម', @@ -9156,7 +9110,7 @@ const Map dateSymbols = { 'វ', 'ធ', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ម', 'ក', 'ម', @@ -9170,7 +9124,7 @@ const Map dateSymbols = { 'វ', 'ធ', ], - 'MONTHS': [ + MONTHS: const [ 'មករា', 'កុម្ភៈ', 'មីនា', @@ -9184,7 +9138,7 @@ const Map dateSymbols = { 'វិច្ឆិកា', 'ធ្នូ', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'មករា', 'កុម្ភៈ', 'មីនា', @@ -9198,7 +9152,7 @@ const Map dateSymbols = { 'វិច្ឆិកា', 'ធ្នូ', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'មករា', 'កុម្ភៈ', 'មីនា', @@ -9212,7 +9166,7 @@ const Map dateSymbols = { 'វិច្ឆិកា', 'ធ្នូ', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'មករា', 'កុម្ភៈ', 'មីនា', @@ -9226,7 +9180,7 @@ const Map dateSymbols = { 'វិច្ឆិកា', 'ធ្នូ', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'អាទិត្យ', 'ច័ន្ទ', 'អង្គារ', @@ -9235,7 +9189,7 @@ const Map dateSymbols = { 'សុក្រ', 'សៅរ៍', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'អាទិត្យ', 'ចន្ទ', 'អង្គារ', @@ -9244,7 +9198,7 @@ const Map dateSymbols = { 'សុក្រ', 'សៅរ៍', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'អាទិត្យ', 'ចន្ទ', 'អង្គារ', @@ -9253,7 +9207,7 @@ const Map dateSymbols = { 'សុក្រ', 'សៅរ៍', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'អាទិត្យ', 'ចន្ទ', 'អង្គារ', @@ -9262,7 +9216,7 @@ const Map dateSymbols = { 'សុក្រ', 'សៅរ៍', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'អ', 'ច', 'អ', @@ -9271,7 +9225,7 @@ const Map dateSymbols = { 'ស', 'ស', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'អ', 'ច', 'អ', @@ -9280,59 +9234,58 @@ const Map dateSymbols = { 'ស', 'ស', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'ត្រីមាសទី 1', 'ត្រីមាសទី 2', 'ត្រីមាសទី 3', 'ត្រីមាសទី 4', ], - 'QUARTERS': [ + QUARTERS: const [ 'ត្រីមាសទី 1', 'ត្រីមាសទី 2', 'ត្រីមាសទី 3', 'ត្រីមាសទី 4', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d MMMM y', 'd MMMM y', 'd MMM y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} នៅ​ម៉ោង {0}', '{1} នៅ​ម៉ោង {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'kn': { - 'NAME': 'kn', - 'ERAS': [ + ), + 'kn': intl.DateSymbols( + NAME: 'kn', + ERAS: const [ '\u{c95}\u{ccd}\u{cb0}\u{cbf}\u{2e}\u{caa}\u{cc2}', '\u{c95}\u{ccd}\u{cb0}\u{cbf}\u{2e}\u{cb6}', ], - 'ERANAMES': [ + ERANAMES: const [ '\u{c95}\u{ccd}\u{cb0}\u{cbf}\u{cb8}\u{ccd}\u{ca4}\u{20}\u{caa}\u{cc2}\u{cb0}\u{ccd}\u{cb5}', '\u{c95}\u{ccd}\u{cb0}\u{cbf}\u{cb8}\u{ccd}\u{ca4}\u{20}\u{cb6}\u{c95}', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '\u{c9c}', '\u{cab}\u{cc6}', '\u{cae}\u{cbe}', @@ -9346,7 +9299,7 @@ const Map dateSymbols = { '\u{ca8}', '\u{ca1}\u{cbf}', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '\u{c9c}', '\u{cab}\u{cc6}', '\u{cae}\u{cbe}', @@ -9360,7 +9313,7 @@ const Map dateSymbols = { '\u{ca8}', '\u{ca1}\u{cbf}', ], - 'MONTHS': [ + MONTHS: const [ '\u{c9c}\u{ca8}\u{cb5}\u{cb0}\u{cbf}', '\u{cab}\u{cc6}\u{cac}\u{ccd}\u{cb0}\u{cb5}\u{cb0}\u{cbf}', '\u{cae}\u{cbe}\u{cb0}\u{ccd}\u{c9a}\u{ccd}', @@ -9374,7 +9327,7 @@ const Map dateSymbols = { '\u{ca8}\u{cb5}\u{cc6}\u{c82}\u{cac}\u{cb0}\u{ccd}', '\u{ca1}\u{cbf}\u{cb8}\u{cc6}\u{c82}\u{cac}\u{cb0}\u{ccd}', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ '\u{c9c}\u{ca8}\u{cb5}\u{cb0}\u{cbf}', '\u{cab}\u{cc6}\u{cac}\u{ccd}\u{cb0}\u{cb5}\u{cb0}\u{cbf}', '\u{cae}\u{cbe}\u{cb0}\u{ccd}\u{c9a}\u{ccd}', @@ -9388,7 +9341,7 @@ const Map dateSymbols = { '\u{ca8}\u{cb5}\u{cc6}\u{c82}\u{cac}\u{cb0}\u{ccd}', '\u{ca1}\u{cbf}\u{cb8}\u{cc6}\u{c82}\u{cac}\u{cb0}\u{ccd}', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ '\u{c9c}\u{ca8}\u{cb5}\u{cb0}\u{cbf}', '\u{cab}\u{cc6}\u{cac}\u{ccd}\u{cb0}\u{cb5}\u{cb0}\u{cbf}', '\u{cae}\u{cbe}\u{cb0}\u{ccd}\u{c9a}\u{ccd}', @@ -9402,7 +9355,7 @@ const Map dateSymbols = { '\u{ca8}\u{cb5}\u{cc6}\u{c82}', '\u{ca1}\u{cbf}\u{cb8}\u{cc6}\u{c82}', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ '\u{c9c}\u{ca8}', '\u{cab}\u{cc6}\u{cac}\u{ccd}\u{cb0}', '\u{cae}\u{cbe}\u{cb0}\u{ccd}\u{c9a}\u{ccd}', @@ -9416,7 +9369,7 @@ const Map dateSymbols = { '\u{ca8}\u{cb5}\u{cc6}\u{c82}', '\u{ca1}\u{cbf}\u{cb8}\u{cc6}\u{c82}', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ '\u{cad}\u{cbe}\u{ca8}\u{cc1}\u{cb5}\u{cbe}\u{cb0}', '\u{cb8}\u{ccb}\u{cae}\u{cb5}\u{cbe}\u{cb0}', '\u{cae}\u{c82}\u{c97}\u{cb3}\u{cb5}\u{cbe}\u{cb0}', @@ -9425,7 +9378,7 @@ const Map dateSymbols = { '\u{cb6}\u{cc1}\u{c95}\u{ccd}\u{cb0}\u{cb5}\u{cbe}\u{cb0}', '\u{cb6}\u{ca8}\u{cbf}\u{cb5}\u{cbe}\u{cb0}', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ '\u{cad}\u{cbe}\u{ca8}\u{cc1}\u{cb5}\u{cbe}\u{cb0}', '\u{cb8}\u{ccb}\u{cae}\u{cb5}\u{cbe}\u{cb0}', '\u{cae}\u{c82}\u{c97}\u{cb3}\u{cb5}\u{cbe}\u{cb0}', @@ -9434,7 +9387,7 @@ const Map dateSymbols = { '\u{cb6}\u{cc1}\u{c95}\u{ccd}\u{cb0}\u{cb5}\u{cbe}\u{cb0}', '\u{cb6}\u{ca8}\u{cbf}\u{cb5}\u{cbe}\u{cb0}', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ '\u{cad}\u{cbe}\u{ca8}\u{cc1}', '\u{cb8}\u{ccb}\u{cae}', '\u{cae}\u{c82}\u{c97}\u{cb3}', @@ -9443,7 +9396,7 @@ const Map dateSymbols = { '\u{cb6}\u{cc1}\u{c95}\u{ccd}\u{cb0}', '\u{cb6}\u{ca8}\u{cbf}', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ '\u{cad}\u{cbe}\u{ca8}\u{cc1}', '\u{cb8}\u{ccb}\u{cae}', '\u{cae}\u{c82}\u{c97}\u{cb3}', @@ -9452,7 +9405,7 @@ const Map dateSymbols = { '\u{cb6}\u{cc1}\u{c95}\u{ccd}\u{cb0}', '\u{cb6}\u{ca8}\u{cbf}', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ '\u{cad}\u{cbe}', '\u{cb8}\u{ccb}', '\u{cae}\u{c82}', @@ -9461,7 +9414,7 @@ const Map dateSymbols = { '\u{cb6}\u{cc1}', '\u{cb6}', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ '\u{cad}\u{cbe}', '\u{cb8}\u{ccb}', '\u{cae}\u{c82}', @@ -9470,59 +9423,58 @@ const Map dateSymbols = { '\u{cb6}\u{cc1}', '\u{cb6}', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '\u{ca4}\u{ccd}\u{cb0}\u{cc8}\u{20}\u{31}', '\u{ca4}\u{ccd}\u{cb0}\u{cc8}\u{20}\u{32}', '\u{ca4}\u{ccd}\u{cb0}\u{cc8}\u{20}\u{33}', '\u{ca4}\u{ccd}\u{cb0}\u{cc8}\u{20}\u{34}', ], - 'QUARTERS': [ + QUARTERS: const [ '\u{31}\u{ca8}\u{cc7}\u{20}\u{ca4}\u{ccd}\u{cb0}\u{cc8}\u{cae}\u{cbe}\u{cb8}\u{cbf}\u{c95}', '\u{32}\u{ca8}\u{cc7}\u{20}\u{ca4}\u{ccd}\u{cb0}\u{cc8}\u{cae}\u{cbe}\u{cb8}\u{cbf}\u{c95}', '\u{33}\u{ca8}\u{cc7}\u{20}\u{ca4}\u{ccd}\u{cb0}\u{cc8}\u{cae}\u{cbe}\u{cb8}\u{cbf}\u{c95}', '\u{34}\u{ca8}\u{cc7}\u{20}\u{ca4}\u{ccd}\u{cb0}\u{cc8}\u{cae}\u{cbe}\u{cb8}\u{cbf}\u{c95}', ], - 'AMPMS': [ + AMPMS: const [ '\u{caa}\u{cc2}\u{cb0}\u{ccd}\u{cb5}\u{cbe}\u{cb9}\u{ccd}\u{ca8}', '\u{c85}\u{caa}\u{cb0}\u{cbe}\u{cb9}\u{ccd}\u{ca8}', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, MMMM d, y', 'MMMM d, y', 'MMM d, y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'hh:mm:ss a zzzz', 'hh:mm:ss a z', 'hh:mm:ss a', 'hh:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 6, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'ko': { - 'NAME': 'ko', - 'ERAS': [ + ), + 'ko': intl.DateSymbols( + NAME: 'ko', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ '기원전', '서기', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1월', '2월', '3월', @@ -9536,7 +9488,7 @@ const Map dateSymbols = { '11월', '12월', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1월', '2월', '3월', @@ -9550,7 +9502,7 @@ const Map dateSymbols = { '11월', '12월', ], - 'MONTHS': [ + MONTHS: const [ '1월', '2월', '3월', @@ -9564,7 +9516,7 @@ const Map dateSymbols = { '11월', '12월', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ '1월', '2월', '3월', @@ -9578,7 +9530,7 @@ const Map dateSymbols = { '11월', '12월', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ '1월', '2월', '3월', @@ -9592,7 +9544,7 @@ const Map dateSymbols = { '11월', '12월', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ '1월', '2월', '3월', @@ -9606,7 +9558,7 @@ const Map dateSymbols = { '11월', '12월', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ '일요일', '월요일', '화요일', @@ -9615,7 +9567,7 @@ const Map dateSymbols = { '금요일', '토요일', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ '일요일', '월요일', '화요일', @@ -9624,7 +9576,7 @@ const Map dateSymbols = { '금요일', '토요일', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ '일', '월', '화', @@ -9633,7 +9585,7 @@ const Map dateSymbols = { '금', '토', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ '일', '월', '화', @@ -9642,7 +9594,7 @@ const Map dateSymbols = { '금', '토', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ '일', '월', '화', @@ -9651,7 +9603,7 @@ const Map dateSymbols = { '금', '토', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ '일', '월', '화', @@ -9660,59 +9612,58 @@ const Map dateSymbols = { '금', '토', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1분기', '2분기', '3분기', '4분기', ], - 'QUARTERS': [ + QUARTERS: const [ '제 1/4분기', '제 2/4분기', '제 3/4분기', '제 4/4분기', ], - 'AMPMS': [ + AMPMS: const [ '오전', '오후', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y년 M월 d일 EEEE', 'y년 M월 d일', 'y. M. d.', 'yy. M. d.', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'a h시 m분 s초 zzzz', 'a h시 m분 s초 z', 'a h:mm:ss', 'a h:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'ky': { - 'NAME': 'ky', - 'ERAS': [ + ), + 'ky': intl.DateSymbols( + NAME: 'ky', + ERAS: const [ 'б.з.ч.', 'б.з.', ], - 'ERANAMES': [ + ERANAMES: const [ 'биздин заманга чейин', 'биздин заман', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'Я', 'Ф', 'М', @@ -9726,7 +9677,7 @@ const Map dateSymbols = { 'Н', 'Д', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'Я', 'Ф', 'М', @@ -9740,7 +9691,7 @@ const Map dateSymbols = { 'Н', 'Д', ], - 'MONTHS': [ + MONTHS: const [ 'январь', 'февраль', 'март', @@ -9754,7 +9705,7 @@ const Map dateSymbols = { 'ноябрь', 'декабрь', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Январь', 'Февраль', 'Март', @@ -9768,7 +9719,7 @@ const Map dateSymbols = { 'Ноябрь', 'Декабрь', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'янв.', 'фев.', 'мар.', @@ -9782,7 +9733,7 @@ const Map dateSymbols = { 'ноя.', 'дек.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Янв', 'Фев', 'Мар', @@ -9796,7 +9747,7 @@ const Map dateSymbols = { 'Ноя', 'Дек', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'жекшемби', 'дүйшөмбү', 'шейшемби', @@ -9805,7 +9756,7 @@ const Map dateSymbols = { 'жума', 'ишемби', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'жекшемби', 'дүйшөмбү', 'шейшемби', @@ -9814,7 +9765,7 @@ const Map dateSymbols = { 'жума', 'ишемби', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'жек.', 'дүй.', 'шейш.', @@ -9823,7 +9774,7 @@ const Map dateSymbols = { 'жума', 'ишм.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'жек.', 'дүй.', 'шейш.', @@ -9832,7 +9783,7 @@ const Map dateSymbols = { 'жума', 'ишм.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Ж', 'Д', 'Ш', @@ -9841,7 +9792,7 @@ const Map dateSymbols = { 'Ж', 'И', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Ж', 'Д', 'Ш', @@ -9850,59 +9801,58 @@ const Map dateSymbols = { 'Ж', 'И', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1-чей.', '2-чей.', '3-чей.', '4-чей.', ], - 'QUARTERS': [ + QUARTERS: const [ '1-чейрек', '2-чейрек', '3-чейрек', '4-чейрек', ], - 'AMPMS': [ + AMPMS: const [ 'таңкы', 'түштөн кийинки', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "y-'ж'., d-MMMM, EEEE", "y-'ж'., d-MMMM", "y-'ж'., d-MMM", 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'lo': { - 'NAME': 'lo', - 'ERAS': [ + ), + 'lo': intl.DateSymbols( + NAME: 'lo', + ERAS: const [ 'ກ່ອນ ຄ.ສ.', 'ຄ.ສ.', ], - 'ERANAMES': [ + ERANAMES: const [ 'ກ່ອນຄຣິດສັກກະລາດ', 'ຄຣິດສັກກະລາດ', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1', '2', '3', @@ -9916,7 +9866,7 @@ const Map dateSymbols = { '11', '12', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1', '2', '3', @@ -9930,7 +9880,7 @@ const Map dateSymbols = { '11', '12', ], - 'MONTHS': [ + MONTHS: const [ 'ມັງກອນ', 'ກຸມພາ', 'ມີນາ', @@ -9944,7 +9894,7 @@ const Map dateSymbols = { 'ພະຈິກ', 'ທັນວາ', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ມັງກອນ', 'ກຸມພາ', 'ມີນາ', @@ -9958,7 +9908,7 @@ const Map dateSymbols = { 'ພະຈິກ', 'ທັນວາ', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ມ.ກ.', 'ກ.ພ.', 'ມ.ນ.', @@ -9972,7 +9922,7 @@ const Map dateSymbols = { 'ພ.ຈ.', 'ທ.ວ.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ມ.ກ.', 'ກ.ພ.', 'ມ.ນ.', @@ -9986,7 +9936,7 @@ const Map dateSymbols = { 'ພ.ຈ.', 'ທ.ວ.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'ວັນອາທິດ', 'ວັນຈັນ', 'ວັນອັງຄານ', @@ -9995,7 +9945,7 @@ const Map dateSymbols = { 'ວັນສຸກ', 'ວັນເສົາ', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'ວັນອາທິດ', 'ວັນຈັນ', 'ວັນອັງຄານ', @@ -10004,7 +9954,7 @@ const Map dateSymbols = { 'ວັນສຸກ', 'ວັນເສົາ', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ອາທິດ', 'ຈັນ', 'ອັງຄານ', @@ -10013,7 +9963,7 @@ const Map dateSymbols = { 'ສຸກ', 'ເສົາ', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ອາທິດ', 'ຈັນ', 'ອັງຄານ', @@ -10022,7 +9972,7 @@ const Map dateSymbols = { 'ສຸກ', 'ເສົາ', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'ອາ', 'ຈ', 'ອ', @@ -10031,7 +9981,7 @@ const Map dateSymbols = { 'ສຸ', 'ສ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'ອາ', 'ຈ', 'ອ', @@ -10040,59 +9990,58 @@ const Map dateSymbols = { 'ສຸ', 'ສ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'ຕມ1', 'ຕມ2', 'ຕມ3', 'ຕມ4', ], - 'QUARTERS': [ + QUARTERS: const [ 'ໄຕຣມາດ 1', 'ໄຕຣມາດ 2', 'ໄຕຣມາດ 3', 'ໄຕຣມາດ 4', ], - 'AMPMS': [ + AMPMS: const [ 'ກ່ອນທ່ຽງ', 'ຫຼັງທ່ຽງ', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE ທີ d MMMM G y', 'd MMMM y', 'd MMM y', 'd/M/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H ໂມງ m ນາທີ ss ວິນາທີ zzzz', 'H ໂມງ m ນາທີ ss ວິນາທີ z', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'lt': { - 'NAME': 'lt', - 'ERAS': [ + ), + 'lt': intl.DateSymbols( + NAME: 'lt', + ERAS: const [ 'pr. Kr.', 'po Kr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'prieš Kristų', 'po Kristaus', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'S', 'V', 'K', @@ -10106,7 +10055,7 @@ const Map dateSymbols = { 'L', 'G', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'S', 'V', 'K', @@ -10120,7 +10069,7 @@ const Map dateSymbols = { 'L', 'G', ], - 'MONTHS': [ + MONTHS: const [ 'sausio', 'vasario', 'kovo', @@ -10134,7 +10083,7 @@ const Map dateSymbols = { 'lapkričio', 'gruodžio', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'sausis', 'vasaris', 'kovas', @@ -10148,7 +10097,7 @@ const Map dateSymbols = { 'lapkritis', 'gruodis', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'saus.', 'vas.', 'kov.', @@ -10162,7 +10111,7 @@ const Map dateSymbols = { 'lapkr.', 'gruod.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'saus.', 'vas.', 'kov.', @@ -10176,7 +10125,7 @@ const Map dateSymbols = { 'lapkr.', 'gruod.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'sekmadienis', 'pirmadienis', 'antradienis', @@ -10185,7 +10134,7 @@ const Map dateSymbols = { 'penktadienis', 'šeštadienis', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'sekmadienis', 'pirmadienis', 'antradienis', @@ -10194,7 +10143,7 @@ const Map dateSymbols = { 'penktadienis', 'šeštadienis', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'sk', 'pr', 'an', @@ -10203,7 +10152,7 @@ const Map dateSymbols = { 'pn', 'št', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'sk', 'pr', 'an', @@ -10212,7 +10161,7 @@ const Map dateSymbols = { 'pn', 'št', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'P', 'A', @@ -10221,7 +10170,7 @@ const Map dateSymbols = { 'P', 'Š', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'P', 'A', @@ -10230,59 +10179,58 @@ const Map dateSymbols = { 'P', 'Š', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'I k.', 'II k.', 'III k.', 'IV k.', ], - 'QUARTERS': [ + QUARTERS: const [ 'I ketvirtis', 'II ketvirtis', 'III ketvirtis', 'IV ketvirtis', ], - 'AMPMS': [ + AMPMS: const [ 'priešpiet', 'popiet', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "y 'm'. MMMM d 'd'., EEEE", "y 'm'. MMMM d 'd'.", 'y-MM-dd', 'y-MM-dd', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'lv': { - 'NAME': 'lv', - 'ERAS': [ + ), + 'lv': intl.DateSymbols( + NAME: 'lv', + ERAS: const [ 'p.m.ē.', 'm.ē.', ], - 'ERANAMES': [ + ERANAMES: const [ 'pirms mūsu ēras', 'mūsu ērā', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -10296,7 +10244,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -10310,7 +10258,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'janvāris', 'februāris', 'marts', @@ -10324,7 +10272,7 @@ const Map dateSymbols = { 'novembris', 'decembris', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'janvāris', 'februāris', 'marts', @@ -10338,7 +10286,7 @@ const Map dateSymbols = { 'novembris', 'decembris', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'janv.', 'febr.', 'marts', @@ -10352,7 +10300,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'janv.', 'febr.', 'marts', @@ -10366,7 +10314,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'svētdiena', 'pirmdiena', 'otrdiena', @@ -10375,7 +10323,7 @@ const Map dateSymbols = { 'piektdiena', 'sestdiena', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Svētdiena', 'Pirmdiena', 'Otrdiena', @@ -10384,7 +10332,7 @@ const Map dateSymbols = { 'Piektdiena', 'Sestdiena', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'svētd.', 'pirmd.', 'otrd.', @@ -10393,7 +10341,7 @@ const Map dateSymbols = { 'piektd.', 'sestd.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Svētd.', 'Pirmd.', 'Otrd.', @@ -10402,7 +10350,7 @@ const Map dateSymbols = { 'Piektd.', 'Sestd.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'P', 'O', @@ -10411,7 +10359,7 @@ const Map dateSymbols = { 'P', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'P', 'O', @@ -10420,59 +10368,58 @@ const Map dateSymbols = { 'P', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1. cet.', '2. cet.', '3. cet.', '4. cet.', ], - 'QUARTERS': [ + QUARTERS: const [ '1. ceturksnis', '2. ceturksnis', '3. ceturksnis', '4. ceturksnis', ], - 'AMPMS': [ + AMPMS: const [ 'priekšpusdienā', 'pēcpusdienā', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, y. 'gada' d. MMMM", "y. 'gada' d. MMMM", "y. 'gada' d. MMM", 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'mk': { - 'NAME': 'mk', - 'ERAS': [ + ), + 'mk': intl.DateSymbols( + NAME: 'mk', + ERAS: const [ 'пр.н.е.', 'н.е.', ], - 'ERANAMES': [ + ERANAMES: const [ 'пред нашата ера', 'од нашата ера', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ј', 'ф', 'м', @@ -10486,7 +10433,7 @@ const Map dateSymbols = { 'н', 'д', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ј', 'ф', 'м', @@ -10500,7 +10447,7 @@ const Map dateSymbols = { 'н', 'д', ], - 'MONTHS': [ + MONTHS: const [ 'јануари', 'февруари', 'март', @@ -10514,7 +10461,7 @@ const Map dateSymbols = { 'ноември', 'декември', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'јануари', 'февруари', 'март', @@ -10528,7 +10475,7 @@ const Map dateSymbols = { 'ноември', 'декември', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'јан.', 'фев.', 'мар.', @@ -10542,7 +10489,7 @@ const Map dateSymbols = { 'ноем.', 'дек.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'јан.', 'фев.', 'мар.', @@ -10556,7 +10503,7 @@ const Map dateSymbols = { 'ноем.', 'дек.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'недела', 'понеделник', 'вторник', @@ -10565,7 +10512,7 @@ const Map dateSymbols = { 'петок', 'сабота', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'недела', 'понеделник', 'вторник', @@ -10574,7 +10521,7 @@ const Map dateSymbols = { 'петок', 'сабота', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'нед.', 'пон.', 'вт.', @@ -10583,7 +10530,7 @@ const Map dateSymbols = { 'пет.', 'саб.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'нед.', 'пон.', 'вто.', @@ -10592,7 +10539,7 @@ const Map dateSymbols = { 'пет.', 'саб.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'н', 'п', 'в', @@ -10601,7 +10548,7 @@ const Map dateSymbols = { 'п', 'с', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'н', 'п', 'в', @@ -10610,59 +10557,58 @@ const Map dateSymbols = { 'п', 'с', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'јан-мар', 'апр-јун', 'јул-сеп', 'окт-дек', ], - 'QUARTERS': [ + QUARTERS: const [ 'прво тромесечје', 'второ тромесечје', 'трето тромесечје', 'четврто тромесечје', ], - 'AMPMS': [ + AMPMS: const [ 'претпладне', 'попладне', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, dd MMMM y', 'dd MMMM y', 'dd.M.y', 'dd.M.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'ml': { - 'NAME': 'ml', - 'ERAS': [ + ), + 'ml': intl.DateSymbols( + NAME: 'ml', + ERAS: const [ 'ക്രി.മു.', 'എഡി', ], - 'ERANAMES': [ + ERANAMES: const [ 'ക്രിസ്‌തുവിന് മുമ്പ്', 'ആന്നോ ഡൊമിനി', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ജ', 'ഫെ', 'മാ', @@ -10676,7 +10622,7 @@ const Map dateSymbols = { 'ന', 'ഡി', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ജ', 'ഫെ', 'മാ', @@ -10690,7 +10636,7 @@ const Map dateSymbols = { 'ന', 'ഡി', ], - 'MONTHS': [ + MONTHS: const [ 'ജനുവരി', 'ഫെബ്രുവരി', 'മാർച്ച്', @@ -10704,7 +10650,7 @@ const Map dateSymbols = { 'നവംബർ', 'ഡിസംബർ', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ജനുവരി', 'ഫെബ്രുവരി', 'മാർച്ച്', @@ -10718,7 +10664,7 @@ const Map dateSymbols = { 'നവംബർ', 'ഡിസംബർ', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ജനു', 'ഫെബ്രു', 'മാർ', @@ -10732,7 +10678,7 @@ const Map dateSymbols = { 'നവം', 'ഡിസം', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ജനു', 'ഫെബ്രു', 'മാർ', @@ -10746,7 +10692,7 @@ const Map dateSymbols = { 'നവം', 'ഡിസം', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'ഞായറാഴ്‌ച', 'തിങ്കളാഴ്‌ച', 'ചൊവ്വാഴ്ച', @@ -10755,7 +10701,7 @@ const Map dateSymbols = { 'വെള്ളിയാഴ്‌ച', 'ശനിയാഴ്‌ച', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'ഞായറാഴ്‌ച', 'തിങ്കളാഴ്‌ച', 'ചൊവ്വാഴ്‌ച', @@ -10764,7 +10710,7 @@ const Map dateSymbols = { 'വെള്ളിയാഴ്‌ച', 'ശനിയാഴ്‌ച', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ഞായർ', 'തിങ്കൾ', 'ചൊവ്വ', @@ -10773,7 +10719,7 @@ const Map dateSymbols = { 'വെള്ളി', 'ശനി', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ഞായർ', 'തിങ്കൾ', 'ചൊവ്വ', @@ -10782,7 +10728,7 @@ const Map dateSymbols = { 'വെള്ളി', 'ശനി', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'ഞ', 'തി', 'ചൊ', @@ -10791,7 +10737,7 @@ const Map dateSymbols = { 'വെ', 'ശ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'ഞാ', 'തി', 'ചൊ', @@ -10800,59 +10746,58 @@ const Map dateSymbols = { 'വെ', 'ശ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'ഒന്നാം പാദം', 'രണ്ടാം പാദം', 'മൂന്നാം പാദം', 'നാലാം പാദം', ], - 'QUARTERS': [ + QUARTERS: const [ 'ഒന്നാം പാദം', 'രണ്ടാം പാദം', 'മൂന്നാം പാദം', 'നാലാം പാദം', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y, MMMM d, EEEE', 'y, MMMM d', 'y, MMM d', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 6, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'mn': { - 'NAME': 'mn', - 'ERAS': [ + ), + 'mn': intl.DateSymbols( + NAME: 'mn', + ERAS: const [ 'МЭӨ', 'МЭ', ], - 'ERANAMES': [ + ERANAMES: const [ 'манай эриний өмнөх', 'манай эриний', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'I', 'II', 'III', @@ -10866,7 +10811,7 @@ const Map dateSymbols = { 'XI', 'XII', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'I', 'II', 'III', @@ -10880,7 +10825,7 @@ const Map dateSymbols = { 'XI', 'XII', ], - 'MONTHS': [ + MONTHS: const [ 'нэгдүгээр сар', 'хоёрдугаар сар', 'гуравдугаар сар', @@ -10894,7 +10839,7 @@ const Map dateSymbols = { 'арван нэгдүгээр сар', 'арван хоёрдугаар сар', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Нэгдүгээр сар', 'Хоёрдугаар сар', 'Гуравдугаар сар', @@ -10908,7 +10853,7 @@ const Map dateSymbols = { 'Арван нэгдүгээр сар', 'Арван хоёрдугаар сар', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ '1-р сар', '2-р сар', '3-р сар', @@ -10922,7 +10867,7 @@ const Map dateSymbols = { '11-р сар', '12-р сар', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ '1-р сар', '2-р сар', '3-р сар', @@ -10936,7 +10881,7 @@ const Map dateSymbols = { '11-р сар', '12-р сар', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'ням', 'даваа', 'мягмар', @@ -10945,7 +10890,7 @@ const Map dateSymbols = { 'баасан', 'бямба', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Ням', 'Даваа', 'Мягмар', @@ -10954,7 +10899,7 @@ const Map dateSymbols = { 'Баасан', 'Бямба', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Ня', 'Да', 'Мя', @@ -10963,7 +10908,7 @@ const Map dateSymbols = { 'Ба', 'Бя', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Ня', 'Да', 'Мя', @@ -10972,7 +10917,7 @@ const Map dateSymbols = { 'Ба', 'Бя', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Ня', 'Да', 'Мя', @@ -10981,7 +10926,7 @@ const Map dateSymbols = { 'Ба', 'Бя', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Ня', 'Да', 'Мя', @@ -10990,59 +10935,58 @@ const Map dateSymbols = { 'Ба', 'Бя', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'I улирал', 'II улирал', 'III улирал', 'IV улирал', ], - 'QUARTERS': [ + QUARTERS: const [ '1-р улирал', '2-р улирал', '3-р улирал', '4-р улирал', ], - 'AMPMS': [ + AMPMS: const [ 'ү.ө.', 'ү.х.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y.MM.dd, EEEE', 'y.MM.dd', "y 'оны' MMM'ын' d", 'y.MM.dd', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss (zzzz)', 'HH:mm:ss (z)', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'mr': { - 'NAME': 'mr', - 'ERAS': [ + ), + 'mr': intl.DateSymbols( + NAME: 'mr', + ERAS: const [ 'इ. स. पू.', 'इ. स.', ], - 'ERANAMES': [ + ERANAMES: const [ 'ईसवीसनपूर्व', 'ईसवीसन', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'जा', 'फे', 'मा', @@ -11056,7 +11000,7 @@ const Map dateSymbols = { 'नो', 'डि', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'जा', 'फे', 'मा', @@ -11070,7 +11014,7 @@ const Map dateSymbols = { 'नो', 'डि', ], - 'MONTHS': [ + MONTHS: const [ 'जानेवारी', 'फेब्रुवारी', 'मार्च', @@ -11084,7 +11028,7 @@ const Map dateSymbols = { 'नोव्हेंबर', 'डिसेंबर', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'जानेवारी', 'फेब्रुवारी', 'मार्च', @@ -11098,7 +11042,7 @@ const Map dateSymbols = { 'नोव्हेंबर', 'डिसेंबर', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'जाने', 'फेब्रु', 'मार्च', @@ -11112,7 +11056,7 @@ const Map dateSymbols = { 'नोव्हें', 'डिसें', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'जाने', 'फेब्रु', 'मार्च', @@ -11126,7 +11070,7 @@ const Map dateSymbols = { 'नोव्हें', 'डिसें', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'रविवार', 'सोमवार', 'मंगळवार', @@ -11135,7 +11079,7 @@ const Map dateSymbols = { 'शुक्रवार', 'शनिवार', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'रविवार', 'सोमवार', 'मंगळवार', @@ -11144,7 +11088,7 @@ const Map dateSymbols = { 'शुक्रवार', 'शनिवार', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'रवि', 'सोम', 'मंगळ', @@ -11153,7 +11097,7 @@ const Map dateSymbols = { 'शुक्र', 'शनि', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'रवि', 'सोम', 'मंगळ', @@ -11162,7 +11106,7 @@ const Map dateSymbols = { 'शुक्र', 'शनि', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'र', 'सो', 'मं', @@ -11171,7 +11115,7 @@ const Map dateSymbols = { 'शु', 'श', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'र', 'सो', 'मं', @@ -11180,60 +11124,59 @@ const Map dateSymbols = { 'शु', 'श', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'ति१', 'ति२', 'ति३', 'ति४', ], - 'QUARTERS': [ + QUARTERS: const [ 'प्रथम तिमाही', 'द्वितीय तिमाही', 'तृतीय तिमाही', 'चतुर्थ तिमाही', ], - 'AMPMS': [ + AMPMS: const [ 'म.पू.', 'म.उ.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM, y', 'd MMMM, y', 'd MMM, y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 6, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} रोजी {0}', '{1} रोजी {0}', '{1}, {0}', '{1}, {0}', ], - 'ZERODIGIT': '०', - }, - 'ms': { - 'NAME': 'ms', - 'ERAS': [ + ZERODIGIT: '०', + ), + 'ms': intl.DateSymbols( + NAME: 'ms', + ERAS: const [ 'S.M.', 'TM', ], - 'ERANAMES': [ + ERANAMES: const [ 'S.M.', 'TM', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -11247,7 +11190,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -11261,7 +11204,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'Januari', 'Februari', 'Mac', @@ -11275,7 +11218,7 @@ const Map dateSymbols = { 'November', 'Disember', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Januari', 'Februari', 'Mac', @@ -11289,7 +11232,7 @@ const Map dateSymbols = { 'November', 'Disember', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mac', @@ -11303,7 +11246,7 @@ const Map dateSymbols = { 'Nov', 'Dis', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mac', @@ -11317,7 +11260,7 @@ const Map dateSymbols = { 'Nov', 'Dis', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Ahad', 'Isnin', 'Selasa', @@ -11326,7 +11269,7 @@ const Map dateSymbols = { 'Jumaat', 'Sabtu', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Ahad', 'Isnin', 'Selasa', @@ -11335,7 +11278,7 @@ const Map dateSymbols = { 'Jumaat', 'Sabtu', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Ahd', 'Isn', 'Sel', @@ -11344,7 +11287,7 @@ const Map dateSymbols = { 'Jum', 'Sab', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Ahd', 'Isn', 'Sel', @@ -11353,7 +11296,7 @@ const Map dateSymbols = { 'Jum', 'Sab', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'A', 'I', 'S', @@ -11362,7 +11305,7 @@ const Map dateSymbols = { 'J', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'A', 'I', 'S', @@ -11371,59 +11314,58 @@ const Map dateSymbols = { 'J', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'S1', 'S2', 'S3', 'S4', ], - 'QUARTERS': [ + QUARTERS: const [ 'Suku pertama', 'Suku Ke-2', 'Suku Ke-3', 'Suku Ke-4', ], - 'AMPMS': [ + AMPMS: const [ 'PG', 'PTG', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'd/MM/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'my': { - 'NAME': 'my', - 'ERAS': [ + ), + 'my': intl.DateSymbols( + NAME: 'my', + ERAS: const [ 'ဘီစီ', 'အဒေီ', ], - 'ERANAMES': [ + ERANAMES: const [ 'ခရစ်တော် မပေါ်မီနှစ်', 'ခရစ်နှစ်', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ဇ', 'ဖ', 'မ', @@ -11437,7 +11379,7 @@ const Map dateSymbols = { 'န', 'ဒ', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ဇ', 'ဖ', 'မ', @@ -11451,7 +11393,7 @@ const Map dateSymbols = { 'န', 'ဒ', ], - 'MONTHS': [ + MONTHS: const [ 'ဇန်နဝါရီ', 'ဖေဖော်ဝါရီ', 'မတ်', @@ -11465,7 +11407,7 @@ const Map dateSymbols = { 'နိုဝင်ဘာ', 'ဒီဇင်ဘာ', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ဇန်နဝါရီ', 'ဖေဖော်ဝါရီ', 'မတ်', @@ -11479,7 +11421,7 @@ const Map dateSymbols = { 'နိုဝင်ဘာ', 'ဒီဇင်ဘာ', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ဇန်', 'ဖေ', 'မတ်', @@ -11493,7 +11435,7 @@ const Map dateSymbols = { 'နို', 'ဒီ', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ဇန်', 'ဖေ', 'မတ်', @@ -11507,7 +11449,7 @@ const Map dateSymbols = { 'နို', 'ဒီ', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'တနင်္ဂနွေ', 'တနင်္လာ', 'အင်္ဂါ', @@ -11516,7 +11458,7 @@ const Map dateSymbols = { 'သောကြာ', 'စနေ', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'တနင်္ဂနွေ', 'တနင်္လာ', 'အင်္ဂါ', @@ -11525,7 +11467,7 @@ const Map dateSymbols = { 'သောကြာ', 'စနေ', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'တနင်္ဂနွေ', 'တနင်္လာ', 'အင်္ဂါ', @@ -11534,7 +11476,7 @@ const Map dateSymbols = { 'သောကြာ', 'စနေ', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'တနင်္ဂနွေ', 'တနင်္လာ', 'အင်္ဂါ', @@ -11543,7 +11485,7 @@ const Map dateSymbols = { 'သောကြာ', 'စနေ', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'တ', 'တ', 'အ', @@ -11552,7 +11494,7 @@ const Map dateSymbols = { 'သ', 'စ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'တ', 'တ', 'အ', @@ -11561,60 +11503,59 @@ const Map dateSymbols = { 'သ', 'စ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'ပထမ သုံးလပတ်', 'ဒုတိယ သုံးလပတ်', 'တတိယ သုံးလပတ်', 'စတုတ္ထ သုံးလပတ်', ], - 'QUARTERS': [ + QUARTERS: const [ 'ပထမ သုံးလပတ်', 'ဒုတိယ သုံးလပတ်', 'တတိယ သုံးလပတ်', 'စတုတ္ထ သုံးလပတ်', ], - 'AMPMS': [ + AMPMS: const [ 'နံနက်', 'ညနေ', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y၊ MMMM d၊ EEEE', 'y၊ d MMMM', 'y၊ MMM d', 'dd-MM-yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'zzzz HH:mm:ss', 'z HH:mm:ss', 'B HH:mm:ss', 'B H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - 'ZERODIGIT': '၀', - }, - 'nb': { - 'NAME': 'nb', - 'ERAS': [ + ZERODIGIT: '၀', + ), + 'nb': intl.DateSymbols( + NAME: 'nb', + ERAS: const [ 'f.Kr.', 'e.Kr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'før Kristus', 'etter Kristus', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -11628,7 +11569,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -11642,7 +11583,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'januar', 'februar', 'mars', @@ -11656,7 +11597,7 @@ const Map dateSymbols = { 'november', 'desember', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'januar', 'februar', 'mars', @@ -11670,7 +11611,7 @@ const Map dateSymbols = { 'november', 'desember', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan.', 'feb.', 'mar.', @@ -11684,7 +11625,7 @@ const Map dateSymbols = { 'nov.', 'des.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan', 'feb', 'mar', @@ -11698,7 +11639,7 @@ const Map dateSymbols = { 'nov', 'des', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'søndag', 'mandag', 'tirsdag', @@ -11707,7 +11648,7 @@ const Map dateSymbols = { 'fredag', 'lørdag', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'søndag', 'mandag', 'tirsdag', @@ -11716,7 +11657,7 @@ const Map dateSymbols = { 'fredag', 'lørdag', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'søn.', 'man.', 'tir.', @@ -11725,7 +11666,7 @@ const Map dateSymbols = { 'fre.', 'lør.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'søn.', 'man.', 'tir.', @@ -11734,7 +11675,7 @@ const Map dateSymbols = { 'fre.', 'lør.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -11743,7 +11684,7 @@ const Map dateSymbols = { 'F', 'L', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -11752,59 +11693,58 @@ const Map dateSymbols = { 'F', 'L', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'K1', 'K2', 'K3', 'K4', ], - 'QUARTERS': [ + QUARTERS: const [ '1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal', ], - 'AMPMS': [ + AMPMS: const [ 'a.m.', 'p.m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d. MMMM y', 'd. MMMM y', 'd. MMM y', 'dd.MM.y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', "{1} 'kl'. {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'ne': { - 'NAME': 'ne', - 'ERAS': [ + ), + 'ne': intl.DateSymbols( + NAME: 'ne', + ERAS: const [ 'ईसा पूर्व', 'सन्', ], - 'ERANAMES': [ + ERANAMES: const [ 'ईसा पूर्व', 'सन्', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'जन', 'फेब', 'मार्च', @@ -11818,7 +11758,7 @@ const Map dateSymbols = { 'नोभे', 'डिसे', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'जन', 'फेेब', 'मार्च', @@ -11832,7 +11772,7 @@ const Map dateSymbols = { 'नोभे', 'डिसे', ], - 'MONTHS': [ + MONTHS: const [ 'जनवरी', 'फेब्रुअरी', 'मार्च', @@ -11846,7 +11786,7 @@ const Map dateSymbols = { 'नोभेम्बर', 'डिसेम्बर', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'जनवरी', 'फेब्रुअरी', 'मार्च', @@ -11860,7 +11800,7 @@ const Map dateSymbols = { 'नोभेम्बर', 'डिसेम्बर', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'जनवरी', 'फेब्रुअरी', 'मार्च', @@ -11874,7 +11814,7 @@ const Map dateSymbols = { 'नोभेम्बर', 'डिसेम्बर', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'जनवरी', 'फेब्रुअरी', 'मार्च', @@ -11888,7 +11828,7 @@ const Map dateSymbols = { 'नोभेम्बर', 'डिसेम्बर', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'आइतबार', 'सोमबार', 'मङ्गलबार', @@ -11897,7 +11837,7 @@ const Map dateSymbols = { 'शुक्रबार', 'शनिबार', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'आइतबार', 'सोमबार', 'मङ्गलबार', @@ -11906,7 +11846,7 @@ const Map dateSymbols = { 'शुक्रबार', 'शनिबार', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'आइत', 'सोम', 'मङ्गल', @@ -11915,7 +11855,7 @@ const Map dateSymbols = { 'शुक्र', 'शनि', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'आइत', 'सोम', 'मङ्गल', @@ -11924,7 +11864,7 @@ const Map dateSymbols = { 'शुक्र', 'शनि', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'आ', 'सो', 'म', @@ -11933,7 +11873,7 @@ const Map dateSymbols = { 'शु', 'श', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'आ', 'सो', 'म', @@ -11942,60 +11882,59 @@ const Map dateSymbols = { 'शु', 'श', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'पहिलो सत्र', 'दोस्रो सत्र', 'तेस्रो सत्र', 'चौथो सत्र', ], - 'QUARTERS': [ + QUARTERS: const [ 'पहिलो सत्र', 'दोस्रो सत्र', 'तेस्रो सत्र', 'चौथो सत्र', ], - 'AMPMS': [ + AMPMS: const [ 'पूर्वाह्न', 'अपराह्न', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y MMMM d, EEEE', 'y MMMM d', 'y MMM d', 'yy/M/d', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1}, {0}', '{1}, {0}', ], - 'ZERODIGIT': '०', - }, - 'nl': { - 'NAME': 'nl', - 'ERAS': [ + ZERODIGIT: '०', + ), + 'nl': intl.DateSymbols( + NAME: 'nl', + ERAS: const [ 'v.Chr.', 'n.Chr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'voor Christus', 'na Christus', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -12009,7 +11948,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -12023,7 +11962,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'januari', 'februari', 'maart', @@ -12037,7 +11976,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'januari', 'februari', 'maart', @@ -12051,7 +11990,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan.', 'feb.', 'mrt.', @@ -12065,7 +12004,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan.', 'feb.', 'mrt.', @@ -12079,7 +12018,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'zondag', 'maandag', 'dinsdag', @@ -12088,7 +12027,7 @@ const Map dateSymbols = { 'vrijdag', 'zaterdag', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'zondag', 'maandag', 'dinsdag', @@ -12097,7 +12036,7 @@ const Map dateSymbols = { 'vrijdag', 'zaterdag', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'zo', 'ma', 'di', @@ -12106,7 +12045,7 @@ const Map dateSymbols = { 'vr', 'za', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'zo', 'ma', 'di', @@ -12115,7 +12054,7 @@ const Map dateSymbols = { 'vr', 'za', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Z', 'M', 'D', @@ -12124,7 +12063,7 @@ const Map dateSymbols = { 'V', 'Z', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Z', 'M', 'D', @@ -12133,59 +12072,58 @@ const Map dateSymbols = { 'V', 'Z', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'K1', 'K2', 'K3', 'K4', ], - 'QUARTERS': [ + QUARTERS: const [ '1e kwartaal', '2e kwartaal', '3e kwartaal', '4e kwartaal', ], - 'AMPMS': [ + AMPMS: const [ 'a.m.', 'p.m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d MMMM y', 'd MMMM y', 'd MMM y', 'dd-MM-y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ "{1} 'om' {0}", "{1} 'om' {0}", '{1} {0}', '{1} {0}', ], - }, - 'no': { - 'NAME': 'no', - 'ERAS': [ + ), + 'no': intl.DateSymbols( + NAME: 'no', + ERAS: const [ 'f.Kr.', 'e.Kr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'før Kristus', 'etter Kristus', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -12199,7 +12137,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -12213,7 +12151,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'januar', 'februar', 'mars', @@ -12227,7 +12165,7 @@ const Map dateSymbols = { 'november', 'desember', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'januar', 'februar', 'mars', @@ -12241,7 +12179,7 @@ const Map dateSymbols = { 'november', 'desember', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan.', 'feb.', 'mar.', @@ -12255,7 +12193,7 @@ const Map dateSymbols = { 'nov.', 'des.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan', 'feb', 'mar', @@ -12269,7 +12207,7 @@ const Map dateSymbols = { 'nov', 'des', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'søndag', 'mandag', 'tirsdag', @@ -12278,7 +12216,7 @@ const Map dateSymbols = { 'fredag', 'lørdag', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'søndag', 'mandag', 'tirsdag', @@ -12287,7 +12225,7 @@ const Map dateSymbols = { 'fredag', 'lørdag', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'søn.', 'man.', 'tir.', @@ -12296,7 +12234,7 @@ const Map dateSymbols = { 'fre.', 'lør.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'søn.', 'man.', 'tir.', @@ -12305,7 +12243,7 @@ const Map dateSymbols = { 'fre.', 'lør.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -12314,7 +12252,7 @@ const Map dateSymbols = { 'F', 'L', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -12323,59 +12261,58 @@ const Map dateSymbols = { 'F', 'L', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'K1', 'K2', 'K3', 'K4', ], - 'QUARTERS': [ + QUARTERS: const [ '1. kvartal', '2. kvartal', '3. kvartal', '4. kvartal', ], - 'AMPMS': [ + AMPMS: const [ 'a.m.', 'p.m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d. MMMM y', 'd. MMMM y', 'd. MMM y', 'dd.MM.y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', "{1} 'kl'. {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'or': { - 'NAME': 'or', - 'ERAS': [ + ), + 'or': intl.DateSymbols( + NAME: 'or', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'ଖ୍ରୀଷ୍ଟପୂର୍ବ', 'ଖ୍ରୀଷ୍ଟାବ୍ଦ', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ଜା', 'ଫେ', 'ମା', @@ -12389,7 +12326,7 @@ const Map dateSymbols = { 'ନ', 'ଡି', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ଜା', 'ଫେ', 'ମା', @@ -12403,7 +12340,7 @@ const Map dateSymbols = { 'ନ', 'ଡି', ], - 'MONTHS': [ + MONTHS: const [ 'ଜାନୁଆରୀ', 'ଫେବୃଆରୀ', 'ମାର୍ଚ୍ଚ', @@ -12417,7 +12354,7 @@ const Map dateSymbols = { 'ନଭେମ୍ବର', 'ଡିସେମ୍ବର', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ଜାନୁଆରୀ', 'ଫେବୃଆରୀ', 'ମାର୍ଚ୍ଚ', @@ -12431,7 +12368,7 @@ const Map dateSymbols = { 'ନଭେମ୍ବର', 'ଡିସେମ୍ବର', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ଜାନୁଆରୀ', 'ଫେବୃଆରୀ', 'ମାର୍ଚ୍ଚ', @@ -12445,7 +12382,7 @@ const Map dateSymbols = { 'ନଭେମ୍ବର', 'ଡିସେମ୍ବର', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ଜାନୁଆରୀ', 'ଫେବୃଆରୀ', 'ମାର୍ଚ୍ଚ', @@ -12459,7 +12396,7 @@ const Map dateSymbols = { 'ନଭେମ୍ବର', 'ଡିସେମ୍ବର', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'ରବିବାର', 'ସୋମବାର', 'ମଙ୍ଗଳବାର', @@ -12468,7 +12405,7 @@ const Map dateSymbols = { 'ଶୁକ୍ରବାର', 'ଶନିବାର', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'ରବିବାର', 'ସୋମବାର', 'ମଙ୍ଗଳବାର', @@ -12477,7 +12414,7 @@ const Map dateSymbols = { 'ଶୁକ୍ରବାର', 'ଶନିବାର', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ରବି', 'ସୋମ', 'ମଙ୍ଗଳ', @@ -12486,7 +12423,7 @@ const Map dateSymbols = { 'ଶୁକ୍ର', 'ଶନି', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ରବି', 'ସୋମ', 'ମଙ୍ଗଳ', @@ -12495,7 +12432,7 @@ const Map dateSymbols = { 'ଶୁକ୍ର', 'ଶନି', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'ର', 'ସୋ', 'ମ', @@ -12504,7 +12441,7 @@ const Map dateSymbols = { 'ଶୁ', 'ଶ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'ର', 'ସୋ', 'ମ', @@ -12513,59 +12450,58 @@ const Map dateSymbols = { 'ଶୁ', 'ଶ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1ମ ତ୍ରୟମାସ', '2ୟ ତ୍ରୟମାସ', '3ୟ ତ୍ରୟମାସ', '4ର୍ଥ ତ୍ରୟମାସ', ], - 'QUARTERS': [ + QUARTERS: const [ '1ମ ତ୍ରୟମାସ', '2ୟ ତ୍ରୟମାସ', '3ୟ ତ୍ରୟମାସ', '4ର୍ଥ ତ୍ରୟମାସ', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, MMMM d, y', 'MMMM d, y', 'MMM d, y', 'M/d/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 6, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{0} ଠାରେ {1}', '{0} ଠାରେ {1}', '{1}, {0}', '{1}, {0}', ], - }, - 'pa': { - 'NAME': 'pa', - 'ERAS': [ + ), + 'pa': intl.DateSymbols( + NAME: 'pa', + ERAS: const [ 'ਈ. ਪੂ.', 'ਸੰਨ', ], - 'ERANAMES': [ + ERANAMES: const [ 'ਈਸਵੀ ਪੂਰਵ', 'ਈਸਵੀ ਸੰਨ', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ਜ', 'ਫ਼', 'ਮਾ', @@ -12579,7 +12515,7 @@ const Map dateSymbols = { 'ਨ', 'ਦ', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ਜ', 'ਫ਼', 'ਮਾ', @@ -12593,7 +12529,7 @@ const Map dateSymbols = { 'ਨ', 'ਦ', ], - 'MONTHS': [ + MONTHS: const [ 'ਜਨਵਰੀ', 'ਫ਼ਰਵਰੀ', 'ਮਾਰਚ', @@ -12607,7 +12543,7 @@ const Map dateSymbols = { 'ਨਵੰਬਰ', 'ਦਸੰਬਰ', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ਜਨਵਰੀ', 'ਫ਼ਰਵਰੀ', 'ਮਾਰਚ', @@ -12621,7 +12557,7 @@ const Map dateSymbols = { 'ਨਵੰਬਰ', 'ਦਸੰਬਰ', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ਜਨ', 'ਫ਼ਰ', 'ਮਾਰਚ', @@ -12635,7 +12571,7 @@ const Map dateSymbols = { 'ਨਵੰ', 'ਦਸੰ', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ਜਨ', 'ਫ਼ਰ', 'ਮਾਰਚ', @@ -12649,7 +12585,7 @@ const Map dateSymbols = { 'ਨਵੰ', 'ਦਸੰ', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'ਐਤਵਾਰ', 'ਸੋਮਵਾਰ', 'ਮੰਗਲਵਾਰ', @@ -12658,7 +12594,7 @@ const Map dateSymbols = { 'ਸ਼ੁੱਕਰਵਾਰ', 'ਸ਼ਨਿੱਚਰਵਾਰ', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'ਐਤਵਾਰ', 'ਸੋਮਵਾਰ', 'ਮੰਗਲਵਾਰ', @@ -12667,7 +12603,7 @@ const Map dateSymbols = { 'ਸ਼ੁੱਕਰਵਾਰ', 'ਸ਼ਨਿੱਚਰਵਾਰ', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ਐਤ', 'ਸੋਮ', 'ਮੰਗਲ', @@ -12676,7 +12612,7 @@ const Map dateSymbols = { 'ਸ਼ੁੱਕਰ', 'ਸ਼ਨਿੱਚਰ', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ਐਤ', 'ਸੋਮ', 'ਮੰਗਲ', @@ -12685,7 +12621,7 @@ const Map dateSymbols = { 'ਸ਼ੁੱਕਰ', 'ਸ਼ਨਿੱਚਰ', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'ਐ', 'ਸੋ', 'ਮੰ', @@ -12694,7 +12630,7 @@ const Map dateSymbols = { 'ਸ਼ੁੱ', 'ਸ਼', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'ਐ', 'ਸੋ', 'ਮੰ', @@ -12703,59 +12639,58 @@ const Map dateSymbols = { 'ਸ਼ੁੱ', 'ਸ਼', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'ਤਿਮਾਹੀ1', 'ਤਿਮਾਹੀ2', 'ਤਿਮਾਹੀ3', 'ਤਿਮਾਹੀ4', ], - 'QUARTERS': [ + QUARTERS: const [ 'ਪਹਿਲੀ ਤਿਮਾਹੀ', 'ਦੂਜੀ ਤਿਮਾਹੀ', 'ਤੀਜੀ ਤਿਮਾਹੀ', 'ਚੌਥੀ ਤਿਮਾਹੀ', ], - 'AMPMS': [ + AMPMS: const [ 'ਪੂ.ਦੁ.', 'ਬਾ.ਦੁ.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 6, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'pl': { - 'NAME': 'pl', - 'ERAS': [ + ), + 'pl': intl.DateSymbols( + NAME: 'pl', + ERAS: const [ 'p.n.e.', 'n.e.', ], - 'ERANAMES': [ + ERANAMES: const [ 'przed naszą erą', 'naszej ery', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 's', 'l', 'm', @@ -12769,7 +12704,7 @@ const Map dateSymbols = { 'l', 'g', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'S', 'L', 'M', @@ -12783,7 +12718,7 @@ const Map dateSymbols = { 'L', 'G', ], - 'MONTHS': [ + MONTHS: const [ 'stycznia', 'lutego', 'marca', @@ -12797,7 +12732,7 @@ const Map dateSymbols = { 'listopada', 'grudnia', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'styczeń', 'luty', 'marzec', @@ -12811,7 +12746,7 @@ const Map dateSymbols = { 'listopad', 'grudzień', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'sty', 'lut', 'mar', @@ -12825,7 +12760,7 @@ const Map dateSymbols = { 'lis', 'gru', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'sty', 'lut', 'mar', @@ -12839,7 +12774,7 @@ const Map dateSymbols = { 'lis', 'gru', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'niedziela', 'poniedziałek', 'wtorek', @@ -12848,7 +12783,7 @@ const Map dateSymbols = { 'piątek', 'sobota', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'niedziela', 'poniedziałek', 'wtorek', @@ -12857,7 +12792,7 @@ const Map dateSymbols = { 'piątek', 'sobota', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'niedz.', 'pon.', 'wt.', @@ -12866,7 +12801,7 @@ const Map dateSymbols = { 'pt.', 'sob.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'niedz.', 'pon.', 'wt.', @@ -12875,7 +12810,7 @@ const Map dateSymbols = { 'pt.', 'sob.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'n', 'p', 'w', @@ -12884,7 +12819,7 @@ const Map dateSymbols = { 'p', 's', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'N', 'P', 'W', @@ -12893,59 +12828,58 @@ const Map dateSymbols = { 'P', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'I kw.', 'II kw.', 'III kw.', 'IV kw.', ], - 'QUARTERS': [ + QUARTERS: const [ 'I kwartał', 'II kwartał', 'III kwartał', 'IV kwartał', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'dd.MM.y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'ps': { - 'NAME': 'ps', - 'ERAS': [ + ), + 'ps': intl.DateSymbols( + NAME: 'ps', + ERAS: const [ 'له میلاد وړاندې', 'م.', ], - 'ERANAMES': [ + ERANAMES: const [ 'له میلاد څخه وړاندې', 'له میلاد څخه وروسته', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ج', 'ف', 'م', @@ -12959,7 +12893,7 @@ const Map dateSymbols = { 'ن', 'د', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1', '2', '3', @@ -12973,7 +12907,7 @@ const Map dateSymbols = { '11', '12', ], - 'MONTHS': [ + MONTHS: const [ 'جنوري', 'فبروري', 'مارچ', @@ -12987,7 +12921,7 @@ const Map dateSymbols = { 'نومبر', 'دسمبر', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'جنوري', 'فېبروري', 'مارچ', @@ -13001,7 +12935,7 @@ const Map dateSymbols = { 'نومبر', 'دسمبر', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'جنوري', 'فبروري', 'مارچ', @@ -13015,7 +12949,7 @@ const Map dateSymbols = { 'نومبر', 'دسمبر', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'جنوري', 'فبروري', 'مارچ', @@ -13029,7 +12963,7 @@ const Map dateSymbols = { 'نومبر', 'دسمبر', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'يونۍ', 'دونۍ', 'درېنۍ', @@ -13038,7 +12972,7 @@ const Map dateSymbols = { 'جمعه', 'اونۍ', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'يونۍ', 'دونۍ', 'درېنۍ', @@ -13047,7 +12981,7 @@ const Map dateSymbols = { 'جمعه', 'اونۍ', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'يونۍ', 'دونۍ', 'درېنۍ', @@ -13056,7 +12990,7 @@ const Map dateSymbols = { 'جمعه', 'اونۍ', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'يونۍ', 'دونۍ', 'درېنۍ', @@ -13065,7 +12999,7 @@ const Map dateSymbols = { 'جمعه', 'اونۍ', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -13074,7 +13008,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -13083,60 +13017,59 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'لومړۍ ربعه', '۲مه ربعه', '۳مه ربعه', '۴مه ربعه', ], - 'QUARTERS': [ + QUARTERS: const [ 'لومړۍ ربعه', '۲مه ربعه', '۳مه ربعه', '۴مه ربعه', ], - 'AMPMS': [ + AMPMS: const [ 'غ.م.', 'غ.و.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE د y د MMMM d', 'د y د MMMM d', 'y MMM d', 'y/M/d', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H:mm:ss (zzzz)', 'H:mm:ss (z)', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 5, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 5, + WEEKENDRANGE: const [ 3, 4, ], - 'FIRSTWEEKCUTOFFDAY': 4, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 4, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - 'ZERODIGIT': '۰', - }, - 'pt': { - 'NAME': 'pt', - 'ERAS': [ + ZERODIGIT: '۰', + ), + 'pt': intl.DateSymbols( + NAME: 'pt', + ERAS: const [ 'a.C.', 'd.C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'antes de Cristo', 'depois de Cristo', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -13150,7 +13083,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -13164,7 +13097,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'janeiro', 'fevereiro', 'março', @@ -13178,7 +13111,7 @@ const Map dateSymbols = { 'novembro', 'dezembro', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'janeiro', 'fevereiro', 'março', @@ -13192,7 +13125,7 @@ const Map dateSymbols = { 'novembro', 'dezembro', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan', 'fev', 'mar', @@ -13206,7 +13139,7 @@ const Map dateSymbols = { 'nov', 'dez', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan', 'fev', 'mar', @@ -13220,7 +13153,7 @@ const Map dateSymbols = { 'nov', 'dez', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'domingo', 'segunda-feira', 'terça-feira', @@ -13229,7 +13162,7 @@ const Map dateSymbols = { 'sexta-feira', 'sábado', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'domingo', 'segunda-feira', 'terça-feira', @@ -13238,7 +13171,7 @@ const Map dateSymbols = { 'sexta-feira', 'sábado', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dom', 'seg', 'ter', @@ -13247,7 +13180,7 @@ const Map dateSymbols = { 'sex', 'sáb', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'dom', 'seg', 'ter', @@ -13256,7 +13189,7 @@ const Map dateSymbols = { 'sex', 'sáb', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'D', 'S', 'T', @@ -13265,7 +13198,7 @@ const Map dateSymbols = { 'S', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'S', 'T', @@ -13274,59 +13207,58 @@ const Map dateSymbols = { 'S', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'T1', 'T2', 'T3', 'T4', ], - 'QUARTERS': [ + QUARTERS: const [ '1º trimestre', '2º trimestre', '3º trimestre', '4º trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", "d 'de' MMM 'de' y", 'dd/MM/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'pt_PT': { - 'NAME': 'pt_PT', - 'ERAS': [ + ), + 'pt_PT': intl.DateSymbols( + NAME: 'pt_PT', + ERAS: const [ 'a.C.', 'd.C.', ], - 'ERANAMES': [ + ERANAMES: const [ 'antes de Cristo', 'depois de Cristo', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -13340,7 +13272,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -13354,7 +13286,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'janeiro', 'fevereiro', 'março', @@ -13368,7 +13300,7 @@ const Map dateSymbols = { 'novembro', 'dezembro', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'janeiro', 'fevereiro', 'março', @@ -13382,7 +13314,7 @@ const Map dateSymbols = { 'novembro', 'dezembro', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan', 'fev', 'mar', @@ -13396,7 +13328,7 @@ const Map dateSymbols = { 'nov', 'dez', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan', 'fev', 'mar', @@ -13410,7 +13342,7 @@ const Map dateSymbols = { 'nov', 'dez', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'domingo', 'segunda-feira', 'terça-feira', @@ -13419,7 +13351,7 @@ const Map dateSymbols = { 'sexta-feira', 'sábado', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'domingo', 'segunda-feira', 'terça-feira', @@ -13428,7 +13360,7 @@ const Map dateSymbols = { 'sexta-feira', 'sábado', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'domingo', 'segunda', 'terça', @@ -13437,7 +13369,7 @@ const Map dateSymbols = { 'sexta', 'sábado', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'domingo', 'segunda', 'terça', @@ -13446,7 +13378,7 @@ const Map dateSymbols = { 'sexta', 'sábado', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'D', 'S', 'T', @@ -13455,7 +13387,7 @@ const Map dateSymbols = { 'S', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'S', 'T', @@ -13464,59 +13396,58 @@ const Map dateSymbols = { 'S', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'T1', 'T2', 'T3', 'T4', ], - 'QUARTERS': [ + QUARTERS: const [ '1.º trimestre', '2.º trimestre', '3.º trimestre', '4.º trimestre', ], - 'AMPMS': [ + AMPMS: const [ 'da manhã', 'da tarde', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", 'dd/MM/y', 'dd/MM/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 2, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 2, + DATETIMEFORMATS: const [ "{1} 'às' {0}", "{1} 'às' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'ro': { - 'NAME': 'ro', - 'ERAS': [ + ), + 'ro': intl.DateSymbols( + NAME: 'ro', + ERAS: const [ 'î.Hr.', 'd.Hr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'înainte de Hristos', 'după Hristos', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'I', 'F', 'M', @@ -13530,7 +13461,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'I', 'F', 'M', @@ -13544,7 +13475,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'ianuarie', 'februarie', 'martie', @@ -13558,7 +13489,7 @@ const Map dateSymbols = { 'noiembrie', 'decembrie', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ianuarie', 'februarie', 'martie', @@ -13572,7 +13503,7 @@ const Map dateSymbols = { 'noiembrie', 'decembrie', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ian.', 'feb.', 'mar.', @@ -13586,7 +13517,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ian.', 'feb.', 'mar.', @@ -13600,7 +13531,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'duminică', 'luni', 'marți', @@ -13609,7 +13540,7 @@ const Map dateSymbols = { 'vineri', 'sâmbătă', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'duminică', 'luni', 'marți', @@ -13618,7 +13549,7 @@ const Map dateSymbols = { 'vineri', 'sâmbătă', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'dum.', 'lun.', 'mar.', @@ -13627,7 +13558,7 @@ const Map dateSymbols = { 'vin.', 'sâm.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'dum.', 'lun.', 'mar.', @@ -13636,7 +13567,7 @@ const Map dateSymbols = { 'vin.', 'sâm.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -13645,7 +13576,7 @@ const Map dateSymbols = { 'V', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'D', 'L', 'M', @@ -13654,59 +13585,58 @@ const Map dateSymbols = { 'V', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'trim. I', 'trim. II', 'trim. III', 'trim. IV', ], - 'QUARTERS': [ + QUARTERS: const [ 'trimestrul I', 'trimestrul al II-lea', 'trimestrul al III-lea', 'trimestrul al IV-lea', ], - 'AMPMS': [ + AMPMS: const [ 'a.m.', 'p.m.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'dd.MM.y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'ru': { - 'NAME': 'ru', - 'ERAS': [ + ), + 'ru': intl.DateSymbols( + NAME: 'ru', + ERAS: const [ 'до н. э.', 'н. э.', ], - 'ERANAMES': [ + ERANAMES: const [ 'до Рождества Христова', 'от Рождества Христова', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'Я', 'Ф', 'М', @@ -13720,7 +13650,7 @@ const Map dateSymbols = { 'Н', 'Д', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'Я', 'Ф', 'М', @@ -13734,7 +13664,7 @@ const Map dateSymbols = { 'Н', 'Д', ], - 'MONTHS': [ + MONTHS: const [ 'января', 'февраля', 'марта', @@ -13748,7 +13678,7 @@ const Map dateSymbols = { 'ноября', 'декабря', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'январь', 'февраль', 'март', @@ -13762,7 +13692,7 @@ const Map dateSymbols = { 'ноябрь', 'декабрь', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'янв.', 'февр.', 'мар.', @@ -13776,7 +13706,7 @@ const Map dateSymbols = { 'нояб.', 'дек.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'янв.', 'февр.', 'март', @@ -13790,7 +13720,7 @@ const Map dateSymbols = { 'нояб.', 'дек.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'воскресенье', 'понедельник', 'вторник', @@ -13799,7 +13729,7 @@ const Map dateSymbols = { 'пятница', 'суббота', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'воскресенье', 'понедельник', 'вторник', @@ -13808,7 +13738,7 @@ const Map dateSymbols = { 'пятница', 'суббота', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'вс', 'пн', 'вт', @@ -13817,7 +13747,7 @@ const Map dateSymbols = { 'пт', 'сб', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'вс', 'пн', 'вт', @@ -13826,7 +13756,7 @@ const Map dateSymbols = { 'пт', 'сб', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'вс', 'пн', 'вт', @@ -13835,7 +13765,7 @@ const Map dateSymbols = { 'пт', 'сб', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'В', 'П', 'В', @@ -13844,59 +13774,58 @@ const Map dateSymbols = { 'П', 'С', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1-й кв.', '2-й кв.', '3-й кв.', '4-й кв.', ], - 'QUARTERS': [ + QUARTERS: const [ '1-й квартал', '2-й квартал', '3-й квартал', '4-й квартал', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d MMMM y 'г'.", "d MMMM y 'г'.", "d MMM y 'г'.", 'dd.MM.y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'si': { - 'NAME': 'si', - 'ERAS': [ + ), + 'si': intl.DateSymbols( + NAME: 'si', + ERAS: const [ 'ක්‍රි.පූ.', 'ක්‍රි.ව.', ], - 'ERANAMES': [ + ERANAMES: const [ 'ක්‍රිස්තු පූර්ව', 'ක්‍රිස්තු වර්ෂ', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ජ', 'පෙ', 'මා', @@ -13910,7 +13839,7 @@ const Map dateSymbols = { 'නෙ', 'දෙ', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ජ', 'පෙ', 'මා', @@ -13924,7 +13853,7 @@ const Map dateSymbols = { 'නෙ', 'දෙ', ], - 'MONTHS': [ + MONTHS: const [ 'ජනවාරි', 'පෙබරවාරි', 'මාර්තු', @@ -13938,7 +13867,7 @@ const Map dateSymbols = { 'නොවැම්බර්', 'දෙසැම්බර්', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ජනවාරි', 'පෙබරවාරි', 'මාර්තු', @@ -13952,7 +13881,7 @@ const Map dateSymbols = { 'නොවැම්බර්', 'දෙසැම්බර්', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ජන', 'පෙබ', 'මාර්තු', @@ -13966,7 +13895,7 @@ const Map dateSymbols = { 'නොවැ', 'දෙසැ', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ජන', 'පෙබ', 'මාර්', @@ -13980,7 +13909,7 @@ const Map dateSymbols = { 'නොවැ', 'දෙසැ', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'ඉරිදා', 'සඳුදා', 'අඟහරුවාදා', @@ -13989,7 +13918,7 @@ const Map dateSymbols = { 'සිකුරාදා', 'සෙනසුරාදා', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'ඉරිදා', 'සඳුදා', 'අඟහරුවාදා', @@ -13998,7 +13927,7 @@ const Map dateSymbols = { 'සිකුරාදා', 'සෙනසුරාදා', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ඉරිදා', 'සඳුදා', 'අඟහ', @@ -14007,7 +13936,7 @@ const Map dateSymbols = { 'සිකු', 'සෙන', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ඉරිදා', 'සඳුදා', 'අඟහ', @@ -14016,7 +13945,7 @@ const Map dateSymbols = { 'සිකු', 'සෙන', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'ඉ', 'ස', 'අ', @@ -14025,7 +13954,7 @@ const Map dateSymbols = { 'සි', 'සෙ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'ඉ', 'ස', 'අ', @@ -14034,59 +13963,58 @@ const Map dateSymbols = { 'සි', 'සෙ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'කාර්:1', 'කාර්:2', 'කාර්:3', 'කාර්:4', ], - 'QUARTERS': [ + QUARTERS: const [ '1 වන කාර්තුව', '2 වන කාර්තුව', '3 වන කාර්තුව', '4 වන කාර්තුව', ], - 'AMPMS': [ + AMPMS: const [ 'පෙ.ව.', 'ප.ව.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y MMMM d, EEEE', 'y MMMM d', 'y MMM d', 'y-MM-dd', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH.mm.ss zzzz', 'HH.mm.ss z', 'HH.mm.ss', 'HH.mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'sk': { - 'NAME': 'sk', - 'ERAS': [ + ), + 'sk': intl.DateSymbols( + NAME: 'sk', + ERAS: const [ 'pred Kr.', 'po Kr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'pred Kristom', 'po Kristovi', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'j', 'f', 'm', @@ -14100,7 +14028,7 @@ const Map dateSymbols = { 'n', 'd', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'j', 'f', 'm', @@ -14114,7 +14042,7 @@ const Map dateSymbols = { 'n', 'd', ], - 'MONTHS': [ + MONTHS: const [ 'januára', 'februára', 'marca', @@ -14128,7 +14056,7 @@ const Map dateSymbols = { 'novembra', 'decembra', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'január', 'február', 'marec', @@ -14142,7 +14070,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan', 'feb', 'mar', @@ -14156,7 +14084,7 @@ const Map dateSymbols = { 'nov', 'dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan', 'feb', 'mar', @@ -14170,7 +14098,7 @@ const Map dateSymbols = { 'nov', 'dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'nedeľa', 'pondelok', 'utorok', @@ -14179,7 +14107,7 @@ const Map dateSymbols = { 'piatok', 'sobota', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'nedeľa', 'pondelok', 'utorok', @@ -14188,7 +14116,7 @@ const Map dateSymbols = { 'piatok', 'sobota', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ne', 'po', 'ut', @@ -14197,7 +14125,7 @@ const Map dateSymbols = { 'pi', 'so', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ne', 'po', 'ut', @@ -14206,7 +14134,7 @@ const Map dateSymbols = { 'pi', 'so', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'n', 'p', 'u', @@ -14215,7 +14143,7 @@ const Map dateSymbols = { 'p', 's', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'n', 'p', 'u', @@ -14224,59 +14152,58 @@ const Map dateSymbols = { 'p', 's', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '1. štvrťrok', '2. štvrťrok', '3. štvrťrok', '4. štvrťrok', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d. MMMM y', 'd. MMMM y', 'd. M. y', 'd. M. y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H:mm:ss zzzz', 'H:mm:ss z', 'H:mm:ss', 'H:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1}, {0}', '{1} {0}', ], - }, - 'sl': { - 'NAME': 'sl', - 'ERAS': [ + ), + 'sl': intl.DateSymbols( + NAME: 'sl', + ERAS: const [ 'pr. Kr.', 'po Kr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'pred Kristusom', 'po Kristusu', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'j', 'f', 'm', @@ -14290,7 +14217,7 @@ const Map dateSymbols = { 'n', 'd', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'j', 'f', 'm', @@ -14304,7 +14231,7 @@ const Map dateSymbols = { 'n', 'd', ], - 'MONTHS': [ + MONTHS: const [ 'januar', 'februar', 'marec', @@ -14318,7 +14245,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'januar', 'februar', 'marec', @@ -14332,7 +14259,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan.', 'feb.', 'mar.', @@ -14346,7 +14273,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan.', 'feb.', 'mar.', @@ -14360,7 +14287,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'nedelja', 'ponedeljek', 'torek', @@ -14369,7 +14296,7 @@ const Map dateSymbols = { 'petek', 'sobota', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'nedelja', 'ponedeljek', 'torek', @@ -14378,7 +14305,7 @@ const Map dateSymbols = { 'petek', 'sobota', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ned.', 'pon.', 'tor.', @@ -14387,7 +14314,7 @@ const Map dateSymbols = { 'pet.', 'sob.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ned.', 'pon.', 'tor.', @@ -14396,7 +14323,7 @@ const Map dateSymbols = { 'pet.', 'sob.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'n', 'p', 't', @@ -14405,7 +14332,7 @@ const Map dateSymbols = { 'p', 's', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'n', 'p', 't', @@ -14414,59 +14341,58 @@ const Map dateSymbols = { 'p', 's', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1. čet.', '2. čet.', '3. čet.', '4. čet.', ], - 'QUARTERS': [ + QUARTERS: const [ '1. četrtletje', '2. četrtletje', '3. četrtletje', '4. četrtletje', ], - 'AMPMS': [ + AMPMS: const [ 'dop.', 'pop.', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, dd. MMMM y', 'dd. MMMM y', 'd. MMM y', 'd. MM. yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'sq': { - 'NAME': 'sq', - 'ERAS': [ + ), + 'sq': intl.DateSymbols( + NAME: 'sq', + ERAS: const [ 'p.K.', 'mb.K.', ], - 'ERANAMES': [ + ERANAMES: const [ 'para Krishtit', 'mbas Krishtit', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'j', 'sh', 'm', @@ -14480,7 +14406,7 @@ const Map dateSymbols = { 'n', 'dh', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'j', 'sh', 'm', @@ -14494,7 +14420,7 @@ const Map dateSymbols = { 'n', 'dh', ], - 'MONTHS': [ + MONTHS: const [ 'janar', 'shkurt', 'mars', @@ -14508,7 +14434,7 @@ const Map dateSymbols = { 'nëntor', 'dhjetor', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'janar', 'shkurt', 'mars', @@ -14522,7 +14448,7 @@ const Map dateSymbols = { 'nëntor', 'dhjetor', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan', 'shk', 'mar', @@ -14536,7 +14462,7 @@ const Map dateSymbols = { 'nën', 'dhj', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan', 'shk', 'mar', @@ -14550,7 +14476,7 @@ const Map dateSymbols = { 'nën', 'dhj', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'e diel', 'e hënë', 'e martë', @@ -14559,7 +14485,7 @@ const Map dateSymbols = { 'e premte', 'e shtunë', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'e diel', 'e hënë', 'e martë', @@ -14568,7 +14494,7 @@ const Map dateSymbols = { 'e premte', 'e shtunë', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Die', 'Hën', 'Mar', @@ -14577,7 +14503,7 @@ const Map dateSymbols = { 'Pre', 'Sht', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'die', 'hën', 'mar', @@ -14586,7 +14512,7 @@ const Map dateSymbols = { 'pre', 'sht', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'd', 'h', 'm', @@ -14595,7 +14521,7 @@ const Map dateSymbols = { 'p', 'sh', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'd', 'h', 'm', @@ -14604,59 +14530,58 @@ const Map dateSymbols = { 'p', 'sh', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'tremujori I', 'tremujori II', 'tremujori III', 'tremujori IV', ], - 'QUARTERS': [ + QUARTERS: const [ 'tremujori i parë', 'tremujori i dytë', 'tremujori i tretë', 'tremujori i katërt', ], - 'AMPMS': [ + AMPMS: const [ 'e paradites', 'e pasdites', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'd.M.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a, zzzz', 'h:mm:ss a, z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ "{1} 'në' {0}", "{1} 'në' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'sr': { - 'NAME': 'sr', - 'ERAS': [ + ), + 'sr': intl.DateSymbols( + NAME: 'sr', + ERAS: const [ 'п. н. е.', 'н. е.', ], - 'ERANAMES': [ + ERANAMES: const [ 'пре нове ере', 'нове ере', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ј', 'ф', 'м', @@ -14670,7 +14595,7 @@ const Map dateSymbols = { 'н', 'д', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ј', 'ф', 'м', @@ -14684,7 +14609,7 @@ const Map dateSymbols = { 'н', 'д', ], - 'MONTHS': [ + MONTHS: const [ 'јануар', 'фебруар', 'март', @@ -14698,7 +14623,7 @@ const Map dateSymbols = { 'новембар', 'децембар', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'јануар', 'фебруар', 'март', @@ -14712,7 +14637,7 @@ const Map dateSymbols = { 'новембар', 'децембар', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'јан', 'феб', 'мар', @@ -14726,7 +14651,7 @@ const Map dateSymbols = { 'нов', 'дец', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'јан', 'феб', 'мар', @@ -14740,7 +14665,7 @@ const Map dateSymbols = { 'нов', 'дец', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'недеља', 'понедељак', 'уторак', @@ -14749,7 +14674,7 @@ const Map dateSymbols = { 'петак', 'субота', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'недеља', 'понедељак', 'уторак', @@ -14758,7 +14683,7 @@ const Map dateSymbols = { 'петак', 'субота', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'нед', 'пон', 'уто', @@ -14767,7 +14692,7 @@ const Map dateSymbols = { 'пет', 'суб', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'нед', 'пон', 'уто', @@ -14776,7 +14701,7 @@ const Map dateSymbols = { 'пет', 'суб', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'н', 'п', 'у', @@ -14785,7 +14710,7 @@ const Map dateSymbols = { 'п', 'с', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'н', 'п', 'у', @@ -14794,59 +14719,58 @@ const Map dateSymbols = { 'п', 'с', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'К1', 'К2', 'К3', 'К4', ], - 'QUARTERS': [ + QUARTERS: const [ 'први квартал', 'други квартал', 'трећи квартал', 'четврти квартал', ], - 'AMPMS': [ + AMPMS: const [ 'пре подне', 'по подне', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, dd. MMMM y.', 'dd. MMMM y.', 'dd.MM.y.', 'd.M.yy.', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'sr_Latn': { - 'NAME': 'sr_Latn', - 'ERAS': [ + ), + 'sr_Latn': intl.DateSymbols( + NAME: 'sr_Latn', + ERAS: const [ 'p. n. e.', 'n. e.', ], - 'ERANAMES': [ + ERANAMES: const [ 'pre nove ere', 'nove ere', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'j', 'f', 'm', @@ -14860,7 +14784,7 @@ const Map dateSymbols = { 'n', 'd', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'j', 'f', 'm', @@ -14874,7 +14798,7 @@ const Map dateSymbols = { 'n', 'd', ], - 'MONTHS': [ + MONTHS: const [ 'januar', 'februar', 'mart', @@ -14888,7 +14812,7 @@ const Map dateSymbols = { 'novembar', 'decembar', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'januar', 'februar', 'mart', @@ -14902,7 +14826,7 @@ const Map dateSymbols = { 'novembar', 'decembar', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan', 'feb', 'mar', @@ -14916,7 +14840,7 @@ const Map dateSymbols = { 'nov', 'dec', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan', 'feb', 'mar', @@ -14930,7 +14854,7 @@ const Map dateSymbols = { 'nov', 'dec', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'nedelja', 'ponedeljak', 'utorak', @@ -14939,7 +14863,7 @@ const Map dateSymbols = { 'petak', 'subota', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'nedelja', 'ponedeljak', 'utorak', @@ -14948,7 +14872,7 @@ const Map dateSymbols = { 'petak', 'subota', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ned', 'pon', 'uto', @@ -14957,7 +14881,7 @@ const Map dateSymbols = { 'pet', 'sub', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ned', 'pon', 'uto', @@ -14966,7 +14890,7 @@ const Map dateSymbols = { 'pet', 'sub', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'n', 'p', 'u', @@ -14975,7 +14899,7 @@ const Map dateSymbols = { 'p', 's', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'n', 'p', 'u', @@ -14984,59 +14908,58 @@ const Map dateSymbols = { 'p', 's', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'K1', 'K2', 'K3', 'K4', ], - 'QUARTERS': [ + QUARTERS: const [ 'prvi kvartal', 'drugi kvartal', 'treći kvartal', 'četvrti kvartal', ], - 'AMPMS': [ + AMPMS: const [ 'pre podne', 'po podne', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, dd. MMMM y.', 'dd. MMMM y.', 'dd.MM.y.', 'd.M.yy.', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'sv': { - 'NAME': 'sv', - 'ERAS': [ + ), + 'sv': intl.DateSymbols( + NAME: 'sv', + ERAS: const [ 'f.Kr.', 'e.Kr.', ], - 'ERANAMES': [ + ERANAMES: const [ 'före Kristus', 'efter Kristus', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -15050,7 +14973,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -15064,7 +14987,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'januari', 'februari', 'mars', @@ -15078,7 +15001,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'januari', 'februari', 'mars', @@ -15092,7 +15015,7 @@ const Map dateSymbols = { 'november', 'december', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'jan.', 'feb.', 'mars', @@ -15106,7 +15029,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'jan.', 'feb.', 'mars', @@ -15120,7 +15043,7 @@ const Map dateSymbols = { 'nov.', 'dec.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'söndag', 'måndag', 'tisdag', @@ -15129,7 +15052,7 @@ const Map dateSymbols = { 'fredag', 'lördag', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'söndag', 'måndag', 'tisdag', @@ -15138,7 +15061,7 @@ const Map dateSymbols = { 'fredag', 'lördag', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'sön', 'mån', 'tis', @@ -15147,7 +15070,7 @@ const Map dateSymbols = { 'fre', 'lör', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'sön', 'mån', 'tis', @@ -15156,7 +15079,7 @@ const Map dateSymbols = { 'fre', 'lör', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -15165,7 +15088,7 @@ const Map dateSymbols = { 'F', 'L', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -15174,59 +15097,58 @@ const Map dateSymbols = { 'F', 'L', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'K1', 'K2', 'K3', 'K4', ], - 'QUARTERS': [ + QUARTERS: const [ '1:a kvartalet', '2:a kvartalet', '3:e kvartalet', '4:e kvartalet', ], - 'AMPMS': [ + AMPMS: const [ 'fm', 'em', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE d MMMM y', 'd MMMM y', 'd MMM y', 'y-MM-dd', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ "'kl'. HH:mm:ss zzzz", 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 3, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 3, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'sw': { - 'NAME': 'sw', - 'ERAS': [ + ), + 'sw': intl.DateSymbols( + NAME: 'sw', + ERAS: const [ 'KK', 'BK', ], - 'ERANAMES': [ + ERANAMES: const [ 'Kabla ya Kristo', 'Baada ya Kristo', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -15240,7 +15162,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -15254,7 +15176,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'Januari', 'Februari', 'Machi', @@ -15268,7 +15190,7 @@ const Map dateSymbols = { 'Novemba', 'Desemba', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Januari', 'Februari', 'Machi', @@ -15282,7 +15204,7 @@ const Map dateSymbols = { 'Novemba', 'Desemba', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mac', @@ -15296,7 +15218,7 @@ const Map dateSymbols = { 'Nov', 'Des', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mac', @@ -15310,7 +15232,7 @@ const Map dateSymbols = { 'Nov', 'Des', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Jumapili', 'Jumatatu', 'Jumanne', @@ -15319,7 +15241,7 @@ const Map dateSymbols = { 'Ijumaa', 'Jumamosi', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Jumapili', 'Jumatatu', 'Jumanne', @@ -15328,7 +15250,7 @@ const Map dateSymbols = { 'Ijumaa', 'Jumamosi', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Jumapili', 'Jumatatu', 'Jumanne', @@ -15337,7 +15259,7 @@ const Map dateSymbols = { 'Ijumaa', 'Jumamosi', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Jumapili', 'Jumatatu', 'Jumanne', @@ -15346,7 +15268,7 @@ const Map dateSymbols = { 'Ijumaa', 'Jumamosi', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -15355,7 +15277,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -15364,59 +15286,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Robo ya 1', 'Robo ya 2', 'Robo ya 3', 'Robo ya 4', ], - 'QUARTERS': [ + QUARTERS: const [ 'Robo ya 1', 'Robo ya 2', 'Robo ya 3', 'Robo ya 4', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM y', 'd MMMM y', 'd MMM y', 'dd/MM/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'ta': { - 'NAME': 'ta', - 'ERAS': [ + ), + 'ta': intl.DateSymbols( + NAME: 'ta', + ERAS: const [ 'கி.மு.', 'கி.பி.', ], - 'ERANAMES': [ + ERANAMES: const [ 'கிறிஸ்துவுக்கு முன்', 'அன்னோ டோமினி', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ஜ', 'பி', 'மா', @@ -15430,7 +15351,7 @@ const Map dateSymbols = { 'ந', 'டி', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ஜ', 'பி', 'மா', @@ -15444,7 +15365,7 @@ const Map dateSymbols = { 'ந', 'டி', ], - 'MONTHS': [ + MONTHS: const [ 'ஜனவரி', 'பிப்ரவரி', 'மார்ச்', @@ -15458,7 +15379,7 @@ const Map dateSymbols = { 'நவம்பர்', 'டிசம்பர்', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'ஜனவரி', 'பிப்ரவரி', 'மார்ச்', @@ -15472,7 +15393,7 @@ const Map dateSymbols = { 'நவம்பர்', 'டிசம்பர்', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ஜன.', 'பிப்.', 'மார்.', @@ -15486,7 +15407,7 @@ const Map dateSymbols = { 'நவ.', 'டிச.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ஜன.', 'பிப்.', 'மார்.', @@ -15500,7 +15421,7 @@ const Map dateSymbols = { 'நவ.', 'டிச.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'ஞாயிறு', 'திங்கள்', 'செவ்வாய்', @@ -15509,7 +15430,7 @@ const Map dateSymbols = { 'வெள்ளி', 'சனி', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'ஞாயிறு', 'திங்கள்', 'செவ்வாய்', @@ -15518,7 +15439,7 @@ const Map dateSymbols = { 'வெள்ளி', 'சனி', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ஞாயி.', 'திங்.', 'செவ்.', @@ -15527,7 +15448,7 @@ const Map dateSymbols = { 'வெள்.', 'சனி', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ஞாயி.', 'திங்.', 'செவ்.', @@ -15536,7 +15457,7 @@ const Map dateSymbols = { 'வெள்.', 'சனி', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'ஞா', 'தி', 'செ', @@ -15545,7 +15466,7 @@ const Map dateSymbols = { 'வெ', 'ச', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'ஞா', 'தி', 'செ', @@ -15554,59 +15475,58 @@ const Map dateSymbols = { 'வெ', 'ச', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'காலா.1', 'காலா.2', 'காலா.3', 'காலா.4', ], - 'QUARTERS': [ + QUARTERS: const [ 'ஒன்றாம் காலாண்டு', 'இரண்டாம் காலாண்டு', 'மூன்றாம் காலாண்டு', 'நான்காம் காலாண்டு', ], - 'AMPMS': [ + AMPMS: const [ 'முற்பகல்', 'பிற்பகல்', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM, y', 'd MMMM, y', 'd MMM, y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'a h:mm:ss zzzz', 'a h:mm:ss z', 'a h:mm:ss', 'a h:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 6, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} ’அன்று’ {0}', '{1} ’அன்று’ {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'te': { - 'NAME': 'te', - 'ERAS': [ + ), + 'te': intl.DateSymbols( + NAME: 'te', + ERAS: const [ 'క్రీపూ', 'క్రీశ', ], - 'ERANAMES': [ + ERANAMES: const [ 'క్రీస్తు పూర్వం', 'క్రీస్తు శకం', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'జ', 'ఫి', 'మా', @@ -15620,7 +15540,7 @@ const Map dateSymbols = { 'న', 'డి', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'జ', 'ఫి', 'మా', @@ -15634,7 +15554,7 @@ const Map dateSymbols = { 'న', 'డి', ], - 'MONTHS': [ + MONTHS: const [ 'జనవరి', 'ఫిబ్రవరి', 'మార్చి', @@ -15648,7 +15568,7 @@ const Map dateSymbols = { 'నవంబర్', 'డిసెంబర్', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'జనవరి', 'ఫిబ్రవరి', 'మార్చి', @@ -15662,7 +15582,7 @@ const Map dateSymbols = { 'నవంబర్', 'డిసెంబర్', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'జన', 'ఫిబ్ర', 'మార్చి', @@ -15676,7 +15596,7 @@ const Map dateSymbols = { 'నవం', 'డిసెం', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'జన', 'ఫిబ్ర', 'మార్చి', @@ -15690,7 +15610,7 @@ const Map dateSymbols = { 'నవం', 'డిసెం', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'ఆదివారం', 'సోమవారం', 'మంగళవారం', @@ -15699,7 +15619,7 @@ const Map dateSymbols = { 'శుక్రవారం', 'శనివారం', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'ఆదివారం', 'సోమవారం', 'మంగళవారం', @@ -15708,7 +15628,7 @@ const Map dateSymbols = { 'శుక్రవారం', 'శనివారం', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'ఆది', 'సోమ', 'మంగళ', @@ -15717,7 +15637,7 @@ const Map dateSymbols = { 'శుక్ర', 'శని', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'ఆది', 'సోమ', 'మంగళ', @@ -15726,7 +15646,7 @@ const Map dateSymbols = { 'శుక్ర', 'శని', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'ఆ', 'సో', 'మ', @@ -15735,7 +15655,7 @@ const Map dateSymbols = { 'శు', 'శ', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'ఆ', 'సో', 'మ', @@ -15744,59 +15664,58 @@ const Map dateSymbols = { 'శు', 'శ', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'త్రై1', 'త్రై2', 'త్రై3', 'త్రై4', ], - 'QUARTERS': [ + QUARTERS: const [ '1వ త్రైమాసికం', '2వ త్రైమాసికం', '3వ త్రైమాసికం', '4వ త్రైమాసికం', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'd, MMMM y, EEEE', 'd MMMM, y', 'd MMM, y', 'dd-MM-yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 6, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}కి', '{1} {0}కి', '{1} {0}', '{1} {0}', ], - }, - 'th': { - 'NAME': 'th', - 'ERAS': [ + ), + 'th': intl.DateSymbols( + NAME: 'th', + ERAS: const [ 'ก่อน ค.ศ.', 'ค.ศ.', ], - 'ERANAMES': [ + ERANAMES: const [ 'ปีก่อนคริสตกาล', 'คริสต์ศักราช', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'ม.ค.', 'ก.พ.', 'มี.ค.', @@ -15810,7 +15729,7 @@ const Map dateSymbols = { 'พ.ย.', 'ธ.ค.', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'ม.ค.', 'ก.พ.', 'มี.ค.', @@ -15824,7 +15743,7 @@ const Map dateSymbols = { 'พ.ย.', 'ธ.ค.', ], - 'MONTHS': [ + MONTHS: const [ 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', @@ -15838,7 +15757,7 @@ const Map dateSymbols = { 'พฤศจิกายน', 'ธันวาคม', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', @@ -15852,7 +15771,7 @@ const Map dateSymbols = { 'พฤศจิกายน', 'ธันวาคม', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'ม.ค.', 'ก.พ.', 'มี.ค.', @@ -15866,7 +15785,7 @@ const Map dateSymbols = { 'พ.ย.', 'ธ.ค.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'ม.ค.', 'ก.พ.', 'มี.ค.', @@ -15880,7 +15799,7 @@ const Map dateSymbols = { 'พ.ย.', 'ธ.ค.', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'วันอาทิตย์', 'วันจันทร์', 'วันอังคาร', @@ -15889,7 +15808,7 @@ const Map dateSymbols = { 'วันศุกร์', 'วันเสาร์', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'วันอาทิตย์', 'วันจันทร์', 'วันอังคาร', @@ -15898,7 +15817,7 @@ const Map dateSymbols = { 'วันศุกร์', 'วันเสาร์', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'อา.', 'จ.', 'อ.', @@ -15907,7 +15826,7 @@ const Map dateSymbols = { 'ศ.', 'ส.', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'อา.', 'จ.', 'อ.', @@ -15916,7 +15835,7 @@ const Map dateSymbols = { 'ศ.', 'ส.', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'อา', 'จ', 'อ', @@ -15925,7 +15844,7 @@ const Map dateSymbols = { 'ศ', 'ส', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'อา', 'จ', 'อ', @@ -15934,59 +15853,58 @@ const Map dateSymbols = { 'ศ', 'ส', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'ไตรมาส 1', 'ไตรมาส 2', 'ไตรมาส 3', 'ไตรมาส 4', ], - 'QUARTERS': [ + QUARTERS: const [ 'ไตรมาส 1', 'ไตรมาส 2', 'ไตรมาส 3', 'ไตรมาส 4', ], - 'AMPMS': [ + AMPMS: const [ 'ก่อนเที่ยง', 'หลังเที่ยง', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEEที่ d MMMM G y', 'd MMMM G y', 'd MMM y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H นาฬิกา mm นาที ss วินาที zzzz', 'H นาฬิกา mm นาที ss วินาที z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'tl': { - 'NAME': 'tl', - 'ERAS': [ + ), + 'tl': intl.DateSymbols( + NAME: 'tl', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'Before Christ', 'Anno Domini', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'Ene', 'Peb', 'Mar', @@ -16000,7 +15918,7 @@ const Map dateSymbols = { 'Nob', 'Dis', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'E', 'P', 'M', @@ -16014,7 +15932,7 @@ const Map dateSymbols = { 'Nob', 'Dis', ], - 'MONTHS': [ + MONTHS: const [ 'Enero', 'Pebrero', 'Marso', @@ -16028,7 +15946,7 @@ const Map dateSymbols = { 'Nobyembre', 'Disyembre', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Enero', 'Pebrero', 'Marso', @@ -16042,7 +15960,7 @@ const Map dateSymbols = { 'Nobyembre', 'Disyembre', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Ene', 'Peb', 'Mar', @@ -16056,7 +15974,7 @@ const Map dateSymbols = { 'Nob', 'Dis', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Ene', 'Peb', 'Mar', @@ -16070,7 +15988,7 @@ const Map dateSymbols = { 'Nob', 'Dis', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Linggo', 'Lunes', 'Martes', @@ -16079,7 +15997,7 @@ const Map dateSymbols = { 'Biyernes', 'Sabado', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Linggo', 'Lunes', 'Martes', @@ -16088,7 +16006,7 @@ const Map dateSymbols = { 'Biyernes', 'Sabado', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Lin', 'Lun', 'Mar', @@ -16097,7 +16015,7 @@ const Map dateSymbols = { 'Biy', 'Sab', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Lin', 'Lun', 'Mar', @@ -16106,7 +16024,7 @@ const Map dateSymbols = { 'Biy', 'Sab', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Lin', 'Lun', 'Mar', @@ -16115,7 +16033,7 @@ const Map dateSymbols = { 'Biy', 'Sab', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Lin', 'Lun', 'Mar', @@ -16124,59 +16042,58 @@ const Map dateSymbols = { 'Biy', 'Sab', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ 'ika-1 quarter', 'ika-2 quarter', 'ika-3 quarter', 'ika-4 na quarter', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, MMMM d, y', 'MMMM d, y', 'MMM d, y', 'M/d/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ "{1} 'nang' {0}", "{1} 'nang' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'tr': { - 'NAME': 'tr', - 'ERAS': [ + ), + 'tr': intl.DateSymbols( + NAME: 'tr', + ERAS: const [ 'MÖ', 'MS', ], - 'ERANAMES': [ + ERANAMES: const [ 'Milattan Önce', 'Milattan Sonra', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'O', 'Ş', 'M', @@ -16190,7 +16107,7 @@ const Map dateSymbols = { 'K', 'A', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'O', 'Ş', 'M', @@ -16204,7 +16121,7 @@ const Map dateSymbols = { 'K', 'A', ], - 'MONTHS': [ + MONTHS: const [ 'Ocak', 'Şubat', 'Mart', @@ -16218,7 +16135,7 @@ const Map dateSymbols = { 'Kasım', 'Aralık', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Ocak', 'Şubat', 'Mart', @@ -16232,7 +16149,7 @@ const Map dateSymbols = { 'Kasım', 'Aralık', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Oca', 'Şub', 'Mar', @@ -16246,7 +16163,7 @@ const Map dateSymbols = { 'Kas', 'Ara', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Oca', 'Şub', 'Mar', @@ -16260,7 +16177,7 @@ const Map dateSymbols = { 'Kas', 'Ara', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Pazar', 'Pazartesi', 'Salı', @@ -16269,7 +16186,7 @@ const Map dateSymbols = { 'Cuma', 'Cumartesi', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Pazar', 'Pazartesi', 'Salı', @@ -16278,7 +16195,7 @@ const Map dateSymbols = { 'Cuma', 'Cumartesi', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Paz', 'Pzt', 'Sal', @@ -16287,7 +16204,7 @@ const Map dateSymbols = { 'Cum', 'Cmt', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Paz', 'Pzt', 'Sal', @@ -16296,7 +16213,7 @@ const Map dateSymbols = { 'Cum', 'Cmt', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'P', 'P', 'S', @@ -16305,7 +16222,7 @@ const Map dateSymbols = { 'C', 'C', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'P', 'P', 'S', @@ -16314,59 +16231,58 @@ const Map dateSymbols = { 'C', 'C', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Ç1', 'Ç2', 'Ç3', 'Ç4', ], - 'QUARTERS': [ + QUARTERS: const [ '1. çeyrek', '2. çeyrek', '3. çeyrek', '4. çeyrek', ], - 'AMPMS': [ + AMPMS: const [ 'ÖÖ', 'ÖS', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'd MMMM y EEEE', 'd MMMM y', 'd MMM y', 'd.MM.y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'uk': { - 'NAME': 'uk', - 'ERAS': [ + ), + 'uk': intl.DateSymbols( + NAME: 'uk', + ERAS: const [ 'до н. е.', 'н. е.', ], - 'ERANAMES': [ + ERANAMES: const [ 'до нашої ери', 'нашої ери', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'с', 'л', 'б', @@ -16380,7 +16296,7 @@ const Map dateSymbols = { 'л', 'г', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'С', 'Л', 'Б', @@ -16394,7 +16310,7 @@ const Map dateSymbols = { 'Л', 'Г', ], - 'MONTHS': [ + MONTHS: const [ 'січня', 'лютого', 'березня', @@ -16408,7 +16324,7 @@ const Map dateSymbols = { 'листопада', 'грудня', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'січень', 'лютий', 'березень', @@ -16422,7 +16338,7 @@ const Map dateSymbols = { 'листопад', 'грудень', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'січ.', 'лют.', 'бер.', @@ -16436,7 +16352,7 @@ const Map dateSymbols = { 'лист.', 'груд.', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'січ', 'лют', 'бер', @@ -16450,7 +16366,7 @@ const Map dateSymbols = { 'лис', 'гру', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'неділя', 'понеділок', 'вівторок', @@ -16459,7 +16375,7 @@ const Map dateSymbols = { 'пʼятниця', 'субота', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'неділя', 'понеділок', 'вівторок', @@ -16468,7 +16384,7 @@ const Map dateSymbols = { 'пʼятниця', 'субота', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'нд', 'пн', 'вт', @@ -16477,7 +16393,7 @@ const Map dateSymbols = { 'пт', 'сб', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'нд', 'пн', 'вт', @@ -16486,7 +16402,7 @@ const Map dateSymbols = { 'пт', 'сб', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Н', 'П', 'В', @@ -16495,7 +16411,7 @@ const Map dateSymbols = { 'П', 'С', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Н', 'П', 'В', @@ -16504,59 +16420,58 @@ const Map dateSymbols = { 'П', 'С', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1-й кв.', '2-й кв.', '3-й кв.', '4-й кв.', ], - 'QUARTERS': [ + QUARTERS: const [ '1-й квартал', '2-й квартал', '3-й квартал', '4-й квартал', ], - 'AMPMS': [ + AMPMS: const [ 'дп', 'пп', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ "EEEE, d MMMM y 'р'.", "d MMMM y 'р'.", "d MMM y 'р'.", 'dd.MM.yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ "{1} 'о' {0}", "{1} 'о' {0}", '{1}, {0}', '{1}, {0}', ], - }, - 'ur': { - 'NAME': 'ur', - 'ERAS': [ + ), + 'ur': intl.DateSymbols( + NAME: 'ur', + ERAS: const [ 'قبل مسیح', 'عیسوی', ], - 'ERANAMES': [ + ERANAMES: const [ 'قبل مسیح', 'عیسوی', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -16570,7 +16485,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -16584,7 +16499,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'جنوری', 'فروری', 'مارچ', @@ -16598,7 +16513,7 @@ const Map dateSymbols = { 'نومبر', 'دسمبر', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'جنوری', 'فروری', 'مارچ', @@ -16612,7 +16527,7 @@ const Map dateSymbols = { 'نومبر', 'دسمبر', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'جنوری', 'فروری', 'مارچ', @@ -16626,7 +16541,7 @@ const Map dateSymbols = { 'نومبر', 'دسمبر', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'جنوری', 'فروری', 'مارچ', @@ -16640,7 +16555,7 @@ const Map dateSymbols = { 'نومبر', 'دسمبر', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'اتوار', 'پیر', 'منگل', @@ -16649,7 +16564,7 @@ const Map dateSymbols = { 'جمعہ', 'ہفتہ', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'اتوار', 'پیر', 'منگل', @@ -16658,7 +16573,7 @@ const Map dateSymbols = { 'جمعہ', 'ہفتہ', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'اتوار', 'پیر', 'منگل', @@ -16667,7 +16582,7 @@ const Map dateSymbols = { 'جمعہ', 'ہفتہ', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'اتوار', 'پیر', 'منگل', @@ -16676,7 +16591,7 @@ const Map dateSymbols = { 'جمعہ', 'ہفتہ', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -16685,7 +16600,7 @@ const Map dateSymbols = { 'F', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'T', @@ -16694,59 +16609,58 @@ const Map dateSymbols = { 'F', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'پہلی سہ ماہی', 'دوسری سہ ماہی', 'تیسری سہ ماہی', 'چوتهی سہ ماہی', ], - 'QUARTERS': [ + QUARTERS: const [ 'پہلی سہ ماہی', 'دوسری سہ ماہی', 'تیسری سہ ماہی', 'چوتهی سہ ماہی', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE، d MMMM، y', 'd MMMM، y', 'd MMM، y', 'd/M/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'h:mm:ss a zzzz', 'h:mm:ss a z', 'h:mm:ss a', 'h:mm a', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'uz': { - 'NAME': 'uz', - 'ERAS': [ + ), + 'uz': intl.DateSymbols( + NAME: 'uz', + ERAS: const [ 'm.a.', 'milodiy', ], - 'ERANAMES': [ + ERANAMES: const [ 'miloddan avvalgi', 'milodiy', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'Y', 'F', 'M', @@ -16760,7 +16674,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'Y', 'F', 'M', @@ -16774,7 +16688,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'yanvar', 'fevral', 'mart', @@ -16788,7 +16702,7 @@ const Map dateSymbols = { 'noyabr', 'dekabr', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Yanvar', 'Fevral', 'Mart', @@ -16802,7 +16716,7 @@ const Map dateSymbols = { 'Noyabr', 'Dekabr', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'yan', 'fev', 'mar', @@ -16816,7 +16730,7 @@ const Map dateSymbols = { 'noy', 'dek', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Yan', 'Fev', 'Mar', @@ -16830,7 +16744,7 @@ const Map dateSymbols = { 'Noy', 'Dek', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'yakshanba', 'dushanba', 'seshanba', @@ -16839,7 +16753,7 @@ const Map dateSymbols = { 'juma', 'shanba', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'yakshanba', 'dushanba', 'seshanba', @@ -16848,7 +16762,7 @@ const Map dateSymbols = { 'juma', 'shanba', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Yak', 'Dush', 'Sesh', @@ -16857,7 +16771,7 @@ const Map dateSymbols = { 'Jum', 'Shan', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Yak', 'Dush', 'Sesh', @@ -16866,7 +16780,7 @@ const Map dateSymbols = { 'Jum', 'Shan', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'Y', 'D', 'S', @@ -16875,7 +16789,7 @@ const Map dateSymbols = { 'J', 'S', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'Y', 'D', 'S', @@ -16884,59 +16798,58 @@ const Map dateSymbols = { 'J', 'S', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1-ch', '2-ch', '3-ch', '4-ch', ], - 'QUARTERS': [ + QUARTERS: const [ '1-chorak', '2-chorak', '3-chorak', '4-chorak', ], - 'AMPMS': [ + AMPMS: const [ 'TO', 'TK', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d-MMMM, y', 'd-MMMM, y', 'd-MMM, y', 'dd/MM/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'H:mm:ss (zzzz)', 'H:mm:ss (z)', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{1}, {0}', '{1}, {0}', '{1}, {0}', '{1}, {0}', ], - }, - 'vi': { - 'NAME': 'vi', - 'ERAS': [ + ), + 'vi': intl.DateSymbols( + NAME: 'vi', + ERAS: const [ 'Trước CN', 'sau CN', ], - 'ERANAMES': [ + ERANAMES: const [ 'Trước CN', 'sau CN', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1', '2', '3', @@ -16950,7 +16863,7 @@ const Map dateSymbols = { '11', '12', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1', '2', '3', @@ -16964,7 +16877,7 @@ const Map dateSymbols = { '11', '12', ], - 'MONTHS': [ + MONTHS: const [ 'tháng 1', 'tháng 2', 'tháng 3', @@ -16978,7 +16891,7 @@ const Map dateSymbols = { 'tháng 11', 'tháng 12', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Tháng 1', 'Tháng 2', 'Tháng 3', @@ -16992,7 +16905,7 @@ const Map dateSymbols = { 'Tháng 11', 'Tháng 12', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'thg 1', 'thg 2', 'thg 3', @@ -17006,7 +16919,7 @@ const Map dateSymbols = { 'thg 11', 'thg 12', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Thg 1', 'Thg 2', 'Thg 3', @@ -17020,7 +16933,7 @@ const Map dateSymbols = { 'Thg 11', 'Thg 12', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'Chủ Nhật', 'Thứ Hai', 'Thứ Ba', @@ -17029,7 +16942,7 @@ const Map dateSymbols = { 'Thứ Sáu', 'Thứ Bảy', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'Chủ Nhật', 'Thứ Hai', 'Thứ Ba', @@ -17038,7 +16951,7 @@ const Map dateSymbols = { 'Thứ Sáu', 'Thứ Bảy', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'CN', 'Th 2', 'Th 3', @@ -17047,7 +16960,7 @@ const Map dateSymbols = { 'Th 6', 'Th 7', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'CN', 'Th 2', 'Th 3', @@ -17056,7 +16969,7 @@ const Map dateSymbols = { 'Th 6', 'Th 7', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'CN', 'T2', 'T3', @@ -17065,7 +16978,7 @@ const Map dateSymbols = { 'T6', 'T7', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'CN', 'T2', 'T3', @@ -17074,59 +16987,58 @@ const Map dateSymbols = { 'T6', 'T7', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ 'Quý 1', 'Quý 2', 'Quý 3', 'Quý 4', ], - 'AMPMS': [ + AMPMS: const [ 'SA', 'CH', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, d MMMM, y', 'd MMMM, y', 'd MMM, y', 'dd/MM/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 0, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 0, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 6, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 6, + DATETIMEFORMATS: const [ '{0} {1}', '{0} {1}', '{0}, {1}', '{0}, {1}', ], - }, - 'zh': { - 'NAME': 'zh', - 'ERAS': [ + ), + 'zh': intl.DateSymbols( + NAME: 'zh', + ERAS: const [ '公元前', '公元', ], - 'ERANAMES': [ + ERANAMES: const [ '公元前', '公元', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1', '2', '3', @@ -17140,7 +17052,7 @@ const Map dateSymbols = { '11', '12', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1', '2', '3', @@ -17154,7 +17066,7 @@ const Map dateSymbols = { '11', '12', ], - 'MONTHS': [ + MONTHS: const [ '一月', '二月', '三月', @@ -17168,7 +17080,7 @@ const Map dateSymbols = { '十一月', '十二月', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ '一月', '二月', '三月', @@ -17182,7 +17094,7 @@ const Map dateSymbols = { '十一月', '十二月', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ '1月', '2月', '3月', @@ -17196,7 +17108,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ '1月', '2月', '3月', @@ -17210,7 +17122,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ '星期日', '星期一', '星期二', @@ -17219,7 +17131,7 @@ const Map dateSymbols = { '星期五', '星期六', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ '星期日', '星期一', '星期二', @@ -17228,7 +17140,7 @@ const Map dateSymbols = { '星期五', '星期六', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ '周日', '周一', '周二', @@ -17237,7 +17149,7 @@ const Map dateSymbols = { '周五', '周六', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ '周日', '周一', '周二', @@ -17246,7 +17158,7 @@ const Map dateSymbols = { '周五', '周六', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ '日', '一', '二', @@ -17255,7 +17167,7 @@ const Map dateSymbols = { '五', '六', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ '日', '一', '二', @@ -17264,59 +17176,58 @@ const Map dateSymbols = { '五', '六', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '1季度', '2季度', '3季度', '4季度', ], - 'QUARTERS': [ + QUARTERS: const [ '第一季度', '第二季度', '第三季度', '第四季度', ], - 'AMPMS': [ + AMPMS: const [ '上午', '下午', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y年M月d日EEEE', 'y年M月d日', 'y年M月d日', 'y/M/d', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'zzzz ah:mm:ss', 'z ah:mm:ss', 'ah:mm:ss', 'ah:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'zh_HK': { - 'NAME': 'zh_HK', - 'ERAS': [ + ), + 'zh_HK': intl.DateSymbols( + NAME: 'zh_HK', + ERAS: const [ '公元前', '公元', ], - 'ERANAMES': [ + ERANAMES: const [ '公元前', '公元', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1', '2', '3', @@ -17330,7 +17241,7 @@ const Map dateSymbols = { '11', '12', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1', '2', '3', @@ -17344,7 +17255,7 @@ const Map dateSymbols = { '11', '12', ], - 'MONTHS': [ + MONTHS: const [ '1月', '2月', '3月', @@ -17358,7 +17269,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ '1月', '2月', '3月', @@ -17372,7 +17283,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ '1月', '2月', '3月', @@ -17386,7 +17297,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ '1月', '2月', '3月', @@ -17400,7 +17311,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ '星期日', '星期一', '星期二', @@ -17409,7 +17320,7 @@ const Map dateSymbols = { '星期五', '星期六', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ '星期日', '星期一', '星期二', @@ -17418,7 +17329,7 @@ const Map dateSymbols = { '星期五', '星期六', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ '週日', '週一', '週二', @@ -17427,7 +17338,7 @@ const Map dateSymbols = { '週五', '週六', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ '週日', '週一', '週二', @@ -17436,7 +17347,7 @@ const Map dateSymbols = { '週五', '週六', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ '日', '一', '二', @@ -17445,7 +17356,7 @@ const Map dateSymbols = { '五', '六', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ '日', '一', '二', @@ -17454,59 +17365,58 @@ const Map dateSymbols = { '五', '六', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ '第1季', '第2季', '第3季', '第4季', ], - 'AMPMS': [ + AMPMS: const [ '上午', '下午', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y年M月d日EEEE', 'y年M月d日', 'y年M月d日', 'd/M/y', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'ah:mm:ss [zzzz]', 'ah:mm:ss [z]', 'ah:mm:ss', 'ah:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'zh_TW': { - 'NAME': 'zh_TW', - 'ERAS': [ + ), + 'zh_TW': intl.DateSymbols( + NAME: 'zh_TW', + ERAS: const [ '西元前', '西元', ], - 'ERANAMES': [ + ERANAMES: const [ '西元前', '西元', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ '1', '2', '3', @@ -17520,7 +17430,7 @@ const Map dateSymbols = { '11', '12', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ '1', '2', '3', @@ -17534,7 +17444,7 @@ const Map dateSymbols = { '11', '12', ], - 'MONTHS': [ + MONTHS: const [ '1月', '2月', '3月', @@ -17548,7 +17458,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ '1月', '2月', '3月', @@ -17562,7 +17472,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ '1月', '2月', '3月', @@ -17576,7 +17486,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ '1月', '2月', '3月', @@ -17590,7 +17500,7 @@ const Map dateSymbols = { '11月', '12月', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ '星期日', '星期一', '星期二', @@ -17599,7 +17509,7 @@ const Map dateSymbols = { '星期五', '星期六', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ '星期日', '星期一', '星期二', @@ -17608,7 +17518,7 @@ const Map dateSymbols = { '星期五', '星期六', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ '週日', '週一', '週二', @@ -17617,7 +17527,7 @@ const Map dateSymbols = { '週五', '週六', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ '週日', '週一', '週二', @@ -17626,7 +17536,7 @@ const Map dateSymbols = { '週五', '週六', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ '日', '一', '二', @@ -17635,7 +17545,7 @@ const Map dateSymbols = { '五', '六', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ '日', '一', '二', @@ -17644,59 +17554,58 @@ const Map dateSymbols = { '五', '六', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ '第1季', '第2季', '第3季', '第4季', ], - 'QUARTERS': [ + QUARTERS: const [ '第1季', '第2季', '第3季', '第4季', ], - 'AMPMS': [ + AMPMS: const [ '上午', '下午', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'y年M月d日 EEEE', 'y年M月d日', 'y年M月d日', 'y/M/d', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'ah:mm:ss [zzzz]', 'ah:mm:ss [z]', 'ah:mm:ss', 'ah:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, - 'zu': { - 'NAME': 'zu', - 'ERAS': [ + ), + 'zu': intl.DateSymbols( + NAME: 'zu', + ERAS: const [ 'BC', 'AD', ], - 'ERANAMES': [ + ERANAMES: const [ 'BC', 'AD', ], - 'NARROWMONTHS': [ + NARROWMONTHS: const [ 'J', 'F', 'M', @@ -17710,7 +17619,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'STANDALONENARROWMONTHS': [ + STANDALONENARROWMONTHS: const [ 'J', 'F', 'M', @@ -17724,7 +17633,7 @@ const Map dateSymbols = { 'N', 'D', ], - 'MONTHS': [ + MONTHS: const [ 'Januwari', 'Februwari', 'Mashi', @@ -17738,7 +17647,7 @@ const Map dateSymbols = { 'Novemba', 'Disemba', ], - 'STANDALONEMONTHS': [ + STANDALONEMONTHS: const [ 'Januwari', 'Februwari', 'Mashi', @@ -17752,7 +17661,7 @@ const Map dateSymbols = { 'Novemba', 'Disemba', ], - 'SHORTMONTHS': [ + SHORTMONTHS: const [ 'Jan', 'Feb', 'Mas', @@ -17766,7 +17675,7 @@ const Map dateSymbols = { 'Nov', 'Dis', ], - 'STANDALONESHORTMONTHS': [ + STANDALONESHORTMONTHS: const [ 'Jan', 'Feb', 'Mas', @@ -17780,7 +17689,7 @@ const Map dateSymbols = { 'Nov', 'Dis', ], - 'WEEKDAYS': [ + WEEKDAYS: const [ 'ISonto', 'UMsombuluko', 'ULwesibili', @@ -17789,7 +17698,7 @@ const Map dateSymbols = { 'ULwesihlanu', 'UMgqibelo', ], - 'STANDALONEWEEKDAYS': [ + STANDALONEWEEKDAYS: const [ 'ISonto', 'UMsombuluko', 'ULwesibili', @@ -17798,7 +17707,7 @@ const Map dateSymbols = { 'ULwesihlanu', 'UMgqibelo', ], - 'SHORTWEEKDAYS': [ + SHORTWEEKDAYS: const [ 'Son', 'Mso', 'Bil', @@ -17807,7 +17716,7 @@ const Map dateSymbols = { 'Hla', 'Mgq', ], - 'STANDALONESHORTWEEKDAYS': [ + STANDALONESHORTWEEKDAYS: const [ 'Son', 'Mso', 'Bil', @@ -17816,7 +17725,7 @@ const Map dateSymbols = { 'Hla', 'Mgq', ], - 'NARROWWEEKDAYS': [ + NARROWWEEKDAYS: const [ 'S', 'M', 'B', @@ -17825,7 +17734,7 @@ const Map dateSymbols = { 'H', 'M', ], - 'STANDALONENARROWWEEKDAYS': [ + STANDALONENARROWWEEKDAYS: const [ 'S', 'M', 'B', @@ -17834,48 +17743,47 @@ const Map dateSymbols = { 'H', 'M', ], - 'SHORTQUARTERS': [ + SHORTQUARTERS: const [ 'Q1', 'Q2', 'Q3', 'Q4', ], - 'QUARTERS': [ + QUARTERS: const [ 'ikota yesi-1', 'ikota yesi-2', 'ikota yesi-3', 'ikota yesi-4', ], - 'AMPMS': [ + AMPMS: const [ 'AM', 'PM', ], - 'DATEFORMATS': [ + DATEFORMATS: const [ 'EEEE, MMMM d, y', 'MMMM d, y', 'MMM d, y', 'M/d/yy', ], - 'TIMEFORMATS': [ + TIMEFORMATS: const [ 'HH:mm:ss zzzz', 'HH:mm:ss z', 'HH:mm:ss', 'HH:mm', ], - 'AVAILABLEFORMATS': null, - 'FIRSTDAYOFWEEK': 6, - 'WEEKENDRANGE': [ + FIRSTDAYOFWEEK: 6, + WEEKENDRANGE: const [ 5, 6, ], - 'FIRSTWEEKCUTOFFDAY': 5, - 'DATETIMEFORMATS': [ + FIRSTWEEKCUTOFFDAY: 5, + DATETIMEFORMATS: const [ '{1} {0}', '{1} {0}', '{1} {0}', '{1} {0}', ], - }, + ), }; /// The subset of date patterns supported by the intl package which are also diff --git a/packages/flutter_localizations/lib/src/utils/date_localizations.dart b/packages/flutter_localizations/lib/src/utils/date_localizations.dart index 132e304dea39b..2bbf7750d1213 100644 --- a/packages/flutter_localizations/lib/src/utils/date_localizations.dart +++ b/packages/flutter_localizations/lib/src/utils/date_localizations.dart @@ -17,11 +17,9 @@ bool _dateIntlDataInitialized = false; void loadDateIntlDataIfNotLoaded() { if (!_dateIntlDataInitialized) { date_localizations.dateSymbols - .cast>() - .forEach((String locale, Map data) { + .forEach((String locale, intl.DateSymbols symbols) { // Perform initialization. assert(date_localizations.datePatterns.containsKey(locale)); - final intl.DateSymbols symbols = intl.DateSymbols.deserializeFromMap(data); date_symbol_data_custom.initializeDateFormattingCustom( locale: locale, symbols: symbols, From 3f2cb2418d1de4d240210d18dbca612ee1051165 Mon Sep 17 00:00:00 2001 From: Flutter GitHub Bot Date: Wed, 27 Apr 2022 11:19:08 -0700 Subject: [PATCH 119/141] Marks Mac tool_host_cross_arch_tests to be unflaky (#102659) --- .ci.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.ci.yaml b/.ci.yaml index 8d1b3c05ba48b..df7ec312c7466 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -2906,7 +2906,6 @@ targets: - name: Mac tool_host_cross_arch_tests recipe: flutter/flutter_drone - bringup: true timeout: 60 properties: add_recipes_cq: "true" From 0c3c38dccf87c17a46900c1f2c2e487b4571d078 Mon Sep 17 00:00:00 2001 From: Taha Tesser Date: Wed, 27 Apr 2022 22:04:03 +0300 Subject: [PATCH 120/141] [reland] Refactor ToggleButtons (remove RawMaterialButton) (#101760) --- .../lib/src/material/toggle_buttons.dart | 471 +++++++----------- .../test/material/toggle_buttons_test.dart | 166 +++++- .../material/toggle_buttons_theme_test.dart | 30 +- 3 files changed, 339 insertions(+), 328 deletions(-) diff --git a/packages/flutter/lib/src/material/toggle_buttons.dart b/packages/flutter/lib/src/material/toggle_buttons.dart index 98162907f4168..79e0406bcc43b 100644 --- a/packages/flutter/lib/src/material/toggle_buttons.dart +++ b/packages/flutter/lib/src/material/toggle_buttons.dart @@ -8,11 +8,12 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; -import 'button.dart'; +import 'button_style.dart'; import 'color_scheme.dart'; import 'constants.dart'; -import 'debug.dart'; +import 'ink_ripple.dart'; import 'material_state.dart'; +import 'text_button.dart'; import 'theme.dart'; import 'theme_data.dart'; import 'toggle_buttons_theme.dart'; @@ -667,45 +668,129 @@ class ToggleButtons extends StatelessWidget { final BorderSide borderSide = _getBorderSide(index, theme, toggleButtonsTheme); final BorderSide trailingBorderSide = _getTrailingBorderSide(index, theme, toggleButtonsTheme); - return _ToggleButton( - selected: isSelected[index], - textStyle: textStyle, - constraints: constraints, - color: color, - selectedColor: selectedColor, - disabledColor: disabledColor, - fillColor: fillColor, - focusColor: focusColor ?? toggleButtonsTheme.focusColor, - highlightColor: highlightColor ?? toggleButtonsTheme.highlightColor, - hoverColor: hoverColor ?? toggleButtonsTheme.hoverColor, - splashColor: splashColor ?? toggleButtonsTheme.splashColor, - focusNode: focusNodes != null ? focusNodes![index] : null, - onPressed: onPressed != null - ? () {onPressed!(index);} - : null, - mouseCursor: mouseCursor, + final Set states = { + if (isSelected[index] && onPressed != null) MaterialState.selected, + if (onPressed == null) MaterialState.disabled, + }; + final Color effectiveFillColor = _ResolveFillColor(fillColor + ?? toggleButtonsTheme.fillColor).resolve(states) + ?? _DefaultFillColor(theme.colorScheme).resolve(states); + final Color currentColor; + if (onPressed != null && isSelected[index]) { + currentColor = selectedColor + ?? toggleButtonsTheme.selectedColor + ?? theme.colorScheme.primary; + } else if (onPressed != null && !isSelected[index]) { + currentColor = color + ?? toggleButtonsTheme.color + ?? theme.colorScheme.onSurface.withOpacity(0.87); + } else { + currentColor = disabledColor + ?? toggleButtonsTheme.disabledColor + ?? theme.colorScheme.onSurface.withOpacity(0.38); + } + final TextStyle currentTextStyle = textStyle + ?? toggleButtonsTheme.textStyle + ?? theme.textTheme.bodyText2!; + final BoxConstraints? currentConstraints = constraints + ?? toggleButtonsTheme.constraints; + final Size minimumSize = currentConstraints == null + ? const Size.square(kMinInteractiveDimension) + : Size(currentConstraints.minWidth, currentConstraints.minHeight); + final Size? maximumSize = currentConstraints == null + ? null + : Size(currentConstraints.maxWidth, currentConstraints.maxHeight); + final Size minPaddingSize; + switch (tapTargetSize ?? theme.materialTapTargetSize) { + case MaterialTapTargetSize.padded: + if (direction == Axis.horizontal) { + minPaddingSize = const Size( + 0.0, + kMinInteractiveDimension, + ); + } else { + minPaddingSize = const Size( + kMinInteractiveDimension, + 0.0, + ); + } + assert(minPaddingSize.width >= 0.0); + assert(minPaddingSize.height >= 0.0); + break; + case MaterialTapTargetSize.shrinkWrap: + minPaddingSize = Size.zero; + break; + } + + Widget button = _SelectToggleButton( leadingBorderSide: leadingBorderSide, borderSide: borderSide, trailingBorderSide: trailingBorderSide, borderRadius: edgeBorderRadius, - clipRadius: clipBorderRadius, isFirstButton: index == 0, isLastButton: index == children.length - 1, direction: direction, verticalDirection: verticalDirection, - child: children[index], + child: ClipRRect( + borderRadius: clipBorderRadius, + child: TextButton( + focusNode: focusNodes != null ? focusNodes![index] : null, + style: ButtonStyle( + backgroundColor: MaterialStateProperty.all(effectiveFillColor), + foregroundColor: MaterialStateProperty.all(currentColor), + overlayColor: _ToggleButtonDefaultOverlay( + selected: onPressed != null && isSelected[index], + unselected: onPressed != null && !isSelected[index], + colorScheme: theme.colorScheme, + disabledColor: disabledColor ?? toggleButtonsTheme.disabledColor, + focusColor: focusColor ?? toggleButtonsTheme.focusColor, + highlightColor: highlightColor ?? toggleButtonsTheme.highlightColor, + hoverColor: hoverColor ?? toggleButtonsTheme.hoverColor, + splashColor: splashColor ?? toggleButtonsTheme.splashColor, + ), + elevation: MaterialStateProperty.all(0), + textStyle: MaterialStateProperty.all(currentTextStyle.copyWith( + color: currentColor, + )), + padding: MaterialStateProperty.all(EdgeInsets.zero), + minimumSize: MaterialStateProperty.all(minimumSize), + maximumSize: MaterialStateProperty.all(maximumSize), + shape: MaterialStateProperty.all(const RoundedRectangleBorder()), + mouseCursor: MaterialStateProperty.all(mouseCursor), + visualDensity: VisualDensity.standard, + tapTargetSize: MaterialTapTargetSize.shrinkWrap, + animationDuration: kThemeChangeDuration, + enableFeedback: true, + alignment: Alignment.center, + splashFactory: InkRipple.splashFactory, + ), + onPressed: onPressed != null + ? () {onPressed!(index);} + : null, + child: children[index], + ), + ), ); - }); - final Widget result = direction == Axis.horizontal - ? IntrinsicHeight( - child: Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: buttons, + if (currentConstraints != null) { + button = Center(child: button); + } + + return MergeSemantics( + child: Semantics( + container: true, + enabled: onPressed != null, + child: _InputPadding( + minSize: minPaddingSize, + direction: direction, + child: button, + ), ), - ) - : IntrinsicWidth( + ); + }); + + if (direction == Axis.vertical) { + return IntrinsicWidth( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, @@ -713,18 +798,15 @@ class ToggleButtons extends StatelessWidget { children: buttons, ), ); - - final MaterialTapTargetSize resolvedTapTargetSize = tapTargetSize ?? theme.materialTapTargetSize; - switch (resolvedTapTargetSize) { - case MaterialTapTargetSize.padded: - return _InputPadding( - minSize: const Size(kMinInteractiveDimension, kMinInteractiveDimension), - direction: direction, - child: result, - ); - case MaterialTapTargetSize.shrinkWrap: - return result; } + + return IntrinsicHeight( + child: Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: buttons, + ), + ); } @override @@ -754,250 +836,6 @@ class ToggleButtons extends StatelessWidget { } } -/// An individual toggle button, otherwise known as a segmented button. -/// -/// This button is used by [ToggleButtons] to implement a set of segmented controls. -class _ToggleButton extends StatelessWidget { - /// Creates a toggle button based on [RawMaterialButton]. - /// - /// This class adds some logic to distinguish between enabled, active, and - /// disabled states, to determine the appropriate colors to use. - /// - /// It takes in a [shape] property to modify the borders of the button, - /// which is used by [ToggleButtons] to customize borders based on the - /// order in which this button appears in the list. - const _ToggleButton({ - this.selected = false, - this.textStyle, - this.constraints, - this.color, - this.selectedColor, - this.disabledColor, - required this.fillColor, - required this.focusColor, - required this.highlightColor, - required this.hoverColor, - required this.splashColor, - this.focusNode, - this.onPressed, - this.mouseCursor, - required this.leadingBorderSide, - required this.borderSide, - required this.trailingBorderSide, - required this.borderRadius, - required this.clipRadius, - required this.isFirstButton, - required this.isLastButton, - required this.direction, - required this.verticalDirection, - required this.child, - }); - - /// Determines if the button is displayed as active/selected or enabled. - final bool selected; - - /// The [TextStyle] to apply to any text that appears in this button. - final TextStyle? textStyle; - - /// Defines the button's size. - /// - /// Typically used to constrain the button's minimum size. - final BoxConstraints? constraints; - - /// The color for [Text] and [Icon] widgets if the button is enabled. - /// - /// If [selected] is false and [onPressed] is not null, this color will be used. - final Color? color; - - /// The color for [Text] and [Icon] widgets if the button is selected. - /// - /// If [selected] is true and [onPressed] is not null, this color will be used. - final Color? selectedColor; - - /// The color for [Text] and [Icon] widgets if the button is disabled. - /// - /// If [onPressed] is null, this color will be used. - final Color? disabledColor; - - /// The color of the button's [Material]. - final Color? fillColor; - - /// The color for the button's [Material] when it has the input focus. - final Color? focusColor; - - /// The color for the button's [Material] when a pointer is hovering over it. - final Color? hoverColor; - - /// The highlight color for the button's [InkWell]. - final Color? highlightColor; - - /// The splash color for the button's [InkWell]. - final Color? splashColor; - - /// {@macro flutter.widgets.Focus.focusNode} - final FocusNode? focusNode; - - /// Called when the button is tapped or otherwise activated. - /// - /// If this is null, the button will be disabled, see [enabled]. - final VoidCallback? onPressed; - - /// {@macro flutter.material.RawMaterialButton.mouseCursor} - /// - /// If this property is null, [MaterialStateMouseCursor.clickable] will be used. - final MouseCursor? mouseCursor; - - /// The width and color of the button's leading side border. - final BorderSide leadingBorderSide; - - /// If [direction] is [Axis.horizontal], this corresponds the width and color - /// of the button's top and bottom side borders. - /// - /// If [direction] is [Axis.vertical], this corresponds the width and color - /// of the button's left and right side borders. - final BorderSide borderSide; - - /// The width and color of the button's trailing side border. - final BorderSide trailingBorderSide; - - /// The border radii of each corner of the button. - final BorderRadius borderRadius; - - /// The corner radii used to clip the button's contents. - /// - /// This is used to have the button's contents be properly clipped taking - /// the [borderRadius] and the border's width into account. - final BorderRadius clipRadius; - - /// Whether or not this toggle button is the first button in the list. - final bool isFirstButton; - - /// Whether or not this toggle button is the last button in the list. - final bool isLastButton; - - /// The direction along which the buttons are rendered. - final Axis direction; - - /// If [direction] is [Axis.vertical], this property defines whether or not this button in its list - /// of buttons is laid out starting from top to bottom or from bottom to top. - final VerticalDirection verticalDirection; - - /// The button's label, which is usually an [Icon] or a [Text] widget. - final Widget child; - - Color _resolveColor(Set states, MaterialStateProperty widgetColor, - MaterialStateProperty themeColor, MaterialStateProperty defaultColor) { - return widgetColor.resolve(states) - ?? themeColor.resolve(states) - ?? defaultColor.resolve(states); - } - - @override - Widget build(BuildContext context) { - assert(debugCheckHasMaterial(context)); - final Color currentColor; - Color? currentFocusColor; - Color? currentHoverColor; - Color? currentSplashColor; - final ThemeData theme = Theme.of(context); - final ToggleButtonsThemeData toggleButtonsTheme = ToggleButtonsTheme.of(context); - - final Set states = { - if (selected && onPressed != null) MaterialState.selected, - if (onPressed == null) MaterialState.disabled, - }; - - final Color currentFillColor = _resolveColor( - states, - _ResolveFillColor(fillColor), - _ResolveFillColor(toggleButtonsTheme.fillColor), - _DefaultFillColor(theme.colorScheme), - ); - - if (onPressed != null && selected) { - currentColor = selectedColor - ?? toggleButtonsTheme.selectedColor - ?? theme.colorScheme.primary; - currentFocusColor = focusColor - ?? toggleButtonsTheme.focusColor - ?? theme.colorScheme.primary.withOpacity(0.12); - currentHoverColor = hoverColor - ?? toggleButtonsTheme.hoverColor - ?? theme.colorScheme.primary.withOpacity(0.04); - currentSplashColor = splashColor - ?? toggleButtonsTheme.splashColor - ?? theme.colorScheme.primary.withOpacity(0.16); - } else if (onPressed != null && !selected) { - currentColor = color - ?? toggleButtonsTheme.color - ?? theme.colorScheme.onSurface.withOpacity(0.87); - currentFocusColor = focusColor - ?? toggleButtonsTheme.focusColor - ?? theme.colorScheme.onSurface.withOpacity(0.12); - currentHoverColor = hoverColor - ?? toggleButtonsTheme.hoverColor - ?? theme.colorScheme.onSurface.withOpacity(0.04); - currentSplashColor = splashColor - ?? toggleButtonsTheme.splashColor - ?? theme.colorScheme.onSurface.withOpacity(0.16); - } else { - currentColor = disabledColor - ?? toggleButtonsTheme.disabledColor - ?? theme.colorScheme.onSurface.withOpacity(0.38); - } - - final TextStyle currentTextStyle = textStyle ?? toggleButtonsTheme.textStyle ?? theme.textTheme.bodyText2!; - final BoxConstraints currentConstraints = constraints ?? toggleButtonsTheme.constraints ?? const BoxConstraints(minWidth: kMinInteractiveDimension, minHeight: kMinInteractiveDimension); - - final Widget result = ClipRRect( - borderRadius: clipRadius, - child: RawMaterialButton( - textStyle: currentTextStyle.copyWith( - color: currentColor, - ), - constraints: currentConstraints, - elevation: 0.0, - fillColor: currentFillColor, - focusColor: currentFocusColor, - focusElevation: 0, - highlightColor: highlightColor ?? theme.colorScheme.surface.withOpacity(0.0), - highlightElevation: 0.0, - hoverColor: currentHoverColor, - hoverElevation: 0, - splashColor: currentSplashColor, - focusNode: focusNode, - materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - onPressed: onPressed, - mouseCursor: mouseCursor, - child: child, - ), - ); - - return _SelectToggleButton( - key: key, - leadingBorderSide: leadingBorderSide, - borderSide: borderSide, - trailingBorderSide: trailingBorderSide, - borderRadius: borderRadius, - isFirstButton: isFirstButton, - isLastButton: isLastButton, - direction: direction, - verticalDirection: verticalDirection, - child: result, - ); - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties.add(FlagProperty('selected', - value: selected, - ifTrue: 'Button is selected', - ifFalse: 'Button is unselected', - )); - } -} - @immutable class _ResolveFillColor extends MaterialStateProperty with Diagnosticable { _ResolveFillColor(this.primary); @@ -1028,9 +866,70 @@ class _DefaultFillColor extends MaterialStateProperty with Diagnosticable } } +@immutable +class _ToggleButtonDefaultOverlay extends MaterialStateProperty { + _ToggleButtonDefaultOverlay({ + required this.selected, + required this.unselected, + this.colorScheme, + this.focusColor, + this.highlightColor, + this.hoverColor, + this.splashColor, + this.disabledColor, + }); + + final bool selected; + final bool unselected; + final ColorScheme? colorScheme; + final Color? focusColor; + final Color? highlightColor; + final Color? hoverColor; + final Color? splashColor; + final Color? disabledColor; + + @override + Color? resolve(Set states) { + if (selected) { + if (states.contains(MaterialState.hovered)) { + return hoverColor ?? colorScheme?.primary.withOpacity(0.04); + } else if (states.contains(MaterialState.focused)) { + return focusColor ?? colorScheme?.primary.withOpacity(0.12); + } else if (states.contains(MaterialState.pressed)) { + return splashColor ?? colorScheme?.primary.withOpacity(0.16); + } + } else if (unselected) { + if (states.contains(MaterialState.hovered)) { + return hoverColor ?? colorScheme?.onSurface.withOpacity(0.04); + } else if (states.contains(MaterialState.focused)) { + return focusColor ?? colorScheme?.onSurface.withOpacity(0.12); + } else if (states.contains(MaterialState.pressed)) { + return splashColor ?? highlightColor ?? colorScheme?.onSurface.withOpacity(0.16); + } + } + return null; + } + + @override + String toString() { + return ''' + { + selected: + hovered: $hoverColor, otherwise: ${colorScheme?.primary.withOpacity(0.04)}, + focused: $focusColor, otherwise: ${colorScheme?.primary.withOpacity(0.12)}, + pressed: $splashColor, otherwise: ${colorScheme?.primary.withOpacity(0.16)}, + unselected: + hovered: $hoverColor, otherwise: ${colorScheme?.onSurface.withOpacity(0.04)}, + focused: $focusColor, otherwise: ${colorScheme?.onSurface.withOpacity(0.12)}, + pressed: $splashColor, otherwise: ${colorScheme?.onSurface.withOpacity(0.16)}, + otherwise: null, + } + '''; + } +} + class _SelectToggleButton extends SingleChildRenderObjectWidget { const _SelectToggleButton({ - super.key, required Widget super.child, required this.leadingBorderSide, required this.borderSide, diff --git a/packages/flutter/test/material/toggle_buttons_test.dart b/packages/flutter/test/material/toggle_buttons_test.dart index 55ddfa378f67d..b566d912f66ea 100644 --- a/packages/flutter/test/material/toggle_buttons_test.dart +++ b/packages/flutter/test/material/toggle_buttons_test.dart @@ -12,6 +12,7 @@ import 'package:flutter/rendering.dart'; import 'package:flutter_test/flutter_test.dart'; import '../rendering/mock_canvas.dart'; +import '../widgets/semantics_tester.dart'; const double _defaultBorderWidth = 1.0; @@ -26,7 +27,7 @@ void main() { testWidgets('Initial toggle state is reflected', (WidgetTester tester) async { TextStyle buttonTextStyle(String text) { return tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, text), + of: find.widgetWithText(TextButton, text), matching: find.byType(DefaultTextStyle), )).style; } @@ -61,11 +62,10 @@ void main() { (WidgetTester tester) async { TextStyle buttonTextStyle(String text) { return tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, text), + of: find.widgetWithText(TextButton, text), matching: find.byType(DefaultTextStyle), )).style; } - final List isSelected = [false, true]; final ThemeData theme = ThemeData(); await tester.pumpWidget( @@ -123,7 +123,7 @@ void main() { (WidgetTester tester) async { TextStyle buttonTextStyle(String text) { return tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, text), + of: find.widgetWithText(TextButton, text), matching: find.byType(DefaultTextStyle), )).style; } @@ -220,14 +220,14 @@ void main() { TextStyle textStyle; textStyle = tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, 'First child'), + of: find.widgetWithText(TextButton, 'First child'), matching: find.byType(DefaultTextStyle), )).style; expect(textStyle.fontFamily, theme.textTheme.bodyText2!.fontFamily); expect(textStyle.decoration, theme.textTheme.bodyText2!.decoration); textStyle = tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, 'Second child'), + of: find.widgetWithText(TextButton, 'Second child'), matching: find.byType(DefaultTextStyle), )).style; expect(textStyle.fontFamily, theme.textTheme.bodyText2!.fontFamily); @@ -257,7 +257,7 @@ void main() { TextStyle textStyle; textStyle = tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, 'First child'), + of: find.widgetWithText(TextButton, 'First child'), matching: find.byType(DefaultTextStyle), )).style; expect(textStyle.textBaseline, TextBaseline.ideographic); @@ -265,7 +265,7 @@ void main() { expect(textStyle.color, isNot(Colors.orange)); textStyle = tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, 'Second child'), + of: find.widgetWithText(TextButton, 'Second child'), matching: find.byType(DefaultTextStyle), )).style; expect(textStyle.textBaseline, TextBaseline.ideographic); @@ -290,13 +290,13 @@ void main() { ), ); - final Rect firstRect = tester.getRect(find.byType(RawMaterialButton).at(0)); + final Rect firstRect = tester.getRect(find.byType(TextButton).at(0)); expect(firstRect.width, 48.0); expect(firstRect.height, 48.0); - final Rect secondRect = tester.getRect(find.byType(RawMaterialButton).at(1)); + final Rect secondRect = tester.getRect(find.byType(TextButton).at(1)); expect(secondRect.width, 48.0); expect(secondRect.height, 48.0); - final Rect thirdRect = tester.getRect(find.byType(RawMaterialButton).at(2)); + final Rect thirdRect = tester.getRect(find.byType(TextButton).at(2)); expect(thirdRect.width, 48.0); expect(thirdRect.height, 48.0); }); @@ -323,13 +323,13 @@ void main() { ), ); - Rect firstRect = tester.getRect(find.byType(RawMaterialButton).at(0)); + Rect firstRect = tester.getRect(find.byType(TextButton).at(0)); expect(firstRect.width, 50.0); expect(firstRect.height, 60.0); - Rect secondRect = tester.getRect(find.byType(RawMaterialButton).at(1)); + Rect secondRect = tester.getRect(find.byType(TextButton).at(1)); expect(secondRect.width, 50.0); expect(secondRect.height, 60.0); - Rect thirdRect = tester.getRect(find.byType(RawMaterialButton).at(2)); + Rect thirdRect = tester.getRect(find.byType(TextButton).at(2)); expect(thirdRect.width, 50.0); expect(thirdRect.height, 60.0); @@ -338,6 +338,7 @@ void main() { Material( child: boilerplate( child: ToggleButtons( + tapTargetSize: MaterialTapTargetSize.shrinkWrap, constraints: const BoxConstraints( maxWidth: 20.0, maxHeight: 10.0, @@ -354,13 +355,13 @@ void main() { ), ); - firstRect = tester.getRect(find.byType(RawMaterialButton).at(0)); + firstRect = tester.getRect(find.byType(TextButton).at(0)); expect(firstRect.width, 20.0); expect(firstRect.height, 10.0); - secondRect = tester.getRect(find.byType(RawMaterialButton).at(1)); + secondRect = tester.getRect(find.byType(TextButton).at(1)); expect(secondRect.width, 20.0); expect(secondRect.height, 10.0); - thirdRect = tester.getRect(find.byType(RawMaterialButton).at(2)); + thirdRect = tester.getRect(find.byType(TextButton).at(2)); expect(thirdRect.width, 20.0); expect(thirdRect.height, 10.0); }); @@ -370,13 +371,13 @@ void main() { (WidgetTester tester) async { TextStyle buttonTextStyle(String text) { return tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, text), + of: find.widgetWithText(TextButton, text), matching: find.byType(DefaultTextStyle), )).style; } IconTheme iconTheme(IconData icon) { return tester.widget(find.descendant( - of: find.widgetWithIcon(RawMaterialButton, icon), + of: find.widgetWithIcon(TextButton, icon), matching: find.byType(IconTheme), )); } @@ -468,13 +469,13 @@ void main() { (WidgetTester tester) async { TextStyle buttonTextStyle(String text) { return tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, text), + of: find.widgetWithText(TextButton, text), matching: find.byType(DefaultTextStyle), )).style; } IconTheme iconTheme(IconData icon) { return tester.widget(find.descendant( - of: find.widgetWithIcon(RawMaterialButton, icon), + of: find.widgetWithIcon(TextButton, icon), matching: find.byType(IconTheme), )); } @@ -574,7 +575,7 @@ void main() { ); final Material material = tester.widget(find.descendant( - of: find.byType(RawMaterialButton), + of: find.byType(TextButton), matching: find.byType(Material), )); expect( @@ -603,7 +604,7 @@ void main() { ); final Material material = tester.widget(find.descendant( - of: find.byType(RawMaterialButton), + of: find.byType(TextButton), matching: find.byType(Material), )); expect( @@ -631,7 +632,7 @@ void main() { ); final Material material = tester.widget(find.descendant( - of: find.byType(RawMaterialButton), + of: find.byType(TextButton), matching: find.byType(Material), )); expect( @@ -661,7 +662,7 @@ void main() { ); final Material material = tester.widget(find.descendant( - of: find.byType(RawMaterialButton), + of: find.byType(TextButton), matching: find.byType(Material), )); expect(material.color, customFillColor); @@ -672,7 +673,7 @@ void main() { Material buttonColor(String text) { return tester.widget( find.descendant( - of: find.byType(RawMaterialButton), + of: find.byType(TextButton), matching: find.widgetWithText(Material, text), ), ); @@ -727,7 +728,7 @@ void main() { Material buttonColor(String text) { return tester.widget( find.descendant( - of: find.byType(RawMaterialButton), + of: find.byType(TextButton), matching: find.widgetWithText(Material, text), ), ); @@ -1936,4 +1937,115 @@ void main() { await hoverGesture.removePointer(); }); + + testWidgets('Toggle buttons height matches MaterialTapTargetSize.padded height', (WidgetTester tester) async { + await tester.pumpWidget( + Material( + child: boilerplate( + child: ToggleButtons( + isSelected: const [false, false, false], + onPressed: (int index) {}, + children: const [ + Icon(Icons.check), + Icon(Icons.access_alarm), + Icon(Icons.cake), + ], + ), + ), + ), + ); + + final Rect firstRect = tester.getRect(find.byType(TextButton).at(0)); + expect(firstRect.height, 48.0); + final Rect secondRect = tester.getRect(find.byType(TextButton).at(1)); + expect(secondRect.height, 48.0); + final Rect thirdRect = tester.getRect(find.byType(TextButton).at(2)); + expect(thirdRect.height, 48.0); + }); + + testWidgets('Toggle buttons constraints size does not affect minimum input padding', (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/97302 + final SemanticsTester semantics = SemanticsTester(tester); + + await tester.pumpWidget( + Material( + child: boilerplate( + child: ToggleButtons( + isSelected: const [false, false, false], + onPressed: (int index) {}, + constraints: const BoxConstraints.tightFor( + width: 86, + height: 32, + ), + children: const [ + Icon(Icons.check), + Icon(Icons.access_alarm), + Icon(Icons.cake), + ], + ), + ), + ), + ); + + // Button's height is constrained to `32.0`. + final Rect firstRect = tester.getRect(find.byType(TextButton).at(0)); + expect(firstRect.height, 32.0); + final Rect secondRect = tester.getRect(find.byType(TextButton).at(1)); + expect(secondRect.height, 32.0); + final Rect thirdRect = tester.getRect(find.byType(TextButton).at(2)); + expect(thirdRect.height, 32.0); + + // While button's height is constrained to `32.0`, semantic node height + // should remain `48.0`, matching `MaterialTapTargetSize.padded` height (default). + expect( + semantics, + hasSemantics( + TestSemantics.root( + children: [ + TestSemantics( + flags: [ + SemanticsFlag.isButton, + SemanticsFlag.isEnabled, + SemanticsFlag.hasEnabledState, + SemanticsFlag.isFocusable, + ], + actions: [ + SemanticsAction.tap, + ], + rect: const Rect.fromLTRB(0.0, 0.0, 87.0, 48.0), + ), + TestSemantics( + flags: [ + SemanticsFlag.isButton, + SemanticsFlag.isEnabled, + SemanticsFlag.hasEnabledState, + SemanticsFlag.isFocusable, + ], + actions: [ + SemanticsAction.tap, + ], + rect: const Rect.fromLTRB(0.0, 0.0, 88.0, 48.0) + ), + TestSemantics( + flags: [ + SemanticsFlag.isButton, + SemanticsFlag.isEnabled, + SemanticsFlag.hasEnabledState, + SemanticsFlag.isFocusable, + ], + actions: [ + SemanticsAction.tap, + ], + rect: const Rect.fromLTRB(0.0, 0.0, 88.0, 48.0), + ), + ], + ), + ignoreId: true, + ignoreRect: true, + ignoreTransform: true, + ), + ); + + semantics.dispose(); + }); } diff --git a/packages/flutter/test/material/toggle_buttons_theme_test.dart b/packages/flutter/test/material/toggle_buttons_theme_test.dart index 5d26f85065166..725f3cc0f26b3 100644 --- a/packages/flutter/test/material/toggle_buttons_theme_test.dart +++ b/packages/flutter/test/material/toggle_buttons_theme_test.dart @@ -142,15 +142,15 @@ void main() { TextStyle textStyle; textStyle = tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, 'First child'), - matching: find.byType(DefaultTextStyle), + of: find.widgetWithText(TextButton, 'First child'), + matching: find.byType(DefaultTextStyle), )).style; expect(textStyle.textBaseline, TextBaseline.ideographic); expect(textStyle.fontSize, 20.0); expect(textStyle.color, isNot(Colors.orange)); textStyle = tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, 'Second child'), + of: find.widgetWithText(TextButton, 'Second child'), matching: find.byType(DefaultTextStyle), )).style; expect(textStyle.textBaseline, TextBaseline.ideographic); @@ -171,6 +171,7 @@ void main() { ), ), child: ToggleButtons( + tapTargetSize: MaterialTapTargetSize.shrinkWrap, isSelected: const [false, false, false], onPressed: (int index) {}, children: const [ @@ -184,13 +185,13 @@ void main() { ), ); - Rect firstRect = tester.getRect(find.byType(RawMaterialButton).at(0)); + Rect firstRect = tester.getRect(find.byType(TextButton).at(0)); expect(firstRect.width, 50.0); expect(firstRect.height, 60.0); - Rect secondRect = tester.getRect(find.byType(RawMaterialButton).at(1)); + Rect secondRect = tester.getRect(find.byType(TextButton).at(1)); expect(secondRect.width, 50.0); expect(secondRect.height, 60.0); - Rect thirdRect = tester.getRect(find.byType(RawMaterialButton).at(2)); + Rect thirdRect = tester.getRect(find.byType(TextButton).at(2)); expect(thirdRect.width, 50.0); expect(thirdRect.height, 60.0); @@ -206,6 +207,7 @@ void main() { ), ), child: ToggleButtons( + tapTargetSize: MaterialTapTargetSize.shrinkWrap, isSelected: const [false, false, false], onPressed: (int index) {}, children: const [ @@ -219,13 +221,13 @@ void main() { ), ); - firstRect = tester.getRect(find.byType(RawMaterialButton).at(0)); + firstRect = tester.getRect(find.byType(TextButton).at(0)); expect(firstRect.width, 20.0); expect(firstRect.height, 10.0); - secondRect = tester.getRect(find.byType(RawMaterialButton).at(1)); + secondRect = tester.getRect(find.byType(TextButton).at(1)); expect(secondRect.width, 20.0); expect(secondRect.height, 10.0); - thirdRect = tester.getRect(find.byType(RawMaterialButton).at(2)); + thirdRect = tester.getRect(find.byType(TextButton).at(2)); expect(thirdRect.width, 20.0); expect(thirdRect.height, 10.0); }); @@ -235,13 +237,13 @@ void main() { (WidgetTester tester) async { TextStyle buttonTextStyle(String text) { return tester.widget(find.descendant( - of: find.widgetWithText(RawMaterialButton, text), + of: find.widgetWithText(TextButton, text), matching: find.byType(DefaultTextStyle), )).style; } IconTheme iconTheme(IconData icon) { return tester.widget(find.descendant( - of: find.widgetWithIcon(RawMaterialButton, icon), + of: find.widgetWithIcon(TextButton, icon), matching: find.byType(IconTheme), )); } @@ -356,7 +358,7 @@ void main() { ); final Material material = tester.widget(find.descendant( - of: find.byType(RawMaterialButton), + of: find.byType(TextButton), matching: find.byType(Material), )); expect(material.color, customFillColor); @@ -367,7 +369,7 @@ void main() { Material buttonColor(String text) { return tester.widget( find.descendant( - of: find.byType(RawMaterialButton), + of: find.byType(TextButton), matching: find.widgetWithText(Material, text), ), ); @@ -476,7 +478,6 @@ void main() { inkFeatures, paints ..circle(color: splashColor) - ..rect(color: highlightColor), ); await touchGesture.up(); @@ -507,7 +508,6 @@ void main() { await hoverGesture.removePointer(); }); - testWidgets( 'Theme border width and border colors for enabled, selected and disabled states', (WidgetTester tester) async { From 14a9b4a7512c9bc40d0417672a87276bd48df2ad Mon Sep 17 00:00:00 2001 From: Darren Austin Date: Wed, 27 Apr 2022 12:04:36 -0700 Subject: [PATCH 121/141] Migrate AppBar to Material 3 (#101884) --- dev/tools/gen_defaults/bin/gen_defaults.dart | 2 + .../gen_defaults/lib/app_bar_template.dart | 58 +++++ .../flutter/lib/src/material/app_bar.dart | 217 +++++++++++++--- .../lib/src/material/app_bar_theme.dart | 22 ++ .../flutter/lib/src/material/material.dart | 33 ++- .../flutter/lib/src/material/theme_data.dart | 1 + .../flutter/test/material/app_bar_test.dart | 130 +++++++--- .../test/material/app_bar_theme_test.dart | 240 +++++++++++++----- 8 files changed, 554 insertions(+), 149 deletions(-) create mode 100644 dev/tools/gen_defaults/lib/app_bar_template.dart diff --git a/dev/tools/gen_defaults/bin/gen_defaults.dart b/dev/tools/gen_defaults/bin/gen_defaults.dart index 0694020d09d94..d2b4fc53a0e90 100644 --- a/dev/tools/gen_defaults/bin/gen_defaults.dart +++ b/dev/tools/gen_defaults/bin/gen_defaults.dart @@ -17,6 +17,7 @@ import 'dart:convert'; import 'dart:io'; +import 'package:gen_defaults/app_bar_template.dart'; import 'package:gen_defaults/button_template.dart'; import 'package:gen_defaults/card_template.dart'; import 'package:gen_defaults/dialog_template.dart'; @@ -78,6 +79,7 @@ Future main(List args) async { tokens['colorsLight'] = _readTokenFile('color_light.json'); tokens['colorsDark'] = _readTokenFile('color_dark.json'); + AppBarTemplate('$materialLib/app_bar.dart', tokens).updateFile(); ButtonTemplate('md.comp.elevated-button', '$materialLib/elevated_button.dart', tokens).updateFile(); ButtonTemplate('md.comp.outlined-button', '$materialLib/outlined_button.dart', tokens).updateFile(); ButtonTemplate('md.comp.text-button', '$materialLib/text_button.dart', tokens).updateFile(); diff --git a/dev/tools/gen_defaults/lib/app_bar_template.dart b/dev/tools/gen_defaults/lib/app_bar_template.dart new file mode 100644 index 0000000000000..06b2ddfe028c4 --- /dev/null +++ b/dev/tools/gen_defaults/lib/app_bar_template.dart @@ -0,0 +1,58 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'template.dart'; + +class AppBarTemplate extends TokenTemplate { + const AppBarTemplate(super.fileName, super.tokens) + : super( + colorSchemePrefix: '_colors.', + textThemePrefix: '_textTheme.', + ); + + @override + String generate() => ''' +// Generated version ${tokens["version"]} +class _TokenDefaultsM3 extends AppBarTheme { + _TokenDefaultsM3(this.context) + : super( + elevation: ${elevation('md.comp.top-app-bar.small.container')}, + scrolledUnderElevation: ${elevation('md.comp.top-app-bar.small.on-scroll.container')}, + titleSpacing: NavigationToolbar.kMiddleSpacing, + toolbarHeight: ${tokens['md.comp.top-app-bar.small.container.height']}, + ); + + final BuildContext context; + late final ThemeData _theme = Theme.of(context); + late final ColorScheme _colors = _theme.colorScheme; + late final TextTheme _textTheme = _theme.textTheme; + + @override + Color? get backgroundColor => ${componentColor('md.comp.top-app-bar.small.container')}; + + @override + Color? get foregroundColor => ${color('md.comp.top-app-bar.small.headline.color')}; + + @override + Color? get surfaceTintColor => ${componentColor('md.comp.top-app-bar.small.container.surface-tint-layer')}; + + @override + IconThemeData? get iconTheme => IconThemeData( + color: ${componentColor('md.comp.top-app-bar.small.leading-icon')}, + size: ${tokens['md.comp.top-app-bar.small.leading-icon.size']}, + ); + + @override + IconThemeData? get actionsIconTheme => IconThemeData( + color: ${componentColor('md.comp.top-app-bar.small.trailing-icon')}, + size: ${tokens['md.comp.top-app-bar.small.trailing-icon.size']}, + ); + + @override + TextStyle? get toolbarTextStyle => _textTheme.bodyText2; + + @override + TextStyle? get titleTextStyle => ${textStyle('md.comp.top-app-bar.small.headline')}; +}'''; +} diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart index d3fc244a35215..85cfd19b96236 100644 --- a/packages/flutter/lib/src/material/app_bar.dart +++ b/packages/flutter/lib/src/material/app_bar.dart @@ -161,7 +161,9 @@ class AppBar extends StatefulWidget implements PreferredSizeWidget { this.flexibleSpace, this.bottom, this.elevation, + this.scrolledUnderElevation, this.shadowColor, + this.surfaceTintColor, this.shape, this.backgroundColor, this.foregroundColor, @@ -372,7 +374,12 @@ class AppBar extends StatefulWidget implements PreferredSizeWidget { /// {@template flutter.material.appbar.elevation} /// The z-coordinate at which to place this app bar relative to its parent. /// - /// This property controls the size of the shadow below the app bar. + /// This property controls the size of the shadow below the app bar if + /// [shadowColor] is not null. + /// + /// If [surfaceTintColor] is not null then it will apply a surface tint overlay + /// to the background color (see [Material.surfaceTintColor] for more + /// detail). /// /// The value must be non-negative. /// @@ -383,11 +390,37 @@ class AppBar extends StatefulWidget implements PreferredSizeWidget { /// /// See also: /// + /// * [scrolledUnderElevation], which will be used when the app bar has + /// something scrolled underneath it. /// * [shadowColor], which is the color of the shadow below the app bar. + /// * [surfaceTintColor], which determines the elevation overlay that will + /// be applied to the background of the app bar. /// * [shape], which defines the shape of the app bar's [Material] and its /// shadow. final double? elevation; + /// {@template flutter.material.appbar.scrolledUnderElevation} + /// The elevation that will be used if this app bar has something + /// scrolled underneath it. + /// + /// If non-null then it [AppBarTheme.scrolledUnderElevation] of + /// [ThemeData.appBarTheme] will be used. If that is also null then [elevation] + /// will be used. + /// + /// The value must be non-negative. + /// + /// {@endtemplate} + /// + /// See also: + /// * [elevation], which will be used if there is no content scrolled under + /// the app bar. + /// * [shadowColor], which is the color of the shadow below the app bar. + /// * [surfaceTintColor], which determines the elevation overlay that will + /// be applied to the background of the app bar. + /// * [shape], which defines the shape of the app bar's [Material] and its + /// shadow. + final double? scrolledUnderElevation; + /// {@template flutter.material.appbar.shadowColor} /// The color of the shadow below the app bar. /// @@ -402,6 +435,17 @@ class AppBar extends StatefulWidget implements PreferredSizeWidget { /// * [shape], which defines the shape of the app bar and its shadow. final Color? shadowColor; + /// {@template flutter.material.appbar.surfaceTintColor} + /// The color of the surface tint overlay applied to the app bar's + /// background color to indicate elevation. + /// + /// If null no overlay will be applied. + /// {@endtemplate} + /// + /// See also: + /// * [Material.surfaceTintColor], which described this feature in more detail. + final Color? surfaceTintColor; + /// {@template flutter.material.appbar.shape} /// The shape of the app bar's [Material] as well as its shadow. /// @@ -709,23 +753,24 @@ class AppBar extends StatefulWidget implements PreferredSizeWidget { /// * [SystemChrome.setSystemUIOverlayStyle] final SystemUiOverlayStyle? systemOverlayStyle; - bool _getEffectiveCenterTitle(ThemeData theme) { - if (centerTitle != null) - return centerTitle!; - if (theme.appBarTheme.centerTitle != null) - return theme.appBarTheme.centerTitle!; - assert(theme.platform != null); - switch (theme.platform) { - case TargetPlatform.android: - case TargetPlatform.fuchsia: - case TargetPlatform.linux: - case TargetPlatform.windows: - return false; - case TargetPlatform.iOS: - case TargetPlatform.macOS: - return actions == null || actions!.length < 2; + bool platformCenter() { + assert(theme.platform != null); + switch (theme.platform) { + case TargetPlatform.android: + case TargetPlatform.fuchsia: + case TargetPlatform.linux: + case TargetPlatform.windows: + return false; + case TargetPlatform.iOS: + case TargetPlatform.macOS: + return actions == null || actions!.length < 2; + } } + + return centerTitle + ?? theme.appBarTheme.centerTitle + ?? platformCenter(); } @override @@ -733,9 +778,6 @@ class AppBar extends StatefulWidget implements PreferredSizeWidget { } class _AppBarState extends State { - static const double _defaultElevation = 4.0; - static const Color _defaultShadowColor = Color(0xFF000000); - ScrollNotificationObserverState? _scrollNotificationObserver; bool _scrolledUnder = false; @@ -795,8 +837,8 @@ class _AppBarState extends State { assert(!widget.primary || debugCheckHasMediaQuery(context)); assert(debugCheckHasMaterialLocalizations(context)); final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; final AppBarTheme appBarTheme = AppBarTheme.of(context); + final AppBarTheme defaults = theme.useMaterial3 ? _TokenDefaultsM3(context) : _DefaultsM2(context); final ScaffoldState? scaffold = Scaffold.maybeOf(context); final ModalRoute? parentRoute = ModalRoute.of(context); @@ -821,12 +863,23 @@ class _AppBarState extends State { states, widget.backgroundColor, appBarTheme.backgroundColor, - colorScheme.brightness == Brightness.dark ? colorScheme.surface : colorScheme.primary, + defaults.backgroundColor!, ); final Color foregroundColor = widget.foregroundColor ?? appBarTheme.foregroundColor - ?? (colorScheme.brightness == Brightness.dark ? colorScheme.onSurface : colorScheme.onPrimary); + ?? defaults.foregroundColor!; + + final double elevation = widget.elevation + ?? appBarTheme.elevation + ?? defaults.elevation!; + + final double effectiveElevation = states.contains(MaterialState.scrolledUnder) + ? widget.scrolledUnderElevation + ?? appBarTheme.scrolledUnderElevation + ?? defaults.scrolledUnderElevation + ?? elevation + : elevation; IconThemeData overallIconTheme = backwardsCompatibility ? widget.iconTheme @@ -834,10 +887,13 @@ class _AppBarState extends State { ?? theme.primaryIconTheme : widget.iconTheme ?? appBarTheme.iconTheme - ?? theme.iconTheme.copyWith(color: foregroundColor); + ?? defaults.iconTheme!.copyWith(color: foregroundColor); IconThemeData actionsIconTheme = widget.actionsIconTheme ?? appBarTheme.actionsIconTheme + ?? widget.iconTheme + ?? appBarTheme.iconTheme + ?? defaults.actionsIconTheme?.copyWith(color: foregroundColor) ?? overallIconTheme; TextStyle? toolbarTextStyle = backwardsCompatibility @@ -846,7 +902,7 @@ class _AppBarState extends State { ?? theme.primaryTextTheme.bodyText2 : widget.toolbarTextStyle ?? appBarTheme.toolbarTextStyle - ?? theme.textTheme.bodyText2?.copyWith(color: foregroundColor); + ?? defaults.toolbarTextStyle?.copyWith(color: foregroundColor); TextStyle? titleTextStyle = backwardsCompatibility ? widget.textTheme?.headline6 @@ -854,7 +910,7 @@ class _AppBarState extends State { ?? theme.primaryTextTheme.headline6 : widget.titleTextStyle ?? appBarTheme.titleTextStyle - ?? theme.textTheme.headline6?.copyWith(color: foregroundColor); + ?? defaults.titleTextStyle?.copyWith(color: foregroundColor); if (widget.toolbarOpacity != 1.0) { final double opacity = const Interval(0.25, 1.0, curve: Curves.fastOutSlowIn).transform(widget.toolbarOpacity); @@ -1050,6 +1106,7 @@ class _AppBarState extends State { ) : widget.systemOverlayStyle ?? appBarTheme.systemOverlayStyle + ?? defaults.systemOverlayStyle ?? _systemOverlayStyleForBrightness(ThemeData.estimateBrightnessForColor(backgroundColor)); return Semantics( @@ -1058,13 +1115,14 @@ class _AppBarState extends State { value: overlayStyle, child: Material( color: backgroundColor, - elevation: widget.elevation - ?? appBarTheme.elevation - ?? _defaultElevation, + elevation: effectiveElevation, shadowColor: widget.shadowColor ?? appBarTheme.shadowColor - ?? _defaultShadowColor, - shape: widget.shape ?? appBarTheme.shape, + ?? defaults.shadowColor, + surfaceTintColor: widget.surfaceTintColor + ?? appBarTheme.surfaceTintColor + ?? defaults.surfaceTintColor, + shape: widget.shape ?? appBarTheme.shape ?? defaults.shape, child: Semantics( explicitChildNodes: true, child: appBar, @@ -1084,7 +1142,9 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate { required this.flexibleSpace, required this.bottom, required this.elevation, + required this.scrolledUnderElevation, required this.shadowColor, + required this.surfaceTintColor, required this.forceElevated, required this.backgroundColor, required this.foregroundColor, @@ -1126,7 +1186,9 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate { final Widget? flexibleSpace; final PreferredSizeWidget? bottom; final double? elevation; + final double? scrolledUnderElevation; final Color? shadowColor; + final Color? surfaceTintColor; final bool forceElevated; final Color? backgroundColor; final Color? foregroundColor; @@ -1201,7 +1263,9 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate { : flexibleSpace, bottom: bottom, elevation: forceElevated || isScrolledUnder ? elevation : 0.0, + scrolledUnderElevation: scrolledUnderElevation, shadowColor: shadowColor, + surfaceTintColor: surfaceTintColor, backgroundColor: backgroundColor, foregroundColor: foregroundColor, brightness: brightness, @@ -1368,7 +1432,9 @@ class SliverAppBar extends StatefulWidget { this.flexibleSpace, this.bottom, this.elevation, + this.scrolledUnderElevation, this.shadowColor, + this.surfaceTintColor, this.forceElevated = false, this.backgroundColor, this.foregroundColor, @@ -1454,11 +1520,21 @@ class SliverAppBar extends StatefulWidget { /// This property is used to configure an [AppBar]. final double? elevation; + /// {@macro flutter.material.appbar.scrolledUnderElevation} + /// + /// This property is used to configure an [AppBar]. + final double? scrolledUnderElevation; + /// {@macro flutter.material.appbar.shadowColor} /// /// This property is used to configure an [AppBar]. final Color? shadowColor; + /// {@macro flutter.material.appbar.surfaceTintColor} + /// + /// This property is used to configure an [AppBar]. + final Color? surfaceTintColor; + /// Whether to show the shadow appropriate for the [elevation] even if the /// content is not scrolled under the [AppBar]. /// @@ -1760,7 +1836,9 @@ class _SliverAppBarState extends State with TickerProviderStateMix flexibleSpace: widget.flexibleSpace, bottom: widget.bottom, elevation: widget.elevation, + scrolledUnderElevation: widget.scrolledUnderElevation, shadowColor: widget.shadowColor, + surfaceTintColor: widget.surfaceTintColor, forceElevated: widget.forceElevated, backgroundColor: widget.backgroundColor, foregroundColor: widget.foregroundColor, @@ -1832,3 +1910,82 @@ class _RenderAppBarTitleBox extends RenderAligningShiftedBox { alignChild(); } } + +class _DefaultsM2 extends AppBarTheme { + _DefaultsM2(this.context) + : super( + elevation: 4.0, + shadowColor: const Color(0xFF000000), + titleSpacing: NavigationToolbar.kMiddleSpacing, + toolbarHeight: kToolbarHeight, + ); + + final BuildContext context; + late final ThemeData _theme = Theme.of(context); + late final ColorScheme _colors = _theme.colorScheme; + + @override + Color? get backgroundColor => _colors.brightness == Brightness.dark ? _colors.surface : _colors.primary; + + @override + Color? get foregroundColor => _colors.brightness == Brightness.dark ? _colors.onSurface : _colors.onPrimary; + + @override + IconThemeData? get iconTheme => _theme.iconTheme; + + @override + TextStyle? get toolbarTextStyle => _theme.textTheme.bodyText2; + + @override + TextStyle? get titleTextStyle => _theme.textTheme.headline6; +} + +// BEGIN GENERATED TOKEN PROPERTIES + +// Generated code to the end of this file. Do not edit by hand. +// These defaults are generated from the Material Design Token +// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. + +// Generated version v0_92 +class _TokenDefaultsM3 extends AppBarTheme { + _TokenDefaultsM3(this.context) + : super( + elevation: 0.0, + scrolledUnderElevation: 3.0, + titleSpacing: NavigationToolbar.kMiddleSpacing, + toolbarHeight: 64.0, + ); + + final BuildContext context; + late final ThemeData _theme = Theme.of(context); + late final ColorScheme _colors = _theme.colorScheme; + late final TextTheme _textTheme = _theme.textTheme; + + @override + Color? get backgroundColor => _colors.surface; + + @override + Color? get foregroundColor => _colors.onSurface; + + @override + Color? get surfaceTintColor => _colors.surfaceTint; + + @override + IconThemeData? get iconTheme => IconThemeData( + color: _colors.onSurface, + size: 24.0, + ); + + @override + IconThemeData? get actionsIconTheme => IconThemeData( + color: _colors.onSurfaceVariant, + size: 24.0, + ); + + @override + TextStyle? get toolbarTextStyle => _textTheme.bodyText2; + + @override + TextStyle? get titleTextStyle => _textTheme.titleLarge; +} +// END GENERATED TOKEN PROPERTIES diff --git a/packages/flutter/lib/src/material/app_bar_theme.dart b/packages/flutter/lib/src/material/app_bar_theme.dart index 583e1bd480338..5eb0ff4304903 100644 --- a/packages/flutter/lib/src/material/app_bar_theme.dart +++ b/packages/flutter/lib/src/material/app_bar_theme.dart @@ -37,7 +37,9 @@ class AppBarTheme with Diagnosticable { Color? backgroundColor, this.foregroundColor, this.elevation, + this.scrolledUnderElevation, this.shadowColor, + this.surfaceTintColor, this.shape, this.iconTheme, this.actionsIconTheme, @@ -121,10 +123,18 @@ class AppBarTheme with Diagnosticable { /// descendant [AppBar] widgets. final double? elevation; + /// Overrides the default value of [AppBar.scrolledUnderElevation] in all + /// descendant [AppBar] widgets. + final double? scrolledUnderElevation; + /// Overrides the default value for [AppBar.shadowColor] in all /// descendant widgets. final Color? shadowColor; + /// Overrides the default value for [AppBar.surfaceTintColor] in all + /// descendant widgets. + final Color? surfaceTintColor; + /// Overrides the default value for [AppBar.shape] in all /// descendant widgets. final ShapeBorder? shape; @@ -237,7 +247,9 @@ class AppBarTheme with Diagnosticable { Color? backgroundColor, Color? foregroundColor, double? elevation, + double? scrolledUnderElevation, Color? shadowColor, + Color? surfaceTintColor, ShapeBorder? shape, IconThemeData? iconTheme, @Deprecated( @@ -266,7 +278,9 @@ class AppBarTheme with Diagnosticable { backgroundColor: backgroundColor ?? color ?? this.backgroundColor, foregroundColor: foregroundColor ?? this.foregroundColor, elevation: elevation ?? this.elevation, + scrolledUnderElevation: scrolledUnderElevation ?? this.scrolledUnderElevation, shadowColor: shadowColor ?? this.shadowColor, + surfaceTintColor: surfaceTintColor ?? this.surfaceTintColor, shape: shape ?? this.shape, iconTheme: iconTheme ?? this.iconTheme, actionsIconTheme: actionsIconTheme ?? this.actionsIconTheme, @@ -298,7 +312,9 @@ class AppBarTheme with Diagnosticable { backgroundColor: Color.lerp(a?.backgroundColor, b?.backgroundColor, t), foregroundColor: Color.lerp(a?.foregroundColor, b?.foregroundColor, t), elevation: lerpDouble(a?.elevation, b?.elevation, t), + scrolledUnderElevation: lerpDouble(a?.scrolledUnderElevation, b?.scrolledUnderElevation, t), shadowColor: Color.lerp(a?.shadowColor, b?.shadowColor, t), + surfaceTintColor: Color.lerp(a?.surfaceTintColor, b?.surfaceTintColor, t), shape: ShapeBorder.lerp(a?.shape, b?.shape, t), iconTheme: IconThemeData.lerp(a?.iconTheme, b?.iconTheme, t), actionsIconTheme: IconThemeData.lerp(a?.actionsIconTheme, b?.actionsIconTheme, t), @@ -319,7 +335,9 @@ class AppBarTheme with Diagnosticable { backgroundColor, foregroundColor, elevation, + scrolledUnderElevation, shadowColor, + surfaceTintColor, shape, iconTheme, actionsIconTheme, @@ -344,7 +362,9 @@ class AppBarTheme with Diagnosticable { && other.backgroundColor == backgroundColor && other.foregroundColor == foregroundColor && other.elevation == elevation + && other.scrolledUnderElevation == scrolledUnderElevation && other.shadowColor == shadowColor + && other.surfaceTintColor == surfaceTintColor && other.shape == shape && other.iconTheme == iconTheme && other.actionsIconTheme == actionsIconTheme @@ -365,7 +385,9 @@ class AppBarTheme with Diagnosticable { properties.add(ColorProperty('backgroundColor', backgroundColor, defaultValue: null)); properties.add(ColorProperty('foregroundColor', foregroundColor, defaultValue: null)); properties.add(DiagnosticsProperty('elevation', elevation, defaultValue: null)); + properties.add(DiagnosticsProperty('scrolledUnderElevation', scrolledUnderElevation, defaultValue: null)); properties.add(ColorProperty('shadowColor', shadowColor, defaultValue: null)); + properties.add(ColorProperty('surfaceTintColor', surfaceTintColor, defaultValue: null)); properties.add(DiagnosticsProperty('shape', shape, defaultValue: null)); properties.add(DiagnosticsProperty('iconTheme', iconTheme, defaultValue: null)); properties.add(DiagnosticsProperty('actionsIconTheme', actionsIconTheme, defaultValue: null)); diff --git a/packages/flutter/lib/src/material/material.dart b/packages/flutter/lib/src/material/material.dart index a8fddca7025ed..fc4c55eea7998 100644 --- a/packages/flutter/lib/src/material/material.dart +++ b/packages/flutter/lib/src/material/material.dart @@ -400,6 +400,9 @@ class _MaterialState extends State with TickerProviderStateMixin { Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); final Color? backgroundColor = _getBackgroundColor(context); + final Color? modelShadowColor = widget.shadowColor ?? (theme.useMaterial3 ? null : theme.shadowColor); + // If no shadow color is specified, use 0 for elevation in the model so a drop shadow won't be painted. + final double modelElevation = modelShadowColor != null ? widget.elevation : 0; assert( backgroundColor != null || widget.type == MaterialType.transparency, 'If Material type is not MaterialType.transparency, a color must ' @@ -449,9 +452,9 @@ class _MaterialState extends State with TickerProviderStateMixin { duration: widget.animationDuration, shape: BoxShape.rectangle, clipBehavior: widget.clipBehavior, - elevation: widget.elevation, + elevation: modelElevation, color: color, - shadowColor: widget.shadowColor ?? (theme.useMaterial3 ? const Color(0x00000000) : theme.shadowColor), + shadowColor: modelShadowColor ?? const Color(0x00000000), animateColor: false, child: contents, ); @@ -476,7 +479,7 @@ class _MaterialState extends State with TickerProviderStateMixin { clipBehavior: widget.clipBehavior, elevation: widget.elevation, color: backgroundColor!, - shadowColor: widget.shadowColor ?? (theme.useMaterial3 ? const Color(0x00000000) : theme.shadowColor), + shadowColor: modelShadowColor, surfaceTintColor: widget.surfaceTintColor, child: contents, ); @@ -742,8 +745,7 @@ class _MaterialInterior extends ImplicitlyAnimatedWidget { assert(shape != null), assert(clipBehavior != null), assert(elevation != null && elevation >= 0.0), - assert(color != null), - assert(shadowColor != null); + assert(color != null); /// The widget below this widget in the tree. /// @@ -777,7 +779,7 @@ class _MaterialInterior extends ImplicitlyAnimatedWidget { final Color color; /// The target shadow color. - final Color shadowColor; + final Color? shadowColor; /// The target surface tint color. final Color? surfaceTintColor; @@ -808,11 +810,13 @@ class _MaterialInteriorState extends AnimatedWidgetBaseState<_MaterialInterior> widget.elevation, (dynamic value) => Tween(begin: value as double), ) as Tween?; - _shadowColor = visitor( - _shadowColor, - widget.shadowColor, - (dynamic value) => ColorTween(begin: value as Color), - ) as ColorTween?; + _shadowColor = widget.shadowColor != null + ? visitor( + _shadowColor, + widget.shadowColor, + (dynamic value) => ColorTween(begin: value as Color), + ) as ColorTween? + : null; _surfaceTintColor = widget.surfaceTintColor != null ? visitor( _surfaceTintColor, @@ -834,15 +838,18 @@ class _MaterialInteriorState extends AnimatedWidgetBaseState<_MaterialInterior> final Color color = Theme.of(context).useMaterial3 ? ElevationOverlay.applySurfaceTint(widget.color, _surfaceTintColor?.evaluate(animation), elevation) : ElevationOverlay.applyOverlay(context, widget.color, elevation); + // If no shadow color is specified, use 0 for elevation in the model so a drop shadow won't be painted. + final double modelElevation = widget.shadowColor != null ? elevation : 0; + final Color shadowColor = _shadowColor?.evaluate(animation) ?? const Color(0x00000000); return PhysicalShape( clipper: ShapeBorderClipper( shape: shape, textDirection: Directionality.maybeOf(context), ), clipBehavior: widget.clipBehavior, - elevation: elevation, + elevation: modelElevation, color: color, - shadowColor: _shadowColor!.evaluate(animation)!, + shadowColor: shadowColor, child: _ShapeBorderPaint( shape: shape, borderOnForeground: widget.borderOnForeground, diff --git a/packages/flutter/lib/src/material/theme_data.dart b/packages/flutter/lib/src/material/theme_data.dart index b9e7202e4efd7..600c224f12ebe 100644 --- a/packages/flutter/lib/src/material/theme_data.dart +++ b/packages/flutter/lib/src/material/theme_data.dart @@ -1203,6 +1203,7 @@ class ThemeData with Diagnosticable { /// Components that have been migrated to Material 3 are: /// /// * [AlertDialog] + /// * [AppBar] /// * [Card] /// * [Dialog] /// * [ElevatedButton] diff --git a/packages/flutter/test/material/app_bar_test.dart b/packages/flutter/test/material/app_bar_test.dart index 88b6963f68aab..6a5295e3f164a 100644 --- a/packages/flutter/test/material/app_bar_test.dart +++ b/packages/flutter/test/material/app_bar_test.dart @@ -954,6 +954,8 @@ void main() { }); testWidgets('AppBar uses the specified elevation or defaults to 4.0', (WidgetTester tester) async { + final bool useMaterial3 = ThemeData().useMaterial3; + Widget buildAppBar([double? elevation]) { return MaterialApp( home: Scaffold( @@ -967,15 +969,48 @@ void main() { matching: find.byType(Material), )); - // Default elevation should be _AppBarState._defaultElevation = 4.0 + // Default elevation should be used for the material. await tester.pumpWidget(buildAppBar()); - expect(getMaterial().elevation, 4.0); + expect(getMaterial().elevation, useMaterial3 ? 0 : 4); // AppBar should use the specified elevation. await tester.pumpWidget(buildAppBar(8.0)); expect(getMaterial().elevation, 8.0); }); + testWidgets('scrolledUnderElevation', (WidgetTester tester) async { + Widget buildAppBar({double? elevation, double? scrolledUnderElevation}) { + return MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('Title'), + elevation: elevation, + scrolledUnderElevation: scrolledUnderElevation, + ), + body: ListView.builder( + itemCount: 100, + itemBuilder: (BuildContext context, int index) => ListTile(title: Text('Item $index')), + ), + ), + ); + } + + Material getMaterial() => tester.widget(find.descendant( + of: find.byType(AppBar), + matching: find.byType(Material), + )); + + await tester.pumpWidget(buildAppBar(elevation: 2, scrolledUnderElevation: 10)); + // Starts with the base elevation. + expect(getMaterial().elevation, 2); + + await tester.fling(find.text('Item 2'), const Offset(0.0, -600.0), 2000.0); + await tester.pumpAndSettle(); + + // After scrolling it should be the scrolledUnderElevation. + expect(getMaterial().elevation, 10); + }); + group('SliverAppBar elevation', () { Widget buildSliverAppBar(bool forceElevated, {double? elevation, double? themeElevation}) { return MaterialApp( @@ -996,15 +1031,16 @@ void main() { // Regression test for https://github.com/flutter/flutter/issues/59158. AppBar getAppBar() => tester.widget(find.byType(AppBar)); Material getMaterial() => tester.widget(find.byType(Material)); + final bool useMaterial3 = ThemeData().useMaterial3; // When forceElevated is off, SliverAppBar should not be elevated. await tester.pumpWidget(buildSliverAppBar(false)); expect(getMaterial().elevation, 0.0); - // Default elevation should be _AppBarState._defaultElevation = 4.0, and + // Default elevation should be used by the material, but // the AppBar's elevation should not be specified by SliverAppBar. await tester.pumpWidget(buildSliverAppBar(true)); - expect(getMaterial().elevation, 4.0); + expect(getMaterial().elevation, useMaterial3 ? 0.0 : 4.0); expect(getAppBar().elevation, null); // SliverAppBar should use the specified elevation. @@ -1312,6 +1348,8 @@ void main() { final Key key = UniqueKey(); await tester.pumpWidget( MaterialApp( + // Test was designed against InkSplash so need to make sure that is used. + theme: ThemeData(splashFactory: InkSplash.splashFactory), home: Center( child: AppBar( title: const Text('Abc'), @@ -2005,44 +2043,55 @@ void main() { )); }); - testWidgets('AppBar draws a light system bar for a light theme with a dark background', (WidgetTester tester) async { - final ThemeData lightTheme = ThemeData(primarySwatch: Colors.deepOrange); - await tester.pumpWidget(MaterialApp( - theme: lightTheme, - home: Scaffold( - appBar: AppBar( - title: const Text('test'), + testWidgets('Default system bar brightness based on AppBar background color brightness.', (WidgetTester tester) async { + Widget buildAppBar(ThemeData theme) { + return MaterialApp( + theme: theme, + home: Scaffold( + appBar: AppBar(title: const Text('Title')), ), - ), - )); - - expect(lightTheme.primaryColorBrightness, Brightness.dark); - expect(lightTheme.colorScheme.brightness, Brightness.light); - expect(SystemChrome.latestStyle, const SystemUiOverlayStyle( - statusBarBrightness: Brightness.dark, - statusBarIconBrightness: Brightness.light, - )); - }); + ); + } - testWidgets('AppBar draws a dark system bar for a dark theme with a light background', (WidgetTester tester) async { - final ThemeData darkTheme = ThemeData(brightness: Brightness.dark, cardColor: Colors.white); - await tester.pumpWidget( - MaterialApp( - theme: darkTheme, - home: Scaffold( - appBar: AppBar( - title: const Text('test'), - ), + // Using a light theme. + { + await tester.pumpWidget(buildAppBar(ThemeData.from(colorScheme: const ColorScheme.light()))); + final Material appBarMaterial = tester.widget( + find.descendant( + of: find.byType(AppBar), + matching: find.byType(Material), ), - ), - ); + ); + final Brightness appBarBrightness = ThemeData.estimateBrightnessForColor(appBarMaterial.color!); + final Brightness onAppBarBrightness = appBarBrightness == Brightness.light + ? Brightness.dark + : Brightness.light; + + expect(SystemChrome.latestStyle, SystemUiOverlayStyle( + statusBarBrightness: appBarBrightness, + statusBarIconBrightness: onAppBarBrightness, + )); + } - expect(darkTheme.primaryColorBrightness, Brightness.dark); - expect(darkTheme.colorScheme.brightness, Brightness.dark); - expect(SystemChrome.latestStyle, const SystemUiOverlayStyle( - statusBarBrightness: Brightness.light, - statusBarIconBrightness: Brightness.dark, - )); + // Using a dark theme. + { + await tester.pumpWidget(buildAppBar(ThemeData.from(colorScheme: const ColorScheme.dark()))); + final Material appBarMaterial = tester.widget( + find.descendant( + of: find.byType(AppBar), + matching: find.byType(Material), + ), + ); + final Brightness appBarBrightness = ThemeData.estimateBrightnessForColor(appBarMaterial.color!); + final Brightness onAppBarBrightness = appBarBrightness == Brightness.light + ? Brightness.dark + : Brightness.light; + + expect(SystemChrome.latestStyle, SystemUiOverlayStyle( + statusBarBrightness: appBarBrightness, + statusBarIconBrightness: onAppBarBrightness, + )); + } }); testWidgets('Changing SliverAppBar snap from true to false', (WidgetTester tester) async { @@ -2207,6 +2256,8 @@ void main() { Widget buildFrame() { return MaterialApp( + // Test designed against 2014 font sizes. + theme: ThemeData(textTheme: Typography.englishLike2014), home: Builder( builder: (BuildContext context) { return MediaQuery( @@ -2245,6 +2296,8 @@ void main() { Widget buildFrame() { return MaterialApp( + // Test designed against 2014 font sizes. + theme: ThemeData(textTheme: Typography.englishLike2014), home: Builder( builder: (BuildContext context) { return Directionality( @@ -2536,6 +2589,7 @@ void main() { await tester.pumpWidget( MaterialApp( theme: ThemeData.light().copyWith( + useMaterial3: false, appBarTheme: const AppBarTheme( backwardsCompatibility: false, ), diff --git a/packages/flutter/test/material/app_bar_theme_test.dart b/packages/flutter/test/material/app_bar_theme_test.dart index 58c8519ccdb18..4892cd708d08d 100644 --- a/packages/flutter/test/material/app_bar_theme_test.dart +++ b/packages/flutter/test/material/app_bar_theme_test.dart @@ -15,8 +15,10 @@ void main() { }); testWidgets('Passing no AppBarTheme returns defaults', (WidgetTester tester) async { + final ThemeData theme = ThemeData(); await tester.pumpWidget( MaterialApp( + theme: theme, home: Scaffold( appBar: AppBar( actions: [ @@ -33,17 +35,33 @@ void main() { final RichText actionIconText = _getAppBarIconRichText(tester); final DefaultTextStyle text = _getAppBarText(tester); - expect(SystemChrome.latestStyle!.statusBarBrightness, SystemUiOverlayStyle.light.statusBarBrightness); - expect(widget.color, Colors.blue); - expect(widget.elevation, 4.0); - expect(widget.shadowColor, Colors.black); - expect(widget.shape, null); - expect(iconTheme.data, const IconThemeData(color: Colors.white)); - expect(actionsIconTheme.data, const IconThemeData(color: Colors.white)); - expect(actionIconText.text.style!.color, Colors.white); - expect(text.style, Typography.material2014().englishLike.bodyText2!.merge(Typography.material2014().white.bodyText2)); - expect(tester.getSize(find.byType(AppBar)).height, kToolbarHeight); - expect(tester.getSize(find.byType(AppBar)).width, 800); + if (theme.useMaterial3) { + expect(SystemChrome.latestStyle!.statusBarBrightness, Brightness.light); + expect(widget.color, theme.colorScheme.surface); + expect(widget.elevation, 0); + expect(widget.shadowColor, null); + expect(widget.surfaceTintColor, theme.colorScheme.surfaceTint); + expect(widget.shape, null); + expect(iconTheme.data, IconThemeData(color: theme.colorScheme.onSurface, size: 24)); + expect(actionsIconTheme.data, IconThemeData(color: theme.colorScheme.onSurfaceVariant, size: 24)); + expect(actionIconText.text.style!.color, Colors.black); + expect(text.style, Typography.material2021().englishLike.bodyText2!.merge(Typography.material2021().black.bodyText2).copyWith(color: theme.colorScheme.onSurface)); + expect(tester.getSize(find.byType(AppBar)).height, kToolbarHeight); + expect(tester.getSize(find.byType(AppBar)).width, 800); + } else { + expect(SystemChrome.latestStyle!.statusBarBrightness, SystemUiOverlayStyle.light.statusBarBrightness); + expect(widget.color, Colors.blue); + expect(widget.elevation, 4.0); + expect(widget.shadowColor, Colors.black); + expect(widget.surfaceTintColor, null); + expect(widget.shape, null); + expect(iconTheme.data, const IconThemeData(color: Colors.white)); + expect(actionsIconTheme.data, const IconThemeData(color: Colors.white)); + expect(actionIconText.text.style!.color, Colors.white); + expect(text.style, Typography.material2014().englishLike.bodyText2!.merge(Typography.material2014().white.bodyText2)); + expect(tester.getSize(find.byType(AppBar)).height, kToolbarHeight); + expect(tester.getSize(find.byType(AppBar)).width, 800); + } }); testWidgets('AppBar uses values from AppBarTheme', (WidgetTester tester) async { @@ -73,6 +91,7 @@ void main() { expect(widget.color, appBarTheme.backgroundColor); expect(widget.elevation, appBarTheme.elevation); expect(widget.shadowColor, appBarTheme.shadowColor); + expect(widget.surfaceTintColor, appBarTheme.surfaceTintColor); expect(widget.shape, const StadiumBorder()); expect(iconTheme.data, appBarTheme.iconTheme); expect(actionsIconTheme.data, appBarTheme.actionsIconTheme); @@ -132,7 +151,8 @@ void main() { const SystemUiOverlayStyle systemOverlayStyle = SystemUiOverlayStyle.light; const Color color = Colors.orange; const double elevation = 3.0; - const Color shadowColor = Colors.red; + const Color shadowColor = Colors.purple; + const Color surfaceTintColor = Colors.brown; const ShapeBorder shape = RoundedRectangleBorder(); const IconThemeData iconThemeData = IconThemeData(color: Colors.green); const IconThemeData actionsIconThemeData = IconThemeData(color: Colors.lightBlue); @@ -151,6 +171,7 @@ void main() { systemOverlayStyle: systemOverlayStyle, elevation: elevation, shadowColor: shadowColor, + surfaceTintColor: surfaceTintColor, shape: shape, iconTheme: iconThemeData, actionsIconTheme: actionsIconThemeData, @@ -174,6 +195,7 @@ void main() { expect(widget.color, color); expect(widget.elevation, elevation); expect(widget.shadowColor, shadowColor); + expect(widget.surfaceTintColor, surfaceTintColor); expect(widget.shape, shape); expect(iconTheme.data, iconThemeData); expect(actionsIconTheme.data, actionsIconThemeData); @@ -228,6 +250,7 @@ void main() { expect(widget.color, appBarTheme.backgroundColor); expect(widget.elevation, appBarTheme.elevation); expect(widget.shadowColor, appBarTheme.shadowColor); + expect(widget.surfaceTintColor, appBarTheme.surfaceTintColor); expect(iconTheme.data, appBarTheme.iconTheme); expect(actionsIconTheme.data, appBarTheme.actionsIconTheme); expect(actionIconText.text.style!.color, appBarTheme.actionsIconTheme!.color); @@ -235,15 +258,13 @@ void main() { }); testWidgets('ThemeData colorScheme is used when no AppBarTheme is set', (WidgetTester tester) async { - late ThemeData theme; + final ThemeData lightTheme = ThemeData.from(colorScheme: const ColorScheme.light()); + final ThemeData darkTheme = ThemeData.from(colorScheme: const ColorScheme.dark()); Widget buildFrame(ThemeData appTheme) { return MaterialApp( theme: appTheme, home: Builder( builder: (BuildContext context) { - // This ThemeData has been localized with ThemeData.localize. The - // appTheme parameter has not, so its textTheme is incomplete. - theme = Theme.of(context); return Scaffold( appBar: AppBar( actions: [ @@ -256,57 +277,120 @@ void main() { ); } - // AppBar defaults for light themes: - // - elevation: 4 - // - shadow color: black - // - background color: ColorScheme.primary - // - foreground color: ColorScheme.onPrimary - // - actions text: style bodyText2, foreground color - // - status bar brightness: light (based on color scheme brightness) - { - await tester.pumpWidget(buildFrame(ThemeData.from(colorScheme: const ColorScheme.light()))); - - final Material widget = _getAppBarMaterial(tester); - final IconTheme iconTheme = _getAppBarIconTheme(tester); - final IconTheme actionsIconTheme = _getAppBarActionsIconTheme(tester); - final RichText actionIconText = _getAppBarIconRichText(tester); - final DefaultTextStyle text = _getAppBarText(tester); - - expect(SystemChrome.latestStyle!.statusBarBrightness, SystemUiOverlayStyle.light.statusBarBrightness); - expect(widget.color, theme.colorScheme.primary); - expect(widget.elevation, 4.0); - expect(widget.shadowColor, Colors.black); - expect(iconTheme.data.color, theme.colorScheme.onPrimary); - expect(actionsIconTheme.data.color, theme.colorScheme.onPrimary); - expect(actionIconText.text.style!.color, theme.colorScheme.onPrimary); - expect(text.style.compareTo(theme.textTheme.bodyText2!.copyWith(color: theme.colorScheme.onPrimary)), RenderComparison.identical); - } - - // AppBar defaults for dark themes: - // - elevation: 4 - // - shadow color: black - // - background color: ColorScheme.surface - // - foreground color: ColorScheme.onSurface - // - actions text: style bodyText2, foreground color - // - status bar brightness: dark (based on background color) - { - await tester.pumpWidget(buildFrame(ThemeData.from(colorScheme: const ColorScheme.dark()))); - await tester.pumpAndSettle(); // Theme change animation - - final Material widget = _getAppBarMaterial(tester); - final IconTheme iconTheme = _getAppBarIconTheme(tester); - final IconTheme actionsIconTheme = _getAppBarActionsIconTheme(tester); - final RichText actionIconText = _getAppBarIconRichText(tester); - final DefaultTextStyle text = _getAppBarText(tester); - - expect(SystemChrome.latestStyle!.statusBarBrightness, SystemUiOverlayStyle.light.statusBarBrightness); - expect(widget.color, theme.colorScheme.surface); - expect(widget.elevation, 4.0); - expect(widget.shadowColor, Colors.black); - expect(iconTheme.data.color, theme.colorScheme.onSurface); - expect(actionsIconTheme.data.color, theme.colorScheme.onSurface); - expect(actionIconText.text.style!.color, theme.colorScheme.onSurface); - expect(text.style.compareTo(theme.textTheme.bodyText2!.copyWith(color: theme.colorScheme.onSurface)), RenderComparison.identical); + if (lightTheme.useMaterial3) { + // M3 AppBar defaults for light themes: + // - elevation: 0 + // - shadow color: null + // - surface tint color: ColorScheme.surfaceTint + // - background color: ColorScheme.surface + // - foreground color: ColorScheme.onSurface + // - actions text: style bodyText2, foreground color + // - status bar brightness: light (based on color scheme brightness) + { + await tester.pumpWidget(buildFrame(lightTheme)); + + final Material widget = _getAppBarMaterial(tester); + final IconTheme iconTheme = _getAppBarIconTheme(tester); + final IconTheme actionsIconTheme = _getAppBarActionsIconTheme(tester); + final RichText actionIconText = _getAppBarIconRichText(tester); + final DefaultTextStyle text = _getAppBarText(tester); + + expect(SystemChrome.latestStyle!.statusBarBrightness, Brightness.light); + expect(widget.color, lightTheme.colorScheme.surface); + expect(widget.elevation, 0); + expect(widget.shadowColor, null); + expect(widget.surfaceTintColor, lightTheme.colorScheme.surfaceTint); + expect(iconTheme.data.color, lightTheme.colorScheme.onSurface); + expect(actionsIconTheme.data.color, lightTheme.colorScheme.onSurface); + expect(actionIconText.text.style!.color, lightTheme.colorScheme.onSurface); + expect(text.style, Typography.material2021().englishLike.bodyText2!.merge(Typography.material2021().black.bodyText2).copyWith(color: lightTheme.colorScheme.onSurface)); + } + + // M3 AppBar defaults for dark themes: + // - elevation: 0 + // - shadow color: null + // - surface tint color: ColorScheme.surfaceTint + // - background color: ColorScheme.surface + // - foreground color: ColorScheme.onSurface + // - actions text: style bodyText2, foreground color + // - status bar brightness: dark (based on background color) + { + await tester.pumpWidget(buildFrame(ThemeData.from(colorScheme: const ColorScheme.dark()))); + await tester.pumpAndSettle(); // Theme change animation + + final Material widget = _getAppBarMaterial(tester); + final IconTheme iconTheme = _getAppBarIconTheme(tester); + final IconTheme actionsIconTheme = _getAppBarActionsIconTheme(tester); + final RichText actionIconText = _getAppBarIconRichText(tester); + final DefaultTextStyle text = _getAppBarText(tester); + + expect(SystemChrome.latestStyle!.statusBarBrightness, Brightness.dark); + expect(widget.color, darkTheme.colorScheme.surface); + expect(widget.elevation, 0); + expect(widget.shadowColor, null); + expect(widget.surfaceTintColor, darkTheme.colorScheme.surfaceTint); + expect(iconTheme.data.color, darkTheme.colorScheme.onSurface); + expect(actionsIconTheme.data.color, darkTheme.colorScheme.onSurface); + expect(actionIconText.text.style!.color, darkTheme.colorScheme.onSurface); + expect(text.style, Typography.material2021().englishLike.bodyText2!.merge(Typography.material2021().black.bodyText2).copyWith(color: darkTheme.colorScheme.onSurface)); + } + } else { + // AppBar defaults for light themes: + // - elevation: 4 + // - shadow color: black + // - surface tint color: null + // - background color: ColorScheme.primary + // - foreground color: ColorScheme.onPrimary + // - actions text: style bodyText2, foreground color + // - status bar brightness: light (based on color scheme brightness) + { + await tester.pumpWidget(buildFrame(lightTheme)); + + final Material widget = _getAppBarMaterial(tester); + final IconTheme iconTheme = _getAppBarIconTheme(tester); + final IconTheme actionsIconTheme = _getAppBarActionsIconTheme(tester); + final RichText actionIconText = _getAppBarIconRichText(tester); + final DefaultTextStyle text = _getAppBarText(tester); + + expect(SystemChrome.latestStyle!.statusBarBrightness, SystemUiOverlayStyle.light.statusBarBrightness); + expect(widget.color, lightTheme.colorScheme.primary); + expect(widget.elevation, 4.0); + expect(widget.shadowColor, Colors.black); + expect(widget.surfaceTintColor, null); + expect(iconTheme.data.color, lightTheme.colorScheme.onPrimary); + expect(actionsIconTheme.data.color, lightTheme.colorScheme.onPrimary); + expect(actionIconText.text.style!.color, lightTheme.colorScheme.onPrimary); + expect(text.style, Typography.material2014().englishLike.bodyText2!.merge(Typography.material2014().black.bodyText2).copyWith(color: lightTheme.colorScheme.onPrimary)); + } + + // AppBar defaults for dark themes: + // - elevation: 4 + // - shadow color: black + // - surface tint color: null + // - background color: ColorScheme.surface + // - foreground color: ColorScheme.onSurface + // - actions text: style bodyText2, foreground color + // - status bar brightness: dark (based on background color) + { + await tester.pumpWidget(buildFrame(darkTheme)); + await tester.pumpAndSettle(); // Theme change animation + + final Material widget = _getAppBarMaterial(tester); + final IconTheme iconTheme = _getAppBarIconTheme(tester); + final IconTheme actionsIconTheme = _getAppBarActionsIconTheme(tester); + final RichText actionIconText = _getAppBarIconRichText(tester); + final DefaultTextStyle text = _getAppBarText(tester); + + expect(SystemChrome.latestStyle!.statusBarBrightness, SystemUiOverlayStyle.light.statusBarBrightness); + expect(widget.color, darkTheme.colorScheme.surface); + expect(widget.elevation, 4.0); + expect(widget.shadowColor, Colors.black); + expect(widget.surfaceTintColor, null); + expect(iconTheme.data.color, darkTheme.colorScheme.onSurface); + expect(actionsIconTheme.data.color, darkTheme.colorScheme.onSurface); + expect(actionIconText.text.style!.color, darkTheme.colorScheme.onSurface); + expect(text.style, Typography.material2014().englishLike.bodyText2!.merge(Typography.material2014().black.bodyText2).copyWith(color: darkTheme.colorScheme.onSurface)); + } } }); @@ -315,7 +399,7 @@ void main() { Widget buildFrame({ Color? appIconColor, Color? appBarIconColor }) { return MaterialApp( - theme: ThemeData.from(colorScheme: const ColorScheme.light()), + theme: ThemeData.from(useMaterial3: false, colorScheme: const ColorScheme.light()), home: IconTheme( data: IconThemeData(color: appIconColor), child: Builder( @@ -408,6 +492,22 @@ void main() { expect(appBar.shadowColor, Colors.yellow); }); + testWidgets('AppBar.surfaceTintColor takes priority over AppBarTheme.surfaceTintColor', (WidgetTester tester) async { + await tester.pumpWidget(MaterialApp( + theme: ThemeData(appBarTheme: const AppBarTheme(surfaceTintColor: Colors.red)), + home: Scaffold( + appBar: AppBar( + title: const Text('Title'), + surfaceTintColor: Colors.yellow, + ), + ), + )); + + final AppBar appBar = tester.widget(find.byType(AppBar)); + // The AppBar.surfaceTintColor should be used instead of AppBarTheme.surfaceTintColor. + expect(appBar.surfaceTintColor, Colors.yellow); + }); + testWidgets('AppBar uses AppBarTheme.titleSpacing', (WidgetTester tester) async { const double kTitleSpacing = 10; await tester.pumpWidget(MaterialApp( @@ -493,6 +593,7 @@ void main() { backgroundColor: Color(0xff000001), elevation: 8.0, shadowColor: Color(0xff000002), + surfaceTintColor: Color(0xff000003), centerTitle: true, titleSpacing: 40.0, ).debugFillProperties(builder); @@ -507,6 +608,7 @@ void main() { 'backgroundColor: Color(0xff000001)', 'elevation: 8.0', 'shadowColor: Color(0xff000002)', + 'surfaceTintColor: Color(0xff000003)', 'centerTitle: true', 'titleSpacing: 40.0', ]); @@ -524,6 +626,7 @@ AppBarTheme _appBarTheme() { const Color backgroundColor = Colors.lightBlue; const double elevation = 6.0; const Color shadowColor = Colors.red; + const Color surfaceTintColor = Colors.green; const IconThemeData iconThemeData = IconThemeData(color: Colors.black); const IconThemeData actionsIconThemeData = IconThemeData(color: Colors.pink); return const AppBarTheme( @@ -532,6 +635,7 @@ AppBarTheme _appBarTheme() { backgroundColor: backgroundColor, elevation: elevation, shadowColor: shadowColor, + surfaceTintColor: surfaceTintColor, shape: StadiumBorder(), iconTheme: iconThemeData, toolbarHeight: 96, From a796f1ce93a84d8f6d825ea24b629095c484da6d Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 16:19:08 -0400 Subject: [PATCH 122/141] Roll Engine from 9e6911e4da21 to 94824fcb600a (6 revisions) (#102681) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 9830e4895d677..5cf508cfb1b12 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -9e6911e4da21a42b352f67f6271cb28f6592b88f +94824fcb600a62556e687e414c3061f3bc0b2c02 diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index 83894ac690d5e..13bc8b3aa4c2d 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -iisykXnbM-9g3DFfH6SEX7v1HeT9dckHjjgxXMogGR0C +0CR1gRII3byUPpf7QFiV-tYghQK6vlilP0lb6TsueeMC From d7cd8c10397e57c0f92e3bad0bbbaa511e8d1c0c Mon Sep 17 00:00:00 2001 From: Flutter GitHub Bot Date: Wed, 27 Apr 2022 13:24:07 -0700 Subject: [PATCH 123/141] Marks Linux_android android_semantics_integration_test to be unflaky (#102658) --- .ci.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.ci.yaml b/.ci.yaml index df7ec312c7466..e39b160791809 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -1433,7 +1433,6 @@ targets: scheduler: luci - name: Linux_android android_semantics_integration_test - bringup: true # Flaky https://github.com/flutter/flutter/issues/98417 recipe: devicelab/devicelab_drone presubmit: false timeout: 60 From 29943e659535e9f05bd819cc0d3e1e1c428608a3 Mon Sep 17 00:00:00 2001 From: Casey Hillers Date: Wed, 27 Apr 2022 13:44:07 -0700 Subject: [PATCH 124/141] [ci.yaml] Migrate 50 targets to Cocoon scheduler (#102676) --- .ci.yaml | 47 ----------------------------------------------- 1 file changed, 47 deletions(-) diff --git a/.ci.yaml b/.ci.yaml index e39b160791809..a86450a2e841a 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -222,7 +222,6 @@ targets: ["framework","hostonly"] validation: analyze validation_name: Analyze - scheduler: luci - name: Linux build_tests_1_2 recipe: flutter/flutter_drone @@ -242,7 +241,6 @@ targets: subshard: "1_2" tags: > ["framework","hostonly","shard"] - scheduler: luci - name: Linux build_tests_2_2 recipe: flutter/flutter_drone @@ -262,7 +260,6 @@ targets: subshard: "2_2" tags: > ["framework","hostonly","shard"] - scheduler: luci - name: Linux ci_yaml flutter roller recipe: infra/ci_yaml @@ -272,7 +269,6 @@ targets: ["framework","hostonly","shard"] runIf: - .ci.yaml - scheduler: luci - name: Linux customer_testing recipe: flutter/flutter @@ -282,7 +278,6 @@ targets: ["framework","hostonly"] validation: customer_testing validation_name: Customer testing - scheduler: luci - name: Linux docs_publish enabled_branches: @@ -303,7 +298,6 @@ targets: validation_name: Docs firebase_project: master-docs-flutter-dev release_ref: refs/heads/master - scheduler: luci - name: Linux docs_test recipe: flutter/flutter @@ -319,7 +313,6 @@ targets: ["framework","hostonly"] validation: docs validation_name: Docs - scheduler: luci runIf: - dev/ - packages/flutter/ @@ -340,7 +333,6 @@ targets: tags: > ["firebaselab"] task_name: abstract_method_smoke_test - scheduler: luci - name: Linux firebase_android_embedding_v2_smoke_test recipe: firebaselab/firebaselab @@ -353,7 +345,6 @@ targets: tags: > ["firebaselab"] task_name: android_embedding_v2_smoke_test - scheduler: luci - name: Linux firebase_release_smoke_test recipe: firebaselab/firebaselab @@ -366,7 +357,6 @@ targets: tags: > ["firebaselab"] task_name: release_smoke_test - scheduler: luci - name: Linux flutter_plugins recipe: flutter/flutter_drone @@ -376,7 +366,6 @@ targets: subshard: analyze tags: > ["framework","hostonly","shard"] - scheduler: luci - name: Linux framework_tests_libraries recipe: flutter/flutter_drone @@ -390,7 +379,6 @@ targets: subshard: libraries tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/flutter/ @@ -421,7 +409,6 @@ targets: subshard: misc tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/flutter/ @@ -447,7 +434,6 @@ targets: subshard: widgets tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/flutter/ @@ -469,7 +455,6 @@ targets: validation_name: Fuchsia precache tags: > ["framework","hostonly","shard"] - scheduler: luci - name: Linux gradle_desugar_classes_test recipe: devicelab/devicelab_drone @@ -489,7 +474,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: gradle_desugar_classes_test - scheduler: luci runIf: - dev/** - bin/** @@ -513,7 +497,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: gradle_java8_compile_test - scheduler: luci runIf: - dev/** - bin/** @@ -537,7 +520,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: gradle_plugin_bundle_test - scheduler: luci runIf: - dev/** - bin/** @@ -561,7 +543,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: gradle_plugin_fat_apk_test - scheduler: luci runIf: - dev/** - bin/** @@ -585,7 +566,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: gradle_plugin_light_apk_test - scheduler: luci runIf: - dev/** - bin/** @@ -609,7 +589,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: module_custom_host_app_name_test - scheduler: luci runIf: - dev/** - packages/flutter_tools/** @@ -632,7 +611,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: module_host_with_custom_build_test - scheduler: luci runIf: - dev/** - packages/flutter_tools/** @@ -657,7 +635,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: module_test - scheduler: luci runIf: - dev/** - packages/flutter_tools/** @@ -682,7 +659,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: plugin_dependencies_test - scheduler: luci runIf: - dev/** - packages/flutter_tools/** @@ -707,7 +683,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: plugin_test - scheduler: luci runIf: - dev/** - packages/flutter_tools/** @@ -725,7 +700,6 @@ targets: subshard: "0" tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/flutter/ @@ -750,7 +724,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: technical_debt__cost - scheduler: luci - name: Linux test_ownership recipe: infra/test_ownership @@ -760,7 +733,6 @@ targets: properties: tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - .ci.yaml @@ -782,7 +754,6 @@ targets: tags: > ["framework","hostonly","shard"] test_timeout_secs: "2700" - scheduler: luci runIf: - dev/ - packages/flutter_tools/ @@ -807,7 +778,6 @@ targets: tags: > ["framework","hostonly","shard"] test_timeout_secs: "2700" - scheduler: luci runIf: - dev/ - packages/flutter_tools/ @@ -832,7 +802,6 @@ targets: tags: > ["framework","hostonly","shard"] test_timeout_secs: "2700" - scheduler: luci runIf: - dev/ - packages/flutter_tools/ @@ -857,7 +826,6 @@ targets: tags: > ["framework","hostonly","shard"] test_timeout_secs: "2700" - scheduler: luci runIf: - dev/ - packages/flutter_tools/ @@ -878,7 +846,6 @@ targets: subshard: commands tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/flutter_tools/ @@ -899,7 +866,6 @@ targets: subshard: general tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/flutter_tools/ @@ -923,7 +889,6 @@ targets: tags: > ["devicelab","hostonly"] task_name: web_benchmarks_canvaskit - scheduler: luci - name: Linux web_benchmarks_html recipe: devicelab/devicelab_drone @@ -941,7 +906,6 @@ targets: tags: > ["devicelab"] task_name: web_benchmarks_html - scheduler: luci runIf: - dev/** - bin/** @@ -961,7 +925,6 @@ targets: subshard: "1_5" tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/ @@ -982,7 +945,6 @@ targets: subshard: "2_5" tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/ @@ -1003,7 +965,6 @@ targets: subshard: "3_5" tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/ @@ -1024,7 +985,6 @@ targets: subshard: "4_5" tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/ @@ -1045,7 +1005,6 @@ targets: subshard: "5_5" tags: > ["framework","hostonly","shard"] - scheduler: luci runIf: - dev/ - packages/ @@ -1480,7 +1439,6 @@ targets: tags: > ["devicelab","android","linux"] task_name: animated_complex_opacity_perf__e2e_summary - scheduler: luci - name: Linux_android animated_placeholder_perf__e2e_summary recipe: devicelab/devicelab_drone @@ -2136,7 +2094,6 @@ targets: tags: > ["devicelab","android","linux"] task_name: new_gallery__crane_perf - scheduler: luci - name: Linux_android new_gallery__transition_perf recipe: devicelab/devicelab_drone @@ -3136,7 +3093,6 @@ targets: tags: > ["devicelab","android","mac","arm64"] task_name: hello_world_android__compile - scheduler: luci - name: Mac_android hot_mode_dev_cycle__benchmark recipe: devicelab/devicelab_drone @@ -3167,7 +3123,6 @@ targets: tags: > ["devicelab","android","mac","arm64"] task_name: integration_test_test - scheduler: luci - name: Mac_android integration_ui_frame_number recipe: devicelab/devicelab_drone @@ -3211,7 +3166,6 @@ targets: tags: > ["devicelab","android","mac","arm64"] task_name: run_release_test - scheduler: luci - name: Mac_android flutter_gallery_mac__start_up recipe: devicelab/devicelab_drone @@ -3326,7 +3280,6 @@ targets: tags: > ["devicelab","ios","mac"] task_name: cubic_bezier_perf_ios_sksl_warmup__timeline_summary - scheduler: luci - name: Mac_ios external_ui_integration_test_ios recipe: devicelab/devicelab_drone From 3edeb9473191e592f000cb39bb7e67dfb17ab126 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 17:44:07 -0400 Subject: [PATCH 125/141] Roll Engine from 94824fcb600a to 35e56175dfde (1 revision) (#102686) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 5cf508cfb1b12..c43784449899e 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -94824fcb600a62556e687e414c3061f3bc0b2c02 +35e56175dfde65f84d7c6e637f26c58e4dab6ddf diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index 3f5efc7d997d6..cfddd8956c9c9 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -0BdXJKVKfjhQxQo_1NG2ZN3gJx69Lo1HUYztIonf5zwC +0Z5WTruvIAaYr82tXaTDGrqFRooLmlBRsLCxH4JPC7oC From 6eb601bc3e930b5c79f0d1f6979143979199a288 Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Wed, 27 Apr 2022 17:34:08 -0500 Subject: [PATCH 126/141] Fix AppBar scrolledUnder initial state - the third (#102582) --- .../flutter/lib/src/material/app_bar.dart | 21 +- .../widgets/scroll_notification_observer.dart | 34 +- .../flutter/test/material/app_bar_test.dart | 706 +++++++++++------- .../flutter/test/material/debug_test.dart | 1 + .../flutter/test/material/scaffold_test.dart | 1 + 5 files changed, 473 insertions(+), 290 deletions(-) diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart index 85cfd19b96236..c004d9d5a4f8f 100644 --- a/packages/flutter/lib/src/material/app_bar.dart +++ b/packages/flutter/lib/src/material/app_bar.dart @@ -809,11 +809,24 @@ class _AppBarState extends State { } void _handleScrollNotification(ScrollNotification notification) { - if (notification is ScrollUpdateNotification) { + if (notification is ScrollUpdateNotification && notification.depth == 0) { final bool oldScrolledUnder = _scrolledUnder; - _scrolledUnder = notification.depth == 0 - && notification.metrics.extentBefore > 0 - && notification.metrics.axis == Axis.vertical; + final ScrollMetrics metrics = notification.metrics; + switch (metrics.axisDirection) { + case AxisDirection.up: + // Scroll view is reversed + _scrolledUnder = metrics.extentAfter > 0; + break; + case AxisDirection.down: + _scrolledUnder = metrics.extentBefore > 0; + break; + case AxisDirection.right: + case AxisDirection.left: + // Scrolled under is only supported in the vertical axis. + _scrolledUnder = false; + break; + } + if (_scrolledUnder != oldScrolledUnder) { setState(() { // React to a change in MaterialState.scrolledUnder diff --git a/packages/flutter/lib/src/widgets/scroll_notification_observer.dart b/packages/flutter/lib/src/widgets/scroll_notification_observer.dart index bc151190f1d5d..2d278b311b859 100644 --- a/packages/flutter/lib/src/widgets/scroll_notification_observer.dart +++ b/packages/flutter/lib/src/widgets/scroll_notification_observer.dart @@ -9,6 +9,7 @@ import 'package:flutter/foundation.dart'; import 'framework.dart'; import 'notification_listener.dart'; import 'scroll_notification.dart'; +import 'scroll_position.dart'; /// A [ScrollNotification] listener for [ScrollNotificationObserver]. /// @@ -151,14 +152,27 @@ class ScrollNotificationObserverState extends State @override Widget build(BuildContext context) { - return NotificationListener( - onNotification: (ScrollNotification notification) { - _notifyListeners(notification); + // A ScrollMetricsNotification allows listeners to be notified for an + // initial state, as well as if the content dimensions change without + // scrolling. + return NotificationListener( + onNotification: (ScrollMetricsNotification notification) { + _notifyListeners(_ConvertedScrollMetricsNotification( + metrics: notification.metrics, + context: notification.context, + depth: notification.depth, + )); return false; }, - child: _ScrollNotificationObserverScope( - scrollNotificationObserverState: this, - child: widget.child, + child: NotificationListener( + onNotification: (ScrollNotification notification) { + _notifyListeners(notification); + return false; + }, + child: _ScrollNotificationObserverScope( + scrollNotificationObserverState: this, + child: widget.child, + ), ), ); } @@ -170,3 +184,11 @@ class ScrollNotificationObserverState extends State super.dispose(); } } + +class _ConvertedScrollMetricsNotification extends ScrollUpdateNotification { + _ConvertedScrollMetricsNotification({ + required super.metrics, + required super.context, + required super.depth, + }); +} diff --git a/packages/flutter/test/material/app_bar_test.dart b/packages/flutter/test/material/app_bar_test.dart index 6a5295e3f164a..089684736f387 100644 --- a/packages/flutter/test/material/app_bar_test.dart +++ b/packages/flutter/test/material/app_bar_test.dart @@ -2621,311 +2621,457 @@ void main() { expect(actionIconTheme.color, foregroundColor); }); - testWidgets('SliverAppBar.backgroundColor MaterialStateColor scrolledUnder', (WidgetTester tester) async { + group('MaterialStateColor scrolledUnder', () { const double collapsedHeight = kToolbarHeight; const double expandedHeight = 200.0; const Color scrolledColor = Color(0xff00ff00); const Color defaultColor = Color(0xff0000ff); - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; - }), - expandedHeight: expandedHeight, - pinned: true, - ), - SliverList( - delegate: SliverChildListDelegate( - [ - Container(height: 1200.0, color: Colors.teal), - ], - ), - ), - ], - ), - ), - ), - ); - Finder findAppBarMaterial() { - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)); + return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)).first; } - Color? getAppBarBackgroundColor() { + Color? getAppBarBackgroundColor(WidgetTester tester) { return tester.widget(findAppBarMaterial()).color; } - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - }); - - testWidgets('SliverAppBar.backgroundColor with FlexibleSpace MaterialStateColor scrolledUnder', (WidgetTester tester) async { - const double collapsedHeight = kToolbarHeight; - const double expandedHeight = 200.0; - const Color scrolledColor = Color(0xff00ff00); - const Color defaultColor = Color(0xff0000ff); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; - }), - expandedHeight: expandedHeight, - pinned: true, - flexibleSpace: const FlexibleSpaceBar( - title: Text('SliverAppBar'), + group('SliverAppBar', () { + Widget _buildSliverApp({ + required double contentHeight, + bool reverse = false, + bool includeFlexibleSpace = false, + }) { + return MaterialApp( + home: Scaffold( + body: CustomScrollView( + reverse: reverse, + slivers: [ + SliverAppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) + ? scrolledColor + : defaultColor; + }), + expandedHeight: expandedHeight, + pinned: true, + flexibleSpace: includeFlexibleSpace + ? const FlexibleSpaceBar(title: Text('SliverAppBar')) + : null, ), - ), - SliverList( - delegate: SliverChildListDelegate( + SliverList( + delegate: SliverChildListDelegate( [ - Container(height: 1200.0, color: Colors.teal), + Container(height: contentHeight, color: Colors.teal), ], + ), ), - ), - ], - ), - ), - ), - ); - - Finder findAppBarMaterial() { - // There are 2 Material widgets below AppBar. The second is only added if - // flexibleSpace is non-null. - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)).first; - } - - Color? getAppBarBackgroundColor() { - return tester.widget(findAppBarMaterial()).color; - } - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, expandedHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); - }); - - testWidgets('AppBar.backgroundColor MaterialStateColor scrolledUnder', (WidgetTester tester) async { - const Color scrolledColor = Color(0xff00ff00); - const Color defaultColor = Color(0xff0000ff); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - appBar: AppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; - }), - title: const Text('AppBar'), - ), - body: ListView( - children: [ - Container(height: 1200.0, color: Colors.teal), - ], - ), - ), - ), - ); - - Finder findAppBarMaterial() { - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)); - } - - Color? getAppBarBackgroundColor() { - return tester.widget(findAppBarMaterial()).color; - } - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - }); - - testWidgets('AppBar.backgroundColor with FlexibleSpace MaterialStateColor scrolledUnder', (WidgetTester tester) async { - const Color scrolledColor = Color(0xff00ff00); - const Color defaultColor = Color(0xff0000ff); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - appBar: AppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; - }), - title: const Text('AppBar'), - flexibleSpace: const FlexibleSpaceBar( - title: Text('FlexibleSpace'), + ], ), ), - body: ListView( - children: [ - Container(height: 1200.0, color: Colors.teal), - ], - ), - ), - ), - ); - - Finder findAppBarMaterial() { - // There are 2 Material widgets below AppBar. The second is only added if - // flexibleSpace is non-null. - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)).first; - } - - Color? getAppBarBackgroundColor() { - return tester.widget(findAppBarMaterial()).color; - } - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), scrolledColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - - gesture = await tester.startGesture(const Offset(50.0, 300.0)); - await gesture.moveBy(const Offset(0.0, kToolbarHeight)); - await gesture.up(); - await tester.pumpAndSettle(); - - expect(getAppBarBackgroundColor(), defaultColor); - expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); - }); + ); + } + + testWidgets('backgroundColor', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp(contentHeight: 1200.0) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp(contentHeight: 1200.0, includeFlexibleSpace: true) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('backgroundColor - reverse', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp(contentHeight: 1200.0, reverse: true) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, -expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace - reverse', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp( + contentHeight: 1200.0, + reverse: true, + includeFlexibleSpace: true, + ) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, collapsedHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, -expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('backgroundColor - not triggered in reverse for short content', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp(contentHeight: 200, reverse: true) + ); + + // In reverse, the content here is not long enough to scroll under the app + // bar. + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace - not triggered in reverse for short content', (WidgetTester tester) async { + await tester.pumpWidget( + _buildSliverApp( + contentHeight: 200, + reverse: true, + includeFlexibleSpace: true, + ) + ); + + // In reverse, the content here is not long enough to scroll under the app + // bar. + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + + final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, expandedHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, expandedHeight); + }); + }); - testWidgets('AppBar._handleScrollNotification safely calls setState()', (WidgetTester tester) async { - // Regression test for failures found in Google internal issue b/185192049. - final ScrollController controller = ScrollController(initialScrollOffset: 400); - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - appBar: AppBar( - title: const Text('AppBar'), - ), - body: Scrollbar( - isAlwaysShown: true, - controller: controller, - child: ListView( - controller: controller, + group('AppBar', () { + Widget _buildAppBar({ + required double contentHeight, + bool reverse = false, + bool includeFlexibleSpace = false + }) { + return MaterialApp( + home: Scaffold( + appBar: AppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) + ? scrolledColor + : defaultColor; + }), + title: const Text('AppBar'), + flexibleSpace: includeFlexibleSpace + ? const FlexibleSpaceBar(title: Text('FlexibleSpace')) + : null, + ), + body: ListView( + reverse: reverse, children: [ - Container(height: 1200.0, color: Colors.teal), + Container(height: contentHeight, color: Colors.teal), ], ), ), - ), - ), - ); - - expect(tester.takeException(), isNull); - }); - - testWidgets('AppBar scrolledUnder does not trigger on horizontal scroll', (WidgetTester tester) async { - const Color scrolledColor = Color(0xff00ff00); - const Color defaultColor = Color(0xff0000ff); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - appBar: AppBar( - elevation: 0, - backgroundColor: MaterialStateColor.resolveWith((Set states) { - return states.contains(MaterialState.scrolledUnder) ? scrolledColor : defaultColor; - }), - title: const Text('AppBar'), - ), - body: ListView( - scrollDirection: Axis.horizontal, - children: [ - Container(height: 600.0, width: 1200.0, color: Colors.teal), - ], + ); + } + + testWidgets('backgroundColor', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar(contentHeight: 1200.0) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar(contentHeight: 1200.0, includeFlexibleSpace: true) + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('backgroundColor - reverse', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar(contentHeight: 1200.0, reverse: true) + ); + await tester.pump(); + + // In this test case, the content always extends under the AppBar, so it + // should always be the scrolledColor. + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace - reverse', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar( + contentHeight: 1200.0, + reverse: true, + includeFlexibleSpace: true, + ) + ); + await tester.pump(); + + // In this test case, the content always extends under the AppBar, so it + // should always be the scrolledColor. + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + gesture = await tester.startGesture(const Offset(50.0, 300.0)); + await gesture.moveBy(const Offset(0.0, -kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), scrolledColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('_handleScrollNotification safely calls setState()', (WidgetTester tester) async { + // Regression test for failures found in Google internal issue b/185192049. + final ScrollController controller = ScrollController(initialScrollOffset: 400); + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('AppBar'), + ), + body: Scrollbar( + isAlwaysShown: true, + controller: controller, + child: ListView( + controller: controller, + children: [ + Container(height: 1200.0, color: Colors.teal), + ], + ), + ), + ), ), - ), - ), - ); - - Finder findAppBarMaterial() { - return find.descendant(of: find.byType(AppBar), matching: find.byType(Material)); - } - - Color? getAppBarBackgroundColor() { - return tester.widget(findAppBarMaterial()).color; - } - - expect(getAppBarBackgroundColor(), defaultColor); - - TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(-100.0, 0.0)); - await gesture.up(); - await tester.pumpAndSettle(); + ); - expect(getAppBarBackgroundColor(), defaultColor); - - gesture = await tester.startGesture(const Offset(50.0, 400.0)); - await gesture.moveBy(const Offset(100.0, 0.0)); - await gesture.up(); - await tester.pumpAndSettle(); + expect(tester.takeException(), isNull); + }); - expect(getAppBarBackgroundColor(), defaultColor); + testWidgets('does not trigger on horizontal scroll', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + elevation: 0, + backgroundColor: MaterialStateColor.resolveWith((Set states) { + return states.contains(MaterialState.scrolledUnder) + ? scrolledColor + : defaultColor; + }), + title: const Text('AppBar'), + ), + body: ListView( + scrollDirection: Axis.horizontal, + children: [ + Container(height: 600.0, width: 1200.0, color: Colors.teal), + ], + ), + ), + ), + ); + + expect(getAppBarBackgroundColor(tester), defaultColor); + + TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(-100.0, 0.0)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + + gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(100.0, 0.0)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + }); + + testWidgets('backgroundColor - not triggered in reverse for short content', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar( + contentHeight: 200.0, + reverse: true, + ) + ); + await tester.pump(); + + // In reverse, the content here is not long enough to scroll under the app + // bar. + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + + testWidgets('backgroundColor with FlexibleSpace - not triggered in reverse for short content', (WidgetTester tester) async { + await tester.pumpWidget( + _buildAppBar( + contentHeight: 200.0, + reverse: true, + includeFlexibleSpace: true, + ) + ); + await tester.pump(); + + // In reverse, the content here is not long enough to scroll under the app + // bar. + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + + final TestGesture gesture = await tester.startGesture(const Offset(50.0, 400.0)); + await gesture.moveBy(const Offset(0.0, kToolbarHeight)); + await gesture.up(); + await tester.pumpAndSettle(); + + expect(getAppBarBackgroundColor(tester), defaultColor); + expect(tester.getSize(findAppBarMaterial()).height, kToolbarHeight); + }); + }); }); testWidgets('AppBar.preferredHeightFor', (WidgetTester tester) async { diff --git a/packages/flutter/test/material/debug_test.dart b/packages/flutter/test/material/debug_test.dart index 59474c5acc714..3d312d376aba6 100644 --- a/packages/flutter/test/material/debug_test.dart +++ b/packages/flutter/test/material/debug_test.dart @@ -349,6 +349,7 @@ void main() { ' Material\n' ' _ScrollNotificationObserverScope\n' ' NotificationListener\n' + ' NotificationListener\n' ' ScrollNotificationObserver\n' ' _ScaffoldScope\n' ' Scaffold-[LabeledGlobalKey#00000]\n' diff --git a/packages/flutter/test/material/scaffold_test.dart b/packages/flutter/test/material/scaffold_test.dart index d1775cf5ba180..d1c092e637347 100644 --- a/packages/flutter/test/material/scaffold_test.dart +++ b/packages/flutter/test/material/scaffold_test.dart @@ -2339,6 +2339,7 @@ void main() { ' Material\n' ' _ScrollNotificationObserverScope\n' ' NotificationListener\n' + ' NotificationListener\n' ' ScrollNotificationObserver\n' ' _ScaffoldScope\n' ' Scaffold\n' From 7d18594f38e994f4949108343d08bb0071bf1724 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Apr 2022 15:39:08 -0700 Subject: [PATCH 127/141] Bump github/codeql-action from 2.1.8 to 2.1.9 (#102693) --- .github/workflows/scorecards-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index e4a0f5407ebb7..03d2928d1db36 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -49,6 +49,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@1ed1437484560351c5be56cf73a48a279d116b78 + uses: github/codeql-action/upload-sarif@7502d6e991ca767d2db617bfd823a1ed925a0d59 with: sarif_file: results.sarif From 401df0eb6f39c20e92c15615d5027904285aa652 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 18:49:08 -0400 Subject: [PATCH 128/141] Roll Engine from 35e56175dfde to 0ac2fc2a1d1c (2 revisions) (#102695) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index c43784449899e..14a9dad054776 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -35e56175dfde65f84d7c6e637f26c58e4dab6ddf +0ac2fc2a1d1c427759d4f3112d42cc08cd053ea8 From a03f59cdc41f30ef3c53bd27b9caa0a343332ebc Mon Sep 17 00:00:00 2001 From: Phil Quitslund Date: Wed, 27 Apr 2022 16:14:10 -0700 Subject: [PATCH 129/141] [flutter_driver] rename local functions with `_`s (#102689) --- .../lib/src/driver/vmservice_driver.dart | 10 ++--- .../src/real_tests/timeline_summary_test.dart | 44 +++++++++---------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/flutter_driver/lib/src/driver/vmservice_driver.dart b/packages/flutter_driver/lib/src/driver/vmservice_driver.dart index 2b760158ef581..1924f415f022c 100644 --- a/packages/flutter_driver/lib/src/driver/vmservice_driver.dart +++ b/packages/flutter_driver/lib/src/driver/vmservice_driver.dart @@ -86,22 +86,22 @@ class VMServiceFlutterDriver extends FlutterDriver { _log('Connecting to Flutter application at $dartVmServiceUrl'); final vms.VmService client = await vmServiceConnectFunction(dartVmServiceUrl, headers); - Future _waitForRootIsolate() async { - bool _checkIsolate(vms.IsolateRef ref) => ref.number == isolateNumber.toString(); + Future waitForRootIsolate() async { + bool checkIsolate(vms.IsolateRef ref) => ref.number == isolateNumber.toString(); while (true) { final vms.VM vm = await client.getVM(); - if (vm.isolates!.isEmpty || (isolateNumber != null && !vm.isolates!.any(_checkIsolate))) { + if (vm.isolates!.isEmpty || (isolateNumber != null && !vm.isolates!.any(checkIsolate))) { await Future.delayed(_kPauseBetweenReconnectAttempts); continue; } return isolateNumber == null ? vm.isolates!.first - : vm.isolates!.firstWhere(_checkIsolate); + : vm.isolates!.firstWhere(checkIsolate); } } final vms.IsolateRef isolateRef = (await _warnIfSlow( - future: _waitForRootIsolate(), + future: waitForRootIsolate(), timeout: kUnusuallyLongTimeout, message: isolateNumber == null ? 'The root isolate is taking an unusually long time to start.' diff --git a/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart b/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart index 0c0c94098060e..3fec56866f34d 100644 --- a/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart +++ b/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart @@ -101,7 +101,7 @@ void main() { }, }; - List> _genGC(String name, int count, int startTime, int timeDiff) { + List> genGC(String name, int count, int startTime, int timeDiff) { int ts = startTime; bool begin = true; final List> ret = >[]; @@ -125,11 +125,11 @@ void main() { } List> newGenGC(int count, int startTime, int timeDiff) { - return _genGC('CollectNewGeneration', count, startTime, timeDiff); + return genGC('CollectNewGeneration', count, startTime, timeDiff); } List> oldGenGC(int count, int startTime, int timeDiff) { - return _genGC('CollectOldGeneration', count, startTime, timeDiff); + return genGC('CollectOldGeneration', count, startTime, timeDiff); } List> rasterizeTimeSequenceInMillis(List sequence) { @@ -756,14 +756,14 @@ void main() { group('RefreshRateSummarizer tests', () { const double kCompareDelta = 0.01; - RefreshRateSummary _summarize(List> traceEvents) { + RefreshRateSummary summarizeRefresh(List> traceEvents) { final Timeline timeline = Timeline.fromJson({ 'traceEvents': traceEvents, }); return RefreshRateSummary(vsyncEvents: timeline.events!); } - List> _populateEvents({required int numberOfEvents, required int startTime, required int interval, required int margin}) { + List> populateEvents({required int numberOfEvents, required int startTime, required int interval, required int margin}) { final List> events = >[]; int startTimeInNanoseconds = startTime; for (int i = 0; i < numberOfEvents; i ++) { @@ -780,12 +780,12 @@ void main() { const int intervalInNanoseconds = 33333333; // allow some margins const int margin = 3000000; - final List> events = _populateEvents(numberOfEvents: 100, + final List> events = populateEvents(numberOfEvents: 100, startTime: startTimeInNanoseconds, interval: intervalInNanoseconds, margin: margin, ); - final RefreshRateSummary summary = _summarize(events); + final RefreshRateSummary summary = summarizeRefresh(events); expect(summary.percentageOf30HzFrames, closeTo(100, kCompareDelta)); expect(summary.percentageOf60HzFrames, 0); expect(summary.percentageOf90HzFrames, 0); @@ -798,13 +798,13 @@ void main() { const int intervalInNanoseconds = 16666666; // allow some margins const int margin = 1200000; - final List> events = _populateEvents(numberOfEvents: 100, + final List> events = populateEvents(numberOfEvents: 100, startTime: startTimeInNanoseconds, interval: intervalInNanoseconds, margin: margin, ); - final RefreshRateSummary summary = _summarize(events); + final RefreshRateSummary summary = summarizeRefresh(events); expect(summary.percentageOf30HzFrames, 0); expect(summary.percentageOf60HzFrames, closeTo(100, kCompareDelta)); expect(summary.percentageOf90HzFrames, 0); @@ -817,13 +817,13 @@ void main() { const int intervalInNanoseconds = 11111111; // allow some margins const int margin = 500000; - final List> events = _populateEvents(numberOfEvents: 100, + final List> events = populateEvents(numberOfEvents: 100, startTime: startTimeInNanoseconds, interval: intervalInNanoseconds, margin: margin, ); - final RefreshRateSummary summary = _summarize(events); + final RefreshRateSummary summary = summarizeRefresh(events); expect(summary.percentageOf30HzFrames, 0); expect(summary.percentageOf60HzFrames, 0); expect(summary.percentageOf90HzFrames, closeTo(100, kCompareDelta)); @@ -836,12 +836,12 @@ void main() { const int intervalInNanoseconds = 8333333; // allow some margins const int margin = 300000; - final List> events = _populateEvents(numberOfEvents: 100, + final List> events = populateEvents(numberOfEvents: 100, startTime: startTimeInNanoseconds, interval: intervalInNanoseconds, margin: margin, ); - final RefreshRateSummary summary = _summarize(events); + final RefreshRateSummary summary = summarizeRefresh(events); expect(summary.percentageOf30HzFrames, 0); expect(summary.percentageOf60HzFrames, 0); expect(summary.percentageOf90HzFrames, 0); @@ -852,12 +852,12 @@ void main() { test('Identify illegal refresh rates.', () async { const int startTimeInNanoseconds = 2750850055430; const int intervalInNanoseconds = 10000000; - final List> events = _populateEvents(numberOfEvents: 1, + final List> events = populateEvents(numberOfEvents: 1, startTime: startTimeInNanoseconds, interval: intervalInNanoseconds, margin: 0, ); - final RefreshRateSummary summary = _summarize(events); + final RefreshRateSummary summary = summarizeRefresh(events); expect(summary.percentageOf30HzFrames, 0); expect(summary.percentageOf60HzFrames, 0); expect(summary.percentageOf90HzFrames, 0); @@ -878,48 +878,48 @@ void main() { const int totalFrames = num30Hz + num60Hz + num80Hz + num90Hz + num120Hz + numIllegal; // Add 30hz frames - events.addAll(_populateEvents(numberOfEvents: num30Hz, + events.addAll(populateEvents(numberOfEvents: num30Hz, startTime: 0, interval: 32000000, margin: 0, )); // Add 60hz frames - events.addAll(_populateEvents(numberOfEvents: num60Hz, + events.addAll(populateEvents(numberOfEvents: num60Hz, startTime: 0, interval: 16000000, margin: 0, )); // Add 80hz frames - events.addAll(_populateEvents(numberOfEvents: num80Hz, + events.addAll(populateEvents(numberOfEvents: num80Hz, startTime: 0, interval: 12000000, margin: 0, )); // Add 90hz frames - events.addAll(_populateEvents(numberOfEvents: num90Hz, + events.addAll(populateEvents(numberOfEvents: num90Hz, startTime: 0, interval: 11000000, margin: 0, )); // Add 120hz frames - events.addAll(_populateEvents(numberOfEvents: num120Hz, + events.addAll(populateEvents(numberOfEvents: num120Hz, startTime: 0, interval: 8000000, margin: 0, )); // Add illegal refresh rate frames - events.addAll(_populateEvents(numberOfEvents: numIllegal, + events.addAll(populateEvents(numberOfEvents: numIllegal, startTime: 0, interval: 60000, margin: 0, )); - final RefreshRateSummary summary = _summarize(events); + final RefreshRateSummary summary = summarizeRefresh(events); expect(summary.percentageOf30HzFrames, closeTo(num30Hz/totalFrames*100, kCompareDelta)); expect(summary.percentageOf60HzFrames, closeTo(num60Hz/totalFrames*100, kCompareDelta)); From b5e7fb076c14d60f889ec74f4d717638ec67a311 Mon Sep 17 00:00:00 2001 From: Phil Quitslund Date: Wed, 27 Apr 2022 16:19:07 -0700 Subject: [PATCH 130/141] [flutter_tools] rename local functions with `_`s (#102688) --- .../lib/src/android/android_studio.dart | 24 +-- .../lib/src/android/android_workflow.dart | 6 +- .../flutter_tools/lib/src/ios/bitcode.dart | 8 +- .../flutter_tools/lib/src/ios/xcodeproj.dart | 6 +- .../lib/src/isolated/devfs_web.dart | 4 +- .../lib/src/localizations/gen_l10n_types.dart | 6 +- .../hermetic/analyze_continuously_test.dart | 6 +- .../hermetic/build_ios_test.dart | 190 +++++++++--------- .../hermetic/build_ipa_test.dart | 100 ++++----- .../hermetic/ide_config_test.dart | 92 ++++----- .../base/user_messages_test.dart | 14 +- .../targets/icon_tree_shaker_test.dart | 62 +++--- .../test/general.shard/ios/xcresult_test.dart | 32 +-- .../test/general.shard/plugins_test.dart | 4 +- .../resident_web_runner_test.dart | 58 +++--- .../test/general.shard/version_test.dart | 8 +- .../windows/visual_studio_validator_test.dart | 24 +-- .../integration.shard/analyze_once_test.dart | 4 +- ...ild_android_app_project_builddir_test.dart | 6 +- .../forbidden_imports_test.dart | 28 +-- 20 files changed, 341 insertions(+), 341 deletions(-) diff --git a/packages/flutter_tools/lib/src/android/android_studio.dart b/packages/flutter_tools/lib/src/android/android_studio.dart index 0049f781ff9ec..0ad239389c2ec 100644 --- a/packages/flutter_tools/lib/src/android/android_studio.dart +++ b/packages/flutter_tools/lib/src/android/android_studio.dart @@ -249,7 +249,7 @@ class AndroidStudio implements Comparable { static List _allMacOS() { final List candidatePaths = []; - void _checkForStudio(String path) { + void checkForStudio(String path) { if (!globals.fs.isDirectorySync(path)) { return; } @@ -264,7 +264,7 @@ class AndroidStudio implements Comparable { if (name.startsWith('Android Studio') && name.endsWith('.app')) { candidatePaths.add(directory); } else if (!directory.path.endsWith('.app')) { - _checkForStudio(directory.path); + checkForStudio(directory.path); } } } on Exception catch (e) { @@ -272,10 +272,10 @@ class AndroidStudio implements Comparable { } } - _checkForStudio('/Applications'); + checkForStudio('/Applications'); final String? homeDirPath = globals.fsUtils.homeDirPath; if (homeDirPath != null) { - _checkForStudio(globals.fs.path.join( + checkForStudio(globals.fs.path.join( homeDirPath, 'Applications', )); @@ -321,7 +321,7 @@ class AndroidStudio implements Comparable { static List _allLinuxOrWindows() { final List studios = []; - bool _hasStudioAt(String path, { Version? newerThan }) { + bool hasStudioAt(String path, { Version? newerThan }) { return studios.any((AndroidStudio studio) { if (studio.directory != path) { return false; @@ -363,7 +363,7 @@ class AndroidStudio implements Comparable { for (final Directory entity in entities) { final AndroidStudio? studio = AndroidStudio.fromHomeDot(entity); - if (studio != null && !_hasStudioAt(studio.directory, newerThan: studio.version)) { + if (studio != null && !hasStudioAt(studio.directory, newerThan: studio.version)) { studios.removeWhere((AndroidStudio other) => other.directory == studio.directory); studios.add(studio); } @@ -394,7 +394,7 @@ class AndroidStudio implements Comparable { version: Version.parse(version), studioAppName: title, ); - if (studio != null && !_hasStudioAt(studio.directory, newerThan: studio.version)) { + if (studio != null && !hasStudioAt(studio.directory, newerThan: studio.version)) { studios.removeWhere((AndroidStudio other) => other.directory == studio.directory); studios.add(studio); } @@ -405,21 +405,21 @@ class AndroidStudio implements Comparable { } final String? configuredStudioDir = globals.config.getValue('android-studio-dir') as String?; - if (configuredStudioDir != null && !_hasStudioAt(configuredStudioDir)) { + if (configuredStudioDir != null && !hasStudioAt(configuredStudioDir)) { studios.add(AndroidStudio(configuredStudioDir, configured: configuredStudioDir)); } if (globals.platform.isLinux) { - void _checkWellKnownPath(String path) { - if (globals.fs.isDirectorySync(path) && !_hasStudioAt(path)) { + void checkWellKnownPath(String path) { + if (globals.fs.isDirectorySync(path) && !hasStudioAt(path)) { studios.add(AndroidStudio(path)); } } // Add /opt/android-studio and $HOME/android-studio, if they exist. - _checkWellKnownPath('/opt/android-studio'); - _checkWellKnownPath('${globals.fsUtils.homeDirPath}/android-studio'); + checkWellKnownPath('/opt/android-studio'); + checkWellKnownPath('${globals.fsUtils.homeDirPath}/android-studio'); } return studios; } diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart index 7d6de454f74b4..04a80d99d64a2 100644 --- a/packages/flutter_tools/lib/src/android/android_workflow.dart +++ b/packages/flutter_tools/lib/src/android/android_workflow.dart @@ -366,7 +366,7 @@ class AndroidLicenseValidator extends DoctorValidator { Future get licensesAccepted async { LicensesAccepted? status; - void _handleLine(String line) { + void handleLine(String line) { if (licenseCounts.hasMatch(line)) { final Match? match = licenseCounts.firstMatch(line); if (match?.group(1) != match?.group(2)) { @@ -399,12 +399,12 @@ class AndroidLicenseValidator extends DoctorValidator { final Future output = process.stdout .transform(const Utf8Decoder(reportErrors: false)) .transform(const LineSplitter()) - .listen(_handleLine) + .listen(handleLine) .asFuture(null); final Future errors = process.stderr .transform(const Utf8Decoder(reportErrors: false)) .transform(const LineSplitter()) - .listen(_handleLine) + .listen(handleLine) .asFuture(null); await Future.wait(>[output, errors]); return status ?? LicensesAccepted.unknown; diff --git a/packages/flutter_tools/lib/src/ios/bitcode.dart b/packages/flutter_tools/lib/src/ios/bitcode.dart index e07d89219dc59..1914ee258f876 100644 --- a/packages/flutter_tools/lib/src/ios/bitcode.dart +++ b/packages/flutter_tools/lib/src/ios/bitcode.dart @@ -46,21 +46,21 @@ Future validateBitcode(BuildMode buildMode, TargetPlatform targetPlatform, Version _parseVersionFromClang(String? clangVersion) { final RegExp pattern = RegExp(r'Apple (LLVM|clang) version (\d+\.\d+\.\d+) '); - Never _invalid() { + Never invalid() { throwToolExit('Unable to parse Clang version from "$clangVersion". ' 'Expected a string like "Apple (LLVM|clang) #.#.# (clang-####.#.##.#)".'); } if (clangVersion == null || clangVersion.isEmpty) { - _invalid(); + invalid(); } final RegExpMatch? match = pattern.firstMatch(clangVersion); if (match == null || match.groupCount != 2) { - _invalid(); + invalid(); } final Version? version = Version.parse(match.group(2)); if (version == null) { - _invalid(); + invalid(); } return version; } diff --git a/packages/flutter_tools/lib/src/ios/xcodeproj.dart b/packages/flutter_tools/lib/src/ios/xcodeproj.dart index 47f8575740873..9625f32ef0d7a 100644 --- a/packages/flutter_tools/lib/src/ios/xcodeproj.dart +++ b/packages/flutter_tools/lib/src/ios/xcodeproj.dart @@ -301,7 +301,7 @@ class XcodeProjectInterpreter { const int missingProjectExitCode = 66; // The exit code returned by 'xcodebuild -list' when the project is corrupted. const int corruptedProjectExitCode = 74; - bool _allowedFailures(int c) => c == missingProjectExitCode || c == corruptedProjectExitCode; + bool allowedFailures(int c) => c == missingProjectExitCode || c == corruptedProjectExitCode; final RunResult result = await _processUtils.run( [ ...xcrunCommand(), @@ -310,10 +310,10 @@ class XcodeProjectInterpreter { if (projectFilename != null) ...['-project', projectFilename], ], throwOnError: true, - allowedFailures: _allowedFailures, + allowedFailures: allowedFailures, workingDirectory: projectPath, ); - if (_allowedFailures(result.exitCode)) { + if (allowedFailures(result.exitCode)) { // User configuration error, tool exit instead of crashing. throwToolExit('Unable to get Xcode project information:\n ${result.stderr}'); } diff --git a/packages/flutter_tools/lib/src/isolated/devfs_web.dart b/packages/flutter_tools/lib/src/isolated/devfs_web.dart index 3a82a98a470b8..0e8434a45e1ed 100644 --- a/packages/flutter_tools/lib/src/isolated/devfs_web.dart +++ b/packages/flutter_tools/lib/src/isolated/devfs_web.dart @@ -254,7 +254,7 @@ class WebAssetServer implements AssetReader { // Return a version string for all active modules. This is populated // along with the `moduleProvider` update logic. - Future> _digestProvider() async => digests; + Future> digestProvider() async => digests; // Ensure dwds is present and provide middleware to avoid trying to // load the through the isolate APIs. @@ -295,7 +295,7 @@ class WebAssetServer implements AssetReader { loadStrategy: FrontendServerRequireStrategyProvider( ReloadConfiguration.none, server, - _digestProvider, + digestProvider, ).strategy, expressionCompiler: expressionCompiler, spawnDds: enableDds, diff --git a/packages/flutter_tools/lib/src/localizations/gen_l10n_types.dart b/packages/flutter_tools/lib/src/localizations/gen_l10n_types.dart index 9be9b8d8751d6..9034f8886056a 100644 --- a/packages/flutter_tools/lib/src/localizations/gen_l10n_types.dart +++ b/packages/flutter_tools/lib/src/localizations/gen_l10n_types.dart @@ -358,7 +358,7 @@ class Message { if (attributes == null) { - void _throwEmptyAttributes(final RegExp regExp, final String type) { + void throwEmptyAttributes(final RegExp regExp, final String type) { final RegExpMatch? match = regExp.firstMatch(_value(bundle, resourceId)); final bool isMatch = match != null && match.groupCount == 1; if (isMatch) { @@ -369,8 +369,8 @@ class Message { } } - _throwEmptyAttributes(_pluralRE, 'plural'); - _throwEmptyAttributes(_selectRE, 'select'); + throwEmptyAttributes(_pluralRE, 'plural'); + throwEmptyAttributes(_selectRE, 'select'); } return attributes as Map?; diff --git a/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart index 35f63cafcdabd..93f7e363e082c 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart @@ -55,7 +55,7 @@ void main() { }); - void _createSampleProject(Directory directory, { bool brokenCode = false }) { + void createSampleProject(Directory directory, { bool brokenCode = false }) { final File pubspecFile = fileSystem.file(fileSystem.path.join(directory.path, 'pubspec.yaml')); pubspecFile.writeAsStringSync(''' name: foo_project @@ -75,7 +75,7 @@ void main() { group('analyze --watch', () { testUsingContext('AnalysisServer success', () async { - _createSampleProject(tempDir); + createSampleProject(tempDir); final Pub pub = Pub( fileSystem: fileSystem, @@ -113,7 +113,7 @@ void main() { }); testUsingContext('AnalysisServer errors', () async { - _createSampleProject(tempDir, brokenCode: true); + createSampleProject(tempDir, brokenCode: true); final Pub pub = Pub( fileSystem: fileSystem, diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart index 071f0f4b5c040..d18c63bc22e76 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart @@ -72,25 +72,25 @@ void main() { }); // Sets up the minimal mock project files necessary to look like a Flutter project. - void _createCoreMockProjectFiles() { + void createCoreMockProjectFiles() { fileSystem.file('pubspec.yaml').createSync(); fileSystem.file('.packages').createSync(); fileSystem.file(fileSystem.path.join('lib', 'main.dart')).createSync(recursive: true); } // Sets up the minimal mock project files necessary for iOS builds to succeed. - void _createMinimalMockProjectFiles() { + void createMinimalMockProjectFiles() { fileSystem.directory(fileSystem.path.join('ios', 'Runner.xcodeproj')).createSync(recursive: true); fileSystem.directory(fileSystem.path.join('ios', 'Runner.xcworkspace')).createSync(recursive: true); fileSystem.file(fileSystem.path.join('ios', 'Runner.xcodeproj', 'project.pbxproj')).createSync(); - _createCoreMockProjectFiles(); + createCoreMockProjectFiles(); } const FakeCommand xattrCommand = FakeCommand(command: [ 'xattr', '-r', '-d', 'com.apple.FinderInfo', '/', ]); - FakeCommand _setUpRsyncCommand({void Function() onRun}) { + FakeCommand setUpRsyncCommand({void Function() onRun}) { return FakeCommand( command: const [ 'rsync', @@ -104,7 +104,7 @@ void main() { ); } - FakeCommand _setUpXCResultCommand({String stdout = '', void Function() onRun}) { + FakeCommand setUpXCResultCommand({String stdout = '', void Function() onRun}) { return FakeCommand( command: const [ 'xcrun', @@ -122,7 +122,7 @@ void main() { // Creates a FakeCommand for the xcodebuild call to build the app // in the given configuration. - FakeCommand _setUpFakeXcodeBuildHandler({ + FakeCommand setUpFakeXcodeBuildHandler({ bool verbose = false, bool simulator = false, String deviceId, @@ -179,7 +179,7 @@ void main() { testUsingContext('ios build fails when there is no ios project', () async { final BuildCommand command = BuildCommand(); - _createCoreMockProjectFiles(); + createCoreMockProjectFiles(); expect(createTestCommandRunner(command).run( const ['build', 'ios', '--no-pub'] @@ -193,7 +193,7 @@ void main() { testUsingContext('ios build fails in debug with code analysis', () async { final BuildCommand command = BuildCommand(); - _createCoreMockProjectFiles(); + createCoreMockProjectFiles(); expect(createTestCommandRunner(command).run( const ['build', 'ios', '--no-pub', '--debug', '--analyze-size'] @@ -225,7 +225,7 @@ void main() { testUsingContext('ios build invokes xcode build', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ios', '--no-pub'] @@ -235,10 +235,10 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(onRun: () { + setUpFakeXcodeBuildHandler(onRun: () { fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true); }), - _setUpRsyncCommand(), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -246,7 +246,7 @@ void main() { testUsingContext('ios build invokes xcode build with device ID', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ios', '--no-pub', '--device-id', '1234'] @@ -256,10 +256,10 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(deviceId: '1234', onRun: () { + setUpFakeXcodeBuildHandler(deviceId: '1234', onRun: () { fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true); }), - _setUpRsyncCommand(), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -267,7 +267,7 @@ void main() { testUsingContext('ios simulator build invokes xcode build', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ios', '--simulator', '--no-pub'] @@ -276,10 +276,10 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(simulator: true, onRun: () { + setUpFakeXcodeBuildHandler(simulator: true, onRun: () { fileSystem.directory('build/ios/Debug-iphonesimulator/Runner.app').createSync(recursive: true); }), - _setUpRsyncCommand(), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -287,7 +287,7 @@ void main() { testUsingContext('ios build invokes xcode build with verbosity', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ios', '--no-pub', '-v'] @@ -296,10 +296,10 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(verbose: true, onRun: () { + setUpFakeXcodeBuildHandler(verbose: true, onRun: () { fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true); }), - _setUpRsyncCommand(), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -307,7 +307,7 @@ void main() { testUsingContext('Performs code size analysis and sends analytics', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ios', '--no-pub', '--analyze-size'] @@ -322,7 +322,7 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(onRun: () { + setUpFakeXcodeBuildHandler(onRun: () { fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true); fileSystem.file('build/flutter_size_01/snapshot.arm64.json') ..createSync(recursive: true) @@ -339,7 +339,7 @@ void main() { ..createSync(recursive: true) ..writeAsStringSync('{}'); }), - _setUpRsyncCommand(onRun: () => fileSystem.file('build/ios/iphoneos/Runner.app/Frameworks/App.framework/App') + setUpRsyncCommand(onRun: () => fileSystem.file('build/ios/iphoneos/Runner.app/Frameworks/App.framework/App') ..createSync(recursive: true) ..writeAsBytesSync(List.generate(10000, (int index) => 0))), ]), @@ -352,7 +352,7 @@ void main() { testUsingContext('Trace error if xcresult is empty.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -364,11 +364,11 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { + setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }), - _setUpXCResultCommand(), - _setUpRsyncCommand(), + setUpXCResultCommand(), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -377,7 +377,7 @@ void main() { testUsingContext('Display xcresult issues on console if parsed.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -390,11 +390,11 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { + setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }), - _setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -403,7 +403,7 @@ void main() { testUsingContext('Do not display xcresult issues that needs to be discarded.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -418,11 +418,11 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { + setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }), - _setUpXCResultCommand(stdout: kSampleResultJsonWithIssuesToBeDiscarded), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonWithIssuesToBeDiscarded), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -431,7 +431,7 @@ void main() { testUsingContext('Trace if xcresult bundle does not exist.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -443,9 +443,9 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1), - _setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), - _setUpRsyncCommand(), + setUpFakeXcodeBuildHandler(exitCode: 1), + setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -454,7 +454,7 @@ void main() { testUsingContext('Extra error message for provision profile issue in xcresult bundle.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -470,11 +470,11 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { + setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }), - _setUpXCResultCommand(stdout: kSampleResultJsonWithProvisionIssue), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonWithProvisionIssue), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -483,7 +483,7 @@ void main() { testUsingContext('Default bundle identifier error should be hidden if there is another xcresult issue.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -497,11 +497,11 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { + setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }), - _setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, EnvironmentType: () => EnvironmentType.physical, @@ -511,7 +511,7 @@ void main() { testUsingContext('Show default bundle identifier error if there are no other errors.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -523,11 +523,11 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { + setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }), - _setUpXCResultCommand(stdout: kSampleResultJsonNoIssues), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonNoIssues), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, EnvironmentType: () => EnvironmentType.physical, @@ -538,7 +538,7 @@ void main() { testUsingContext('Display xcresult issues with no provisioning profile.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -551,14 +551,14 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); } ), - _setUpXCResultCommand(stdout: kSampleResultJsonWithNoProvisioningProfileIssue), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonWithNoProvisioningProfileIssue), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -567,7 +567,7 @@ void main() { testUsingContext('Failed to parse xcresult but display missing provisioning profile issue from stdout.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -579,7 +579,7 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( exitCode: 1, stdout: ''' Runner requires a provisioning profile. Select a provisioning profile in the Signing & Capabilities editor @@ -588,8 +588,8 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); } ), - _setUpXCResultCommand(stdout: kSampleResultJsonInvalidIssuesMap), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonInvalidIssuesMap), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -598,7 +598,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig testUsingContext('Failed to parse xcresult but detected no development team issue.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -610,14 +610,14 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); } ), - _setUpXCResultCommand(stdout: kSampleResultJsonInvalidIssuesMap), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonInvalidIssuesMap), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(developmentTeam: null), @@ -627,7 +627,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig testUsingContext('xcresult did not detect issue but detected by stdout.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -639,7 +639,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( exitCode: 1, stdout: ''' Runner requires a provisioning profile. Select a provisioning profile in the Signing & Capabilities editor @@ -648,8 +648,8 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); } ), - _setUpXCResultCommand(stdout: kSampleResultJsonNoIssues), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonNoIssues), + setUpRsyncCommand(), ]), EnvironmentType: () => EnvironmentType.physical, Platform: () => macosPlatform, @@ -659,7 +659,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig testUsingContext('xcresult did not detect issue, no development team is detected from build setting.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -671,14 +671,14 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); } ), - _setUpXCResultCommand(stdout: kSampleResultJsonInvalidIssuesMap), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonInvalidIssuesMap), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(developmentTeam: null), @@ -687,7 +687,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig testUsingContext('No development team issue error message is not displayed if no provisioning profile issue is detected from xcresult first.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -700,14 +700,14 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); } ), - _setUpXCResultCommand(stdout: kSampleResultJsonWithNoProvisioningProfileIssue), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonWithNoProvisioningProfileIssue), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(developmentTeam: null), @@ -716,7 +716,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig testUsingContext('General provisioning profile issue error message is not displayed if no development team issue is detected first.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--no-pub']), @@ -729,14 +729,14 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); } ), - _setUpXCResultCommand(stdout: kSampleResultJsonWithProvisionIssue), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonWithProvisionIssue), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(developmentTeam: null), @@ -747,7 +747,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig testUsingContext('Trace error if xcresult is empty.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--simulator', '--no-pub']), @@ -759,15 +759,15 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( simulator: true, exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }, ), - _setUpXCResultCommand(), - _setUpRsyncCommand(), + setUpXCResultCommand(), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -776,7 +776,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig testUsingContext('Display xcresult issues on console if parsed.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--simulator', '--no-pub']), @@ -789,15 +789,15 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( simulator: true, exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }, ), - _setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -806,7 +806,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig testUsingContext('Do not display xcresult issues that needs to be discarded.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--simulator', '--no-pub']), @@ -821,15 +821,15 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( simulator: true, exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }, ), - _setUpXCResultCommand(stdout: kSampleResultJsonWithIssuesToBeDiscarded), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonWithIssuesToBeDiscarded), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), @@ -838,7 +838,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig testUsingContext('Trace if xcresult bundle does not exist.', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ios', '--simulator', '--no-pub']), @@ -850,12 +850,12 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ xattrCommand, - _setUpFakeXcodeBuildHandler( + setUpFakeXcodeBuildHandler( simulator: true, exitCode: 1, ), - _setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), - _setUpRsyncCommand(), + setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), + setUpRsyncCommand(), ]), Platform: () => macosPlatform, XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(), diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart index 6f31be30790f8..07d755d7b1ea8 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart @@ -68,25 +68,25 @@ void main() { }); // Sets up the minimal mock project files necessary to look like a Flutter project. - void _createCoreMockProjectFiles() { + void createCoreMockProjectFiles() { fileSystem.file('pubspec.yaml').createSync(); fileSystem.file('.packages').createSync(); fileSystem.file(fileSystem.path.join('lib', 'main.dart')).createSync(recursive: true); } // Sets up the minimal mock project files necessary for iOS builds to succeed. - void _createMinimalMockProjectFiles() { + void createMinimalMockProjectFiles() { fileSystem.directory(fileSystem.path.join('ios', 'Runner.xcodeproj')).createSync(recursive: true); fileSystem.directory(fileSystem.path.join('ios', 'Runner.xcworkspace')).createSync(recursive: true); fileSystem.file(fileSystem.path.join('ios', 'Runner.xcodeproj', 'project.pbxproj')).createSync(); - _createCoreMockProjectFiles(); + createCoreMockProjectFiles(); } const FakeCommand xattrCommand = FakeCommand(command: [ 'xattr', '-r', '-d', 'com.apple.FinderInfo', '/', ]); - FakeCommand _setUpXCResultCommand({String stdout = '', void Function() onRun}) { + FakeCommand setUpXCResultCommand({String stdout = '', void Function() onRun}) { return FakeCommand( command: const [ 'xcrun', @@ -104,7 +104,7 @@ void main() { // Creates a FakeCommand for the xcodebuild call to build the app // in the given configuration. - FakeCommand _setUpFakeXcodeBuildHandler({ bool verbose = false, int exitCode = 0, void Function() onRun }) { + FakeCommand setUpFakeXcodeBuildHandler({ bool verbose = false, int exitCode = 0, void Function() onRun }) { return FakeCommand( command: [ 'xcrun', @@ -132,7 +132,7 @@ void main() { ); } - FakeCommand _exportArchiveCommand({ + FakeCommand exportArchiveCommand({ String exportOptionsPlist = '/ExportOptions.plist', File cachePlist, }) { @@ -162,7 +162,7 @@ void main() { testUsingContext('ipa build fails when there is no ios project', () async { final BuildCommand command = BuildCommand(); - _createCoreMockProjectFiles(); + createCoreMockProjectFiles(); expect(createTestCommandRunner(command).run( const ['build', 'ipa', '--no-pub'] @@ -176,7 +176,7 @@ void main() { testUsingContext('ipa build fails in debug with code analysis', () async { final BuildCommand command = BuildCommand(); - _createCoreMockProjectFiles(); + createCoreMockProjectFiles(); expect(createTestCommandRunner(command).run( const ['build', 'ipa', '--no-pub', '--debug', '--analyze-size'] @@ -209,7 +209,7 @@ void main() { testUsingContext('ipa build fails when export plist does not exist', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectToolExitLater( createTestCommandRunner(command).run([ @@ -232,7 +232,7 @@ void main() { testUsingContext('ipa build fails when export plist is not a file', () async { final Directory bogus = fileSystem.directory('bogus')..createSync(); final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectToolExitLater( createTestCommandRunner(command).run([ @@ -254,7 +254,7 @@ void main() { testUsingContext('ipa build fails when --export-options-plist and --export-method are used together', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectToolExitLater( createTestCommandRunner(command).run([ @@ -280,7 +280,7 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(), + setUpFakeXcodeBuildHandler(), const FakeCommand( command: [ 'xcrun', @@ -299,7 +299,7 @@ void main() { stderr: 'error: exportArchive: "Runner.app" requires a provisioning profile.', ), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ipa', '--no-pub'] @@ -322,10 +322,10 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(), - _exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist), + setUpFakeXcodeBuildHandler(), + exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ipa', '--no-pub'] @@ -364,10 +364,10 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(), - _exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist), + setUpFakeXcodeBuildHandler(), + exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ipa', '--no-pub', '--export-method', 'ad-hoc'] @@ -407,10 +407,10 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(), - _exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist), + setUpFakeXcodeBuildHandler(), + exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ipa', '--no-pub', '--export-method', 'enterprise'] @@ -450,10 +450,10 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(), - _exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist), + setUpFakeXcodeBuildHandler(), + exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ipa', '--no-pub',] @@ -485,10 +485,10 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(verbose: true), - _exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist), + setUpFakeXcodeBuildHandler(verbose: true), + exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ipa', '--no-pub', '-v'] @@ -530,7 +530,7 @@ void main() { ], ), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( const ['build', 'ipa', '--no-pub', '--no-codesign'] @@ -546,7 +546,7 @@ void main() { testUsingContext('code size analysis fails when app not found', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectToolExitLater( createTestCommandRunner(command).run( @@ -564,14 +564,14 @@ void main() { testUsingContext('Performs code size analysis and sends analytics', () async { final BuildCommand command = BuildCommand(); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); fileSystem.file('build/ios/archive/Runner.xcarchive/Products/Applications/Runner.app/Frameworks/App.framework/App') ..createSync(recursive: true) ..writeAsBytesSync(List.generate(10000, (int index) => 0)); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(onRun: () { + setUpFakeXcodeBuildHandler(onRun: () { fileSystem.file('build/flutter_size_01/snapshot.arm64.json') ..createSync(recursive: true) ..writeAsStringSync(''' @@ -587,7 +587,7 @@ void main() { ..createSync(recursive: true) ..writeAsStringSync('{}'); }), - _exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist), + exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist), ]); await createTestCommandRunner(command).run( @@ -617,10 +617,10 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(), - _exportArchiveCommand(), + setUpFakeXcodeBuildHandler(), + exportArchiveCommand(), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await createTestCommandRunner(command).run( [ @@ -646,12 +646,12 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { + setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }), - _setUpXCResultCommand(), + setUpXCResultCommand(), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ipa', '--no-pub']), @@ -671,12 +671,12 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { + setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }), - _setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), + setUpXCResultCommand(stdout: kSampleResultJsonWithIssues), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ipa', '--no-pub']), @@ -697,12 +697,12 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { + setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }), - _setUpXCResultCommand(stdout: kSampleResultJsonWithIssuesToBeDiscarded), + setUpXCResultCommand(stdout: kSampleResultJsonWithIssuesToBeDiscarded), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ipa', '--no-pub']), @@ -725,9 +725,9 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1), + setUpFakeXcodeBuildHandler(exitCode: 1), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ipa', '--no-pub']), @@ -748,12 +748,12 @@ void main() { final BuildCommand command = BuildCommand(); fakeProcessManager.addCommands([ xattrCommand, - _setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { + setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () { fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync(); }), - _setUpXCResultCommand(stdout: kSampleResultJsonWithProvisionIssue), + setUpXCResultCommand(stdout: kSampleResultJsonWithProvisionIssue), ]); - _createMinimalMockProjectFiles(); + createMinimalMockProjectFiles(); await expectLater( createTestCommandRunner(command).run(const ['build', 'ipa', '--no-pub']), diff --git a/packages/flutter_tools/test/commands.shard/hermetic/ide_config_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/ide_config_test.dart index cdee1e2a5fa69..dcd7c484ddaa4 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/ide_config_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/ide_config_test.dart @@ -22,7 +22,7 @@ void main() { Directory intellijDir; Directory toolsDir; - Map _getFilesystemContents([ Directory root ]) { + Map getFilesystemContents([ Directory root ]) { final String tempPath = tempDir.absolute.path; final List paths = (root ?? tempDir).listSync(recursive: true).map((FileSystemEntity entity) { @@ -41,7 +41,7 @@ void main() { return contents; } - Map _getManifest(Directory base, String marker, { bool isTemplate = false }) { + Map getManifest(Directory base, String marker, { bool isTemplate = false }) { final String basePath = globals.fs.path.relative(base.path, from: tempDir.absolute.path); final String suffix = isTemplate ? Template.copyTemplateExtension : ''; return { @@ -57,7 +57,7 @@ void main() { }; } - void _populateDir(Map manifest) { + void populateDir(Map manifest) { for (final String key in manifest.keys) { if (manifest[key] == 'dir') { tempDir.childDirectory(key).createSync(recursive: true); @@ -72,12 +72,12 @@ void main() { } } - bool _fileOrDirectoryExists(String path) { + bool fileOrDirectoryExists(String path) { final String absPath = globals.fs.path.join(tempDir.absolute.path, path); return globals.fs.file(absPath).existsSync() || globals.fs.directory(absPath).existsSync(); } - Future _updateIdeConfig({ + Future updateIdeConfig({ Directory dir, List args = const [], Map expectedContents = const {}, @@ -94,7 +94,7 @@ void main() { for (final String path in expectedContents.keys) { final String absPath = globals.fs.path.join(tempDir.absolute.path, path); - expect(_fileOrDirectoryExists(globals.fs.path.join(dir.path, path)), true, + expect(fileOrDirectoryExists(globals.fs.path.join(dir.path, path)), true, reason: "$path doesn't exist"); if (globals.fs.file(absPath).existsSync()) { expect(globals.fs.file(absPath).readAsStringSync(), equals(expectedContents[path]), @@ -102,7 +102,7 @@ void main() { } } for (final String path in unexpectedPaths) { - expect(_fileOrDirectoryExists(globals.fs.path.join(dir.path, path)), false, reason: '$path exists'); + expect(fileOrDirectoryExists(globals.fs.path.join(dir.path, path)), false, reason: '$path exists'); } } @@ -123,56 +123,56 @@ void main() { }); testUsingContext("doesn't touch existing files without --overwrite", () async { - final Map templateManifest = _getManifest( + final Map templateManifest = getManifest( intellijDir, 'template', isTemplate: true, ); - final Map flutterManifest = _getManifest( + final Map flutterManifest = getManifest( tempDir, 'existing', ); - _populateDir(templateManifest); - _populateDir(flutterManifest); - final Map expectedContents = _getFilesystemContents(); - return _updateIdeConfig( + populateDir(templateManifest); + populateDir(flutterManifest); + final Map expectedContents = getFilesystemContents(); + return updateIdeConfig( expectedContents: expectedContents, ); }); testUsingContext('creates non-existent files', () async { - final Map templateManifest = _getManifest( + final Map templateManifest = getManifest( intellijDir, 'template', isTemplate: true, ); - final Map flutterManifest = _getManifest( + final Map flutterManifest = getManifest( tempDir, 'template', ); - _populateDir(templateManifest); + populateDir(templateManifest); final Map expectedContents = { ...templateManifest, ...flutterManifest, }; - return _updateIdeConfig( + return updateIdeConfig( expectedContents: expectedContents, ); }); testUsingContext('overwrites existing files with --overwrite', () async { - final Map templateManifest = _getManifest( + final Map templateManifest = getManifest( intellijDir, 'template', isTemplate: true, ); - final Map flutterManifest = _getManifest( + final Map flutterManifest = getManifest( tempDir, 'existing', ); - _populateDir(templateManifest); - _populateDir(flutterManifest); - final Map overwrittenManifest = _getManifest( + populateDir(templateManifest); + populateDir(flutterManifest); + final Map overwrittenManifest = getManifest( tempDir, 'template', ); @@ -180,14 +180,14 @@ void main() { ...templateManifest, ...overwrittenManifest, }; - return _updateIdeConfig( + return updateIdeConfig( args: ['--overwrite'], expectedContents: expectedContents, ); }); testUsingContext('only adds new templates without --overwrite', () async { - final Map templateManifest = _getManifest( + final Map templateManifest = getManifest( intellijDir, 'template', isTemplate: true, @@ -200,36 +200,36 @@ void main() { 'flutter.iml${Template.copyTemplateExtension}', ); templateManifest.remove(flutterIml); - _populateDir(templateManifest); + populateDir(templateManifest); templateManifest[flutterIml] = 'flutter existing'; - final Map flutterManifest = _getManifest( + final Map flutterManifest = getManifest( tempDir, 'existing', ); - _populateDir(flutterManifest); + populateDir(flutterManifest); final Map expectedContents = { ...flutterManifest, ...templateManifest, }; - return _updateIdeConfig( + return updateIdeConfig( args: ['--update-templates'], expectedContents: expectedContents, ); }); testUsingContext('update all templates with --overwrite', () async { - final Map templateManifest = _getManifest( + final Map templateManifest = getManifest( intellijDir, 'template', isTemplate: true, ); - _populateDir(templateManifest); - final Map flutterManifest = _getManifest( + populateDir(templateManifest); + final Map flutterManifest = getManifest( tempDir, 'existing', ); - _populateDir(flutterManifest); - final Map updatedTemplates = _getManifest( + populateDir(flutterManifest); + final Map updatedTemplates = getManifest( intellijDir, 'existing', isTemplate: true, @@ -238,26 +238,26 @@ void main() { ...flutterManifest, ...updatedTemplates, }; - return _updateIdeConfig( + return updateIdeConfig( args: ['--update-templates', '--overwrite'], expectedContents: expectedContents, ); }); testUsingContext('removes deleted imls with --overwrite', () async { - final Map templateManifest = _getManifest( + final Map templateManifest = getManifest( intellijDir, 'template', isTemplate: true, ); - _populateDir(templateManifest); - final Map flutterManifest = _getManifest( + populateDir(templateManifest); + final Map flutterManifest = getManifest( tempDir, 'existing', ); flutterManifest.remove('flutter.iml'); - _populateDir(flutterManifest); - final Map updatedTemplates = _getManifest( + populateDir(flutterManifest); + final Map updatedTemplates = getManifest( intellijDir, 'existing', isTemplate: true, @@ -274,26 +274,26 @@ void main() { ...flutterManifest, ...updatedTemplates, }; - return _updateIdeConfig( + return updateIdeConfig( args: ['--update-templates', '--overwrite'], expectedContents: expectedContents, ); }); testUsingContext('removes deleted imls with --overwrite, including empty parent dirs', () async { - final Map templateManifest = _getManifest( + final Map templateManifest = getManifest( intellijDir, 'template', isTemplate: true, ); - _populateDir(templateManifest); - final Map flutterManifest = _getManifest( + populateDir(templateManifest); + final Map flutterManifest = getManifest( tempDir, 'existing', ); flutterManifest.remove(globals.fs.path.join('packages', 'new', 'deep.iml')); - _populateDir(flutterManifest); - final Map updatedTemplates = _getManifest( + populateDir(flutterManifest); + final Map updatedTemplates = getManifest( intellijDir, 'existing', isTemplate: true, @@ -315,7 +315,7 @@ void main() { ...flutterManifest, ...updatedTemplates, }; - return _updateIdeConfig( + return updateIdeConfig( args: ['--update-templates', '--overwrite'], expectedContents: expectedContents, ); diff --git a/packages/flutter_tools/test/general.shard/base/user_messages_test.dart b/packages/flutter_tools/test/general.shard/base/user_messages_test.dart index b67302013c07c..862fb2a08e0cc 100644 --- a/packages/flutter_tools/test/general.shard/base/user_messages_test.dart +++ b/packages/flutter_tools/test/general.shard/base/user_messages_test.dart @@ -14,7 +14,7 @@ void main() { final FakePlatform linuxPlatform = FakePlatform(); final FakePlatform windowsPlatform = FakePlatform(operatingSystem: 'windows'); - void _checkInstallationURL(_InstallationMessage message) { + void checkInstallationURL(_InstallationMessage message) { expect(message(macPlatform), contains('https://flutter.dev/docs/get-started/install/macos#android-setup')); expect(message(linuxPlatform), contains('https://flutter.dev/docs/get-started/install/linux#android-setup')); expect(message(windowsPlatform), contains('https://flutter.dev/docs/get-started/install/windows#android-setup')); @@ -23,11 +23,11 @@ void main() { testWithoutContext('Android installation instructions', () { final UserMessages userMessages = UserMessages(); - _checkInstallationURL((Platform platform) => userMessages.androidMissingSdkInstructions(platform)); - _checkInstallationURL((Platform platform) => userMessages.androidSdkInstallHelp(platform)); - _checkInstallationURL((Platform platform) => userMessages.androidMissingSdkManager('/', platform)); - _checkInstallationURL((Platform platform) => userMessages.androidCannotRunSdkManager('/', '', platform)); - _checkInstallationURL((Platform platform) => userMessages.androidSdkBuildToolsOutdated(0, '', platform)); - _checkInstallationURL((Platform platform) => userMessages.androidStudioInstallation(platform)); + checkInstallationURL((Platform platform) => userMessages.androidMissingSdkInstructions(platform)); + checkInstallationURL((Platform platform) => userMessages.androidSdkInstallHelp(platform)); + checkInstallationURL((Platform platform) => userMessages.androidMissingSdkManager('/', platform)); + checkInstallationURL((Platform platform) => userMessages.androidCannotRunSdkManager('/', '', platform)); + checkInstallationURL((Platform platform) => userMessages.androidSdkBuildToolsOutdated(0, '', platform)); + checkInstallationURL((Platform platform) => userMessages.androidStudioInstallation(platform)); }); } diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/icon_tree_shaker_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/icon_tree_shaker_test.dart index f8050347cbf8d..4eab81ff4407f 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/icon_tree_shaker_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/icon_tree_shaker_test.dart @@ -35,7 +35,7 @@ void main() { late String fontSubsetPath; late List fontSubsetArgs; - List _getConstFinderArgs(String appDillPath) => [ + List getConstFinderArgs(String appDillPath) => [ dartPath, '--disable-dart-dev', constFinderPath, @@ -44,21 +44,21 @@ void main() { '--class-name', 'IconData', ]; - void _addConstFinderInvocation( + void addConstFinderInvocation( String appDillPath, { int exitCode = 0, String stdout = '', String stderr = '', }) { processManager.addCommand(FakeCommand( - command: _getConstFinderArgs(appDillPath), + command: getConstFinderArgs(appDillPath), exitCode: exitCode, stdout: stdout, stderr: stderr, )); } - void _resetFontSubsetInvocation({ + void resetFontSubsetInvocation({ int exitCode = 0, String stdout = '', String stderr = '', @@ -99,7 +99,7 @@ void main() { ..writeAsBytesSync(_kTtfHeaderBytes); }); - Environment _createEnvironment(Map defines) { + Environment createEnvironment(Map defines) { return Environment.test( fileSystem.directory('/icon_test')..createSync(recursive: true), defines: defines, @@ -111,7 +111,7 @@ void main() { } testWithoutContext('Prints error in debug mode environment', () async { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'debug', }); @@ -142,7 +142,7 @@ void main() { }); testWithoutContext('Does not get enabled without font manifest', () { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -165,7 +165,7 @@ void main() { }); testWithoutContext('Gets enabled', () { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -188,7 +188,7 @@ void main() { }); test('No app.dill throws exception', () async { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -214,7 +214,7 @@ void main() { }); testWithoutContext('Can subset a font', () async { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -231,8 +231,8 @@ void main() { ); final CompleterIOSink stdinSink = CompleterIOSink(); - _addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); - _resetFontSubsetInvocation(stdinSink: stdinSink); + addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); + resetFontSubsetInvocation(stdinSink: stdinSink); bool subsetted = await iconTreeShaker.subsetFont( input: fileSystem.file(inputPath), @@ -240,7 +240,7 @@ void main() { relativePath: relativePath, ); expect(stdinSink.getAndClear(), '59470\n'); - _resetFontSubsetInvocation(stdinSink: stdinSink); + resetFontSubsetInvocation(stdinSink: stdinSink); expect(subsetted, true); subsetted = await iconTreeShaker.subsetFont( @@ -254,7 +254,7 @@ void main() { }); testWithoutContext('Does not subset a non-supported font', () async { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -271,8 +271,8 @@ void main() { ); final CompleterIOSink stdinSink = CompleterIOSink(); - _addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); - _resetFontSubsetInvocation(stdinSink: stdinSink); + addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); + resetFontSubsetInvocation(stdinSink: stdinSink); final File notAFont = fileSystem.file('input/foo/bar.txt') ..createSync(recursive: true) @@ -286,7 +286,7 @@ void main() { }); testWithoutContext('Does not subset an invalid ttf font', () async { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -303,8 +303,8 @@ void main() { ); final CompleterIOSink stdinSink = CompleterIOSink(); - _addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); - _resetFontSubsetInvocation(stdinSink: stdinSink); + addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); + resetFontSubsetInvocation(stdinSink: stdinSink); final File notAFont = fileSystem.file(inputPath) ..writeAsBytesSync([0, 1, 2]); @@ -318,7 +318,7 @@ void main() { }); testWithoutContext('Non-constant instances', () async { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -334,7 +334,7 @@ void main() { artifacts: artifacts, ); - _addConstFinderInvocation(appDill.path, stdout: constFinderResultWithInvalid); + addConstFinderInvocation(appDill.path, stdout: constFinderResultWithInvalid); await expectLater( () => iconTreeShaker.subsetFont( @@ -352,7 +352,7 @@ void main() { }); testWithoutContext('Non-zero font-subset exit code', () async { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -370,8 +370,8 @@ void main() { ); final CompleterIOSink stdinSink = CompleterIOSink(); - _addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); - _resetFontSubsetInvocation(exitCode: -1, stdinSink: stdinSink); + addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); + resetFontSubsetInvocation(exitCode: -1, stdinSink: stdinSink); await expectLater( () => iconTreeShaker.subsetFont( @@ -385,7 +385,7 @@ void main() { }); testWithoutContext('font-subset throws on write to sdtin', () async { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -402,8 +402,8 @@ void main() { ); final CompleterIOSink stdinSink = CompleterIOSink(throwOnAdd: true); - _addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); - _resetFontSubsetInvocation(exitCode: -1, stdinSink: stdinSink); + addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); + resetFontSubsetInvocation(exitCode: -1, stdinSink: stdinSink); await expectLater( () => iconTreeShaker.subsetFont( @@ -417,7 +417,7 @@ void main() { }); testWithoutContext('Invalid font manifest', () async { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -435,7 +435,7 @@ void main() { artifacts: artifacts, ); - _addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); + addConstFinderInvocation(appDill.path, stdout: validConstFinderResult); await expectLater( () => iconTreeShaker.subsetFont( @@ -449,7 +449,7 @@ void main() { }); testWithoutContext('ConstFinder non-zero exit', () async { - final Environment environment = _createEnvironment({ + final Environment environment = createEnvironment({ kIconTreeShakerFlag: 'true', kBuildMode: 'release', }); @@ -467,7 +467,7 @@ void main() { artifacts: artifacts, ); - _addConstFinderInvocation(appDill.path, exitCode: -1); + addConstFinderInvocation(appDill.path, exitCode: -1); await expectLater( () async => iconTreeShaker.subsetFont( diff --git a/packages/flutter_tools/test/general.shard/ios/xcresult_test.dart b/packages/flutter_tools/test/general.shard/ios/xcresult_test.dart index 0d8d637645b38..72b78681c838f 100644 --- a/packages/flutter_tools/test/general.shard/ios/xcresult_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/xcresult_test.dart @@ -15,7 +15,7 @@ import 'xcresult_test_data.dart'; void main() { // Creates a FakeCommand for the xcresult get call to build the app // in the given configuration. - FakeCommand _setUpFakeXCResultGetCommand({ + FakeCommand setUpFakeXCResultGetCommand({ required String stdout, required String tempResultPath, required Xcode xcode, @@ -54,7 +54,7 @@ void main() { exitCode: 1, ); - XCResultGenerator _setupGenerator({ + XCResultGenerator setupGenerator({ required String resultJson, int exitCode = 0, String stderr = '', @@ -73,7 +73,7 @@ void main() { ); fakeProcessManager.addCommands( [ - _setUpFakeXCResultGetCommand( + setUpFakeXCResultGetCommand( stdout: resultJson, tempResultPath: _tempResultPath, xcode: xcode, @@ -95,7 +95,7 @@ void main() { testWithoutContext( 'correctly parse sample result json when there are issues.', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: kSampleResultJsonWithIssues); + final XCResultGenerator generator = setupGenerator(resultJson: kSampleResultJsonWithIssues); final XCResult result = await generator.generate(); expect(result.issues.length, 2); expect(result.issues.first.type, XCResultIssueType.error); @@ -112,7 +112,7 @@ void main() { testWithoutContext( 'correctly parse sample result json when there are issues but invalid url.', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: kSampleResultJsonWithIssuesAndInvalidUrl); + final XCResultGenerator generator = setupGenerator(resultJson: kSampleResultJsonWithIssuesAndInvalidUrl); final XCResult result = await generator.generate(); expect(result.issues.length, 2); expect(result.issues.first.type, XCResultIssueType.error); @@ -130,7 +130,7 @@ void main() { testWithoutContext( 'correctly parse sample result json and discard all warnings', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: kSampleResultJsonWithIssues); + final XCResultGenerator generator = setupGenerator(resultJson: kSampleResultJsonWithIssues); final XCResultIssueDiscarder discarder = XCResultIssueDiscarder(typeMatcher: XCResultIssueType.warning); final XCResult result = await generator.generate(issueDiscarders: [discarder]); expect(result.issues.length, 1); @@ -144,7 +144,7 @@ void main() { testWithoutContext( 'correctly parse sample result json and discard base on subType', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: kSampleResultJsonWithIssues); + final XCResultGenerator generator = setupGenerator(resultJson: kSampleResultJsonWithIssues); final XCResultIssueDiscarder discarder = XCResultIssueDiscarder(subTypeMatcher: RegExp(r'^Warning$')); final XCResult result = await generator.generate(issueDiscarders: [discarder]); expect(result.issues.length, 1); @@ -158,7 +158,7 @@ void main() { testWithoutContext( 'correctly parse sample result json and discard base on message', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: kSampleResultJsonWithIssues); + final XCResultGenerator generator = setupGenerator(resultJson: kSampleResultJsonWithIssues); final XCResultIssueDiscarder discarder = XCResultIssueDiscarder(messageMatcher: RegExp(r"^The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.0.99.$")); final XCResult result = await generator.generate(issueDiscarders: [discarder]); expect(result.issues.length, 1); @@ -172,7 +172,7 @@ void main() { testWithoutContext( 'correctly parse sample result json and discard base on location', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: kSampleResultJsonWithIssues); + final XCResultGenerator generator = setupGenerator(resultJson: kSampleResultJsonWithIssues); final XCResultIssueDiscarder discarder = XCResultIssueDiscarder(locationMatcher: RegExp(r'/Users/m/Projects/test_create/ios/Runner/AppDelegate.m')); final XCResult result = await generator.generate(issueDiscarders: [discarder]); expect(result.issues.length, 1); @@ -186,7 +186,7 @@ void main() { testWithoutContext( 'correctly parse sample result json with multiple discarders.', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: kSampleResultJsonWithIssues); + final XCResultGenerator generator = setupGenerator(resultJson: kSampleResultJsonWithIssues); final XCResultIssueDiscarder discardWarnings = XCResultIssueDiscarder(typeMatcher: XCResultIssueType.warning); final XCResultIssueDiscarder discardSemanticIssues = XCResultIssueDiscarder(subTypeMatcher: RegExp(r'^Semantic Issue$')); final XCResult result = await generator.generate(issueDiscarders: [discardWarnings, discardSemanticIssues]); @@ -197,7 +197,7 @@ void main() { testWithoutContext('correctly parse sample result json when no issues.', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: kSampleResultJsonNoIssues); + final XCResultGenerator generator = setupGenerator(resultJson: kSampleResultJsonNoIssues); final XCResult result = await generator.generate(); expect(result.issues.length, 0); expect(result.parseSuccess, isTrue); @@ -208,7 +208,7 @@ void main() { 'error: `xcresulttool get` process fail should return an `XCResult` with stderr as `parsingErrorMessage`.', () async { const String fakeStderr = 'Fake: fail to parse result json.'; - final XCResultGenerator generator = _setupGenerator( + final XCResultGenerator generator = setupGenerator( resultJson: '', exitCode: 1, stderr: fakeStderr, @@ -221,7 +221,7 @@ void main() { }); testWithoutContext('error: `xcresulttool get` no stdout', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: ''); + final XCResultGenerator generator = setupGenerator(resultJson: ''); final XCResult result = await generator.generate(); expect(result.issues.length, 0); @@ -231,7 +231,7 @@ void main() { }); testWithoutContext('error: wrong top level json format.', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: '[]'); + final XCResultGenerator generator = setupGenerator(resultJson: '[]'); final XCResult result = await generator.generate(); expect(result.issues.length, 0); @@ -241,7 +241,7 @@ void main() { }); testWithoutContext('error: fail to parse issue map', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: '{}'); + final XCResultGenerator generator = setupGenerator(resultJson: '{}'); final XCResult result = await generator.generate(); expect(result.issues.length, 0); @@ -251,7 +251,7 @@ void main() { }); testWithoutContext('error: invalid issue map', () async { - final XCResultGenerator generator = _setupGenerator(resultJson: kSampleResultJsonInvalidIssuesMap); + final XCResultGenerator generator = setupGenerator(resultJson: kSampleResultJsonInvalidIssuesMap); final XCResult result = await generator.generate(); expect(result.issues.length, 0); diff --git a/packages/flutter_tools/test/general.shard/plugins_test.dart b/packages/flutter_tools/test/general.shard/plugins_test.dart index 521795cbc2d22..f17dfe576513a 100644 --- a/packages/flutter_tools/test/general.shard/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/plugins_test.dart @@ -1557,7 +1557,7 @@ flutter: tryToDelete(tempDir); }); - void _createPubspecFile(String yamlString) { + void createPubspecFile(String yamlString) { projectDir.childFile('pubspec.yaml')..createSync(recursive: true)..writeAsStringSync(yamlString); } @@ -1581,7 +1581,7 @@ flutter: pluginClass: SomePlugin package: AndroidPackage '''; - _createPubspecFile(pluginYaml); + createPubspecFile(pluginYaml); validatePubspecForPlugin(projectDir: projectDir.absolute.path, pluginClass: 'SomePlugin', expectedPlatforms: [ 'ios', 'macos', 'windows', 'linux', 'android', 'web', ], androidIdentifier: 'AndroidPackage', webFileName: 'lib/SomeFile.dart'); diff --git a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart index 0bf8dcdebbf92..ef597766515b5 100644 --- a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart @@ -134,7 +134,7 @@ void main() { fileSystem.file('.packages').writeAsStringSync('\n'); }); - void _setupMocks() { + void setupMocks() { fileSystem.file('pubspec.yaml').createSync(); fileSystem.file('lib/main.dart').createSync(recursive: true); fileSystem.file('web/index.html').createSync(recursive: true); @@ -180,7 +180,7 @@ void main() { testUsingContext('runner with web server device supports debugging with --start-paused', () { fakeVmServiceHost = FakeVmServiceHost(requests: []); - _setupMocks(); + setupMocks(); flutterDevice.device = WebServerDevice( logger: BufferLogger.test(), ); @@ -239,7 +239,7 @@ void main() { final BufferLogger logger = BufferLogger.test(); final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice, logger: logger); fakeVmServiceHost = FakeVmServiceHost(requests: kAttachExpectations.toList()); - _setupMocks(); + setupMocks(); final Completer connectionInfoCompleter = Completer(); unawaited(residentWebRunner.run( @@ -261,7 +261,7 @@ void main() { ); final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice, debuggingOptions: debuggingOptions); fakeVmServiceHost = FakeVmServiceHost(requests: kAttachExpectations.toList()); - _setupMocks(); + setupMocks(); residentWebRunner.artifactDirectory.childFile('app.dill').writeAsStringSync('ABC'); final Completer connectionInfoCompleter = Completer(); @@ -279,7 +279,7 @@ void main() { testUsingContext('WebRunner copies compiled app.dill to cache during startup with track-widget-creation', () async { final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice); fakeVmServiceHost = FakeVmServiceHost(requests: kAttachExpectations.toList()); - _setupMocks(); + setupMocks(); residentWebRunner.artifactDirectory.childFile('app.dill').writeAsStringSync('ABC'); final Completer connectionInfoCompleter = Completer(); @@ -297,7 +297,7 @@ void main() { // Regression test for https://github.com/flutter/flutter/issues/60613 testUsingContext('ResidentWebRunner calls appFailedToStart if initial compilation fails', () async { fakeVmServiceHost = FakeVmServiceHost(requests: kAttachExpectations.toList()); - _setupMocks(); + setupMocks(); final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice); fileSystem.file(globals.fs.path.join('lib', 'main.dart')) .createSync(recursive: true); @@ -314,7 +314,7 @@ void main() { testUsingContext('Can successfully run without an index.html including status warning', () async { final BufferLogger logger = BufferLogger.test(); fakeVmServiceHost = FakeVmServiceHost(requests: kAttachExpectations.toList()); - _setupMocks(); + setupMocks(); fileSystem.file(fileSystem.path.join('web', 'index.html')) .deleteSync(); final ResidentWebRunner residentWebRunner = ResidentWebRunner( @@ -340,7 +340,7 @@ void main() { testUsingContext('Can successfully run and disconnect with --no-resident', () async { fakeVmServiceHost = FakeVmServiceHost(requests: kAttachExpectations.toList()); - _setupMocks(); + setupMocks(); final ResidentRunner residentWebRunner = ResidentWebRunner( flutterDevice, flutterProject: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), @@ -383,7 +383,7 @@ void main() { ), ...kAttachIsolateExpectations, ]); - _setupMocks(); + setupMocks(); final Completer connectionInfoCompleter = Completer(); unawaited(residentWebRunner.run( connectionInfoCompleter: connectionInfoCompleter, @@ -443,7 +443,7 @@ void main() { ), ]); - _setupMocks(); + setupMocks(); final Completer connectionInfoCompleter = Completer(); unawaited(residentWebRunner.run( connectionInfoCompleter: connectionInfoCompleter, @@ -471,7 +471,7 @@ void main() { systemClock: globals.systemClock, ); fakeVmServiceHost = FakeVmServiceHost(requests: kAttachExpectations.toList()); - _setupMocks(); + setupMocks(); final Completer connectionInfoCompleter = Completer(); unawaited(residentWebRunner.run( @@ -507,7 +507,7 @@ void main() { }, ), ]); - _setupMocks(); + setupMocks(); final TestChromiumLauncher chromiumLauncher = TestChromiumLauncher(); final Chromium chrome = Chromium(1, chromeConnection, chromiumLauncher: chromiumLauncher); chromiumLauncher.setInstance(chrome); @@ -564,7 +564,7 @@ void main() { } ), ]); - _setupMocks(); + setupMocks(); final TestChromiumLauncher chromiumLauncher = TestChromiumLauncher(); final Chromium chrome = Chromium(1, chromeConnection, chromiumLauncher: chromiumLauncher); chromiumLauncher.setInstance(chrome); @@ -616,7 +616,7 @@ void main() { systemClock: SystemClock.fixed(DateTime(2001)), ); fakeVmServiceHost = FakeVmServiceHost(requests :kAttachExpectations); - _setupMocks(); + setupMocks(); flutterDevice.device = webServerDevice; webDevFS.report = UpdateFSReport(success: true); @@ -652,7 +652,7 @@ void main() { testUsingContext('Exits when initial compile fails', () async { final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice); fakeVmServiceHost = FakeVmServiceHost(requests: []); - _setupMocks(); + setupMocks(); webDevFS.report = UpdateFSReport(); final Completer connectionInfoCompleter = Completer(); @@ -686,7 +686,7 @@ void main() { ), ...kAttachIsolateExpectations, ]); - _setupMocks(); + setupMocks(); final Completer connectionInfoCompleter = Completer(); unawaited(residentWebRunner.run( connectionInfoCompleter: connectionInfoCompleter, @@ -704,7 +704,7 @@ void main() { testUsingContext('Fails on compilation errors in hot restart', () async { final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice); fakeVmServiceHost = FakeVmServiceHost(requests: kAttachExpectations.toList()); - _setupMocks(); + setupMocks(); final Completer connectionInfoCompleter = Completer(); unawaited(residentWebRunner.run( connectionInfoCompleter: connectionInfoCompleter, @@ -735,7 +735,7 @@ void main() { }, ), ]); - _setupMocks(); + setupMocks(); final Completer connectionInfoCompleter = Completer(); unawaited(residentWebRunner.run( connectionInfoCompleter: connectionInfoCompleter, @@ -760,7 +760,7 @@ void main() { errorCode: RPCErrorCodes.kInternalError, ), ]); - _setupMocks(); + setupMocks(); final Completer connectionInfoCompleter = Completer(); unawaited(residentWebRunner.run( connectionInfoCompleter: connectionInfoCompleter, @@ -793,7 +793,7 @@ void main() { fakeVmServiceHost = FakeVmServiceHost(requests: [ ...kAttachExpectations, ]); - _setupMocks(); + setupMocks(); final Completer connectionInfoCompleter = Completer(); unawaited(residentWebRunner.run( connectionInfoCompleter: connectionInfoCompleter, @@ -815,7 +815,7 @@ void main() { fakeVmServiceHost = FakeVmServiceHost(requests: [ ...kAttachExpectations, ]); - _setupMocks(); + setupMocks(); final Completer connectionInfoCompleter = Completer(); final Future result = residentWebRunner.run( connectionInfoCompleter: connectionInfoCompleter, @@ -836,7 +836,7 @@ void main() { fakeVmServiceHost = FakeVmServiceHost(requests: [ ...kAttachExpectations, ]); - _setupMocks(); + setupMocks(); mockDevice.name = 'Chromez'; final Completer connectionInfoCompleter = Completer(); unawaited(residentWebRunner.run( @@ -860,7 +860,7 @@ void main() { ...kAttachLogExpectations, ...kAttachIsolateExpectations, ]); - _setupMocks(); + setupMocks(); final FakeChromeConnection chromeConnection = FakeChromeConnection(); final TestChromiumLauncher chromiumLauncher = TestChromiumLauncher(); final Chromium chrome = Chromium(1, chromeConnection, chromiumLauncher: chromiumLauncher); @@ -915,7 +915,7 @@ void main() { testUsingContext('Sends unlaunched app.webLaunchUrl event for Web Server device', () async { final BufferLogger logger = BufferLogger.test(); fakeVmServiceHost = FakeVmServiceHost(requests: []); - _setupMocks(); + setupMocks(); flutterDevice.device = WebServerDevice( logger: logger, ); @@ -1000,7 +1000,7 @@ void main() { final BufferLogger logger = BufferLogger.test(); final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice, logger: logger); fakeVmServiceHost = FakeVmServiceHost(requests: []); - _setupMocks(); + setupMocks(); webDevFS.exception = const WebSocketException(); await expectLater(residentWebRunner.run, throwsToolExit()); @@ -1014,7 +1014,7 @@ void main() { testUsingContext('Successfully turns AppConnectionException into ToolExit', () async { final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice); fakeVmServiceHost = FakeVmServiceHost(requests: []); - _setupMocks(); + setupMocks(); webDevFS.exception = AppConnectionException(''); await expectLater(residentWebRunner.run, throwsToolExit()); @@ -1027,7 +1027,7 @@ void main() { testUsingContext('Successfully turns ChromeDebugError into ToolExit', () async { final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice); fakeVmServiceHost = FakeVmServiceHost(requests: []); - _setupMocks(); + setupMocks(); webDevFS.exception = ChromeDebugException({}); @@ -1041,7 +1041,7 @@ void main() { testUsingContext('Rethrows unknown Exception type from dwds', () async { final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice); fakeVmServiceHost = FakeVmServiceHost(requests: []); - _setupMocks(); + setupMocks(); webDevFS.exception = Exception(); await expectLater(residentWebRunner.run, throwsException); @@ -1055,7 +1055,7 @@ void main() { final BufferLogger logger = BufferLogger.test(); final ResidentRunner residentWebRunner = setUpResidentRunner(flutterDevice, logger: logger); fakeVmServiceHost = FakeVmServiceHost(requests: []); - _setupMocks(); + setupMocks(); webDevFS.exception = StateError(''); await expectLater(residentWebRunner.run, throwsStateError); diff --git a/packages/flutter_tools/test/general.shard/version_test.dart b/packages/flutter_tools/test/general.shard/version_test.dart index 61395bd443678..41c60867a22a9 100644 --- a/packages/flutter_tools/test/general.shard/version_test.dart +++ b/packages/flutter_tools/test/general.shard/version_test.dart @@ -274,7 +274,7 @@ void main() { }); group('$VersionCheckStamp for $channel', () { - void _expectDefault(VersionCheckStamp stamp) { + void expectDefault(VersionCheckStamp stamp) { expect(stamp.lastKnownRemoteVersion, isNull); expect(stamp.lastTimeVersionWasChecked, isNull); expect(stamp.lastTimeWarningWasPrinted, isNull); @@ -283,19 +283,19 @@ void main() { testWithoutContext('loads blank when stamp file missing', () async { cache.versionStamp = null; - _expectDefault(await VersionCheckStamp.load(cache, BufferLogger.test())); + expectDefault(await VersionCheckStamp.load(cache, BufferLogger.test())); }); testWithoutContext('loads blank when stamp file is malformed JSON', () async { cache.versionStamp = '<'; - _expectDefault(await VersionCheckStamp.load(cache, BufferLogger.test())); + expectDefault(await VersionCheckStamp.load(cache, BufferLogger.test())); }); testWithoutContext('loads blank when stamp file is well-formed but invalid JSON', () async { cache.versionStamp = '[]'; - _expectDefault(await VersionCheckStamp.load(cache, BufferLogger.test())); + expectDefault(await VersionCheckStamp.load(cache, BufferLogger.test())); }); testWithoutContext('loads valid JSON', () async { diff --git a/packages/flutter_tools/test/general.shard/windows/visual_studio_validator_test.dart b/packages/flutter_tools/test/general.shard/windows/visual_studio_validator_test.dart index f96bf584218bc..4e3272f7e0b99 100644 --- a/packages/flutter_tools/test/general.shard/windows/visual_studio_validator_test.dart +++ b/packages/flutter_tools/test/general.shard/windows/visual_studio_validator_test.dart @@ -21,7 +21,7 @@ void main() { }); // Assigns default values for a complete VS installation with necessary components. - void _configureMockVisualStudioAsInstalled() { + void configureMockVisualStudioAsInstalled() { fakeVisualStudio.isPrerelease = false; fakeVisualStudio.isRebootRequired = false; fakeVisualStudio.fullVersion = '16.2'; @@ -30,7 +30,7 @@ void main() { } // Assigns default values for a complete VS installation that is too old. - void _configureMockVisualStudioAsTooOld() { + void configureMockVisualStudioAsTooOld() { fakeVisualStudio.isAtLeastMinimumVersion = false; fakeVisualStudio.isPrerelease = false; fakeVisualStudio.isRebootRequired = false; @@ -40,7 +40,7 @@ void main() { } // Assigns default values for a missing VS installation. - void _configureMockVisualStudioAsNotInstalled() { + void configureMockVisualStudioAsNotInstalled() { fakeVisualStudio.isInstalled = false; fakeVisualStudio.isAtLeastMinimumVersion = false; fakeVisualStudio.isPrerelease = false; @@ -56,7 +56,7 @@ void main() { userMessages: userMessages, visualStudio: fakeVisualStudio, ); - _configureMockVisualStudioAsInstalled(); + configureMockVisualStudioAsInstalled(); fakeVisualStudio.isPrerelease = true; final ValidationResult result = await validator.validate(); @@ -70,7 +70,7 @@ void main() { userMessages: userMessages, visualStudio: fakeVisualStudio, ); - _configureMockVisualStudioAsInstalled(); + configureMockVisualStudioAsInstalled(); fakeVisualStudio.isComplete = false; final ValidationResult result = await validator.validate(); @@ -85,7 +85,7 @@ void main() { userMessages: userMessages, visualStudio: fakeVisualStudio, ); - _configureMockVisualStudioAsInstalled(); + configureMockVisualStudioAsInstalled(); fakeVisualStudio.isRebootRequired = true; final ValidationResult result = await validator.validate(); @@ -100,7 +100,7 @@ void main() { userMessages: userMessages, visualStudio: fakeVisualStudio, ); - _configureMockVisualStudioAsInstalled(); + configureMockVisualStudioAsInstalled(); fakeVisualStudio.isLaunchable = false; final ValidationResult result = await validator.validate(); @@ -115,7 +115,7 @@ void main() { userMessages: userMessages, visualStudio: fakeVisualStudio, ); - _configureMockVisualStudioAsTooOld(); + configureMockVisualStudioAsTooOld(); final ValidationResult result = await validator.validate(); final ValidationMessage expectedMessage = ValidationMessage.error( @@ -134,7 +134,7 @@ void main() { userMessages: userMessages, visualStudio: fakeVisualStudio, ); - _configureMockVisualStudioAsInstalled(); + configureMockVisualStudioAsInstalled(); fakeVisualStudio.hasNecessaryComponents = false; final ValidationResult result = await validator.validate(); @@ -146,7 +146,7 @@ void main() { userMessages: userMessages, visualStudio: fakeVisualStudio, ); - _configureMockVisualStudioAsInstalled(); + configureMockVisualStudioAsInstalled(); fakeVisualStudio.windows10SDKVersion = null; final ValidationResult result = await validator.validate(); @@ -158,7 +158,7 @@ void main() { userMessages: userMessages, visualStudio: fakeVisualStudio, ); - _configureMockVisualStudioAsInstalled(); + configureMockVisualStudioAsInstalled(); final ValidationResult result = await validator.validate(); final ValidationMessage expectedDisplayNameMessage = ValidationMessage( @@ -173,7 +173,7 @@ void main() { userMessages: userMessages, visualStudio: fakeVisualStudio, ); - _configureMockVisualStudioAsNotInstalled(); + configureMockVisualStudioAsNotInstalled(); final ValidationResult result = await validator.validate(); final ValidationMessage expectedMessage = ValidationMessage.error( diff --git a/packages/flutter_tools/test/integration.shard/analyze_once_test.dart b/packages/flutter_tools/test/integration.shard/analyze_once_test.dart index 21c2c67743bb7..7fa3a6638b30f 100644 --- a/packages/flutter_tools/test/integration.shard/analyze_once_test.dart +++ b/packages/flutter_tools/test/integration.shard/analyze_once_test.dart @@ -36,7 +36,7 @@ void main() { expect(result.stderr, contains(exitMessageContains)); } - void _createDotPackages(String projectPath, [bool nullSafe = false]) { + void createDotPackages(String projectPath, [bool nullSafe = false]) { final StringBuffer flutterRootUri = StringBuffer('file://'); final String canonicalizedFlutterRootPath = fileSystem.path.canonicalize(getFlutterRoot()); if (platform.isWindows) { @@ -84,7 +84,7 @@ void main() { fileSystem.file(fileSystem.path.join(projectPath, 'pubspec.yaml')) ..createSync(recursive: true) ..writeAsStringSync(pubspecYamlSrc); - _createDotPackages(projectPath); + createDotPackages(projectPath); libMain = fileSystem.file(fileSystem.path.join(projectPath, 'lib', 'main.dart')) ..createSync(recursive: true) ..writeAsStringSync(mainDartSrc); diff --git a/packages/flutter_tools/test/integration.shard/flutter_build_android_app_project_builddir_test.dart b/packages/flutter_tools/test/integration.shard/flutter_build_android_app_project_builddir_test.dart index 4053072eea3cc..375f34b45cdea 100644 --- a/packages/flutter_tools/test/integration.shard/flutter_build_android_app_project_builddir_test.dart +++ b/packages/flutter_tools/test/integration.shard/flutter_build_android_app_project_builddir_test.dart @@ -44,7 +44,7 @@ void main() { tryToDelete(tempDir); }); - void _checkBuildDir() { + void checkBuildDir() { // The android/app/build directory should not exists final Directory appBuildDir = fileSystem.directory(fileSystem.path.join( exampleAppDir.path, @@ -65,7 +65,7 @@ void main() { 'apk', '--target-platform=android-arm', ], workingDirectory: exampleAppDir.path); - _checkBuildDir(); + checkBuildDir(); }, ); @@ -79,7 +79,7 @@ void main() { 'appbundle', '--target-platform=android-arm', ], workingDirectory: exampleAppDir.path); - _checkBuildDir(); + checkBuildDir(); }, ); } diff --git a/packages/flutter_tools/test/integration.shard/forbidden_imports_test.dart b/packages/flutter_tools/test/integration.shard/forbidden_imports_test.dart index 31e3d91c1dbb2..13f9f5d85ed4f 100644 --- a/packages/flutter_tools/test/integration.shard/forbidden_imports_test.dart +++ b/packages/flutter_tools/test/integration.shard/forbidden_imports_test.dart @@ -17,12 +17,12 @@ void main() { fileSystem.path.join(flutterTools, 'lib', 'src', 'commands'), fileSystem.path.join(flutterTools, 'lib', 'src', 'test'), ]; - bool _isNotSkipped(FileSystemEntity entity) => skippedPaths.every((String path) => !entity.path.startsWith(path)); + bool isNotSkipped(FileSystemEntity entity) => skippedPaths.every((String path) => !entity.path.startsWith(path)); final Iterable files = fileSystem.directory(fileSystem.path.join(flutterTools, 'lib', 'src')) .listSync(recursive: true) .where(_isDartFile) - .where(_isNotSkipped) + .where(isNotSkipped) .map(_asFile); for (final File file in files) { for (final String line in file.readAsLinesSync()) { @@ -41,13 +41,13 @@ void main() { test('no imports of globals without a global prefix', () { final List skippedPaths = []; - bool _isNotSkipped(FileSystemEntity entity) => skippedPaths.every((String path) => !entity.path.startsWith(path)); + bool isNotSkipped(FileSystemEntity entity) => skippedPaths.every((String path) => !entity.path.startsWith(path)); final Iterable files = fileSystem.directory(fileSystem.path.join(flutterTools, 'lib', 'src')) .listSync(recursive: true) .followedBy(fileSystem.directory(fileSystem.path.join(flutterTools, 'test',)).listSync(recursive: true)) .where(_isDartFile) - .where(_isNotSkipped) + .where(isNotSkipped) .map(_asFile); for (final File file in files) { for (final String line in file.readAsLinesSync()) { @@ -70,13 +70,13 @@ void main() { fileSystem.path.join(flutterTools, 'lib', 'src', 'base', 'error_handling_io.dart'), fileSystem.path.join(flutterTools, 'lib', 'src', 'base', 'multi_root_file_system.dart'), ]; - bool _isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path); + bool isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path); for (final String dirName in ['lib', 'bin']) { final Iterable files = fileSystem.directory(fileSystem.path.join(flutterTools, dirName)) .listSync(recursive: true) .where(_isDartFile) - .where(_isNotAllowed) + .where(isNotAllowed) .map(_asFile); for (final File file in files) { for (final String line in file.readAsLinesSync()) { @@ -95,13 +95,13 @@ void main() { // Used only for multi-part file uploads, which are non-trivial to reimplement. fileSystem.path.join(flutterTools, 'lib', 'src', 'reporting', 'crash_reporting.dart'), ]; - bool _isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path); + bool isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path); for (final String dirName in ['lib', 'bin']) { final Iterable files = fileSystem.directory(fileSystem.path.join(flutterTools, dirName)) .listSync(recursive: true) .where(_isDartFile) - .where(_isNotAllowed) + .where(isNotAllowed) .map(_asFile); for (final File file in files) { for (final String line in file.readAsLinesSync()) { @@ -121,13 +121,13 @@ void main() { fileSystem.path.join(flutterTools, 'lib', 'src', 'test', 'flutter_web_platform.dart'), fileSystem.path.join(flutterTools, 'lib', 'src', 'test', 'test_wrapper.dart'), ]; - bool _isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path); + bool isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path); for (final String dirName in ['lib']) { final Iterable files = fileSystem.directory(fileSystem.path.join(flutterTools, dirName)) .listSync(recursive: true) .where(_isDartFile) - .where(_isNotAllowed) + .where(isNotAllowed) .map(_asFile); for (final File file in files) { for (final String line in file.readAsLinesSync()) { @@ -191,13 +191,13 @@ void main() { fileSystem.path.join(flutterTools, 'lib', 'src', 'convert.dart'), fileSystem.path.join(flutterTools, 'lib', 'src', 'base', 'error_handling_io.dart'), ]; - bool _isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path); + bool isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => path != entity.path); for (final String dirName in ['lib']) { final Iterable files = fileSystem.directory(fileSystem.path.join(flutterTools, dirName)) .listSync(recursive: true) .where(_isDartFile) - .where(_isNotAllowed) + .where(isNotAllowed) .map(_asFile); for (final File file in files) { for (final String line in file.readAsLinesSync()) { @@ -219,13 +219,13 @@ void main() { fileSystem.path.join(flutterTools, 'lib', 'devfs_web.dart'), fileSystem.path.join(flutterTools, 'lib', 'resident_web_runner.dart'), ]; - bool _isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => !entity.path.contains(path)); + bool isNotAllowed(FileSystemEntity entity) => allowedPaths.every((String path) => !entity.path.contains(path)); for (final String dirName in ['lib']) { final Iterable files = fileSystem.directory(fileSystem.path.join(flutterTools, dirName)) .listSync(recursive: true) .where(_isDartFile) - .where(_isNotAllowed) + .where(isNotAllowed) .map(_asFile); for (final File file in files) { for (final String line in file.readAsLinesSync()) { From 84202460c5f03b0411cc311281edeef7dd9879d0 Mon Sep 17 00:00:00 2001 From: Taha Tesser Date: Thu, 28 Apr 2022 02:54:06 +0300 Subject: [PATCH 131/141] Fix `BottomNavigationBar` label style text colors (#102638) --- .../src/material/bottom_navigation_bar.dart | 38 +++++++++++-------- .../material/bottom_navigation_bar_test.dart | 8 +++- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/packages/flutter/lib/src/material/bottom_navigation_bar.dart b/packages/flutter/lib/src/material/bottom_navigation_bar.dart index 9f37a9952cf77..dfb21a05009c0 100644 --- a/packages/flutter/lib/src/material/bottom_navigation_bar.dart +++ b/packages/flutter/lib/src/material/bottom_navigation_bar.dart @@ -138,7 +138,7 @@ class BottomNavigationBar extends StatefulWidget { /// /// If [selectedLabelStyle].color and [unselectedLabelStyle].color values /// are non-null, they will be used instead of [selectedItemColor] and - /// [unselectedItemColor]. + /// [unselectedItemColor] to style the label color. /// /// If custom [IconThemeData]s are used, you must provide both /// [selectedIconTheme] and [unselectedIconTheme], and both @@ -384,7 +384,7 @@ class _BottomNavigationTile extends StatelessWidget { this.animation, this.iconSize, { this.onTap, - this.colorTween, + this.itemColorTween, this.flex, this.selected = false, required this.selectedLabelStyle, @@ -410,7 +410,7 @@ class _BottomNavigationTile extends StatelessWidget { final Animation animation; final double iconSize; final VoidCallback? onTap; - final ColorTween? colorTween; + final ColorTween? itemColorTween; final double? flex; final bool selected; final IconThemeData? selectedIconTheme; @@ -513,7 +513,7 @@ class _BottomNavigationTile extends StatelessWidget { child: _Tile( layout: layout, icon: _TileIcon( - colorTween: colorTween!, + itemColorTween: itemColorTween!, animation: animation, iconSize: iconSize, selected: selected, @@ -522,7 +522,7 @@ class _BottomNavigationTile extends StatelessWidget { unselectedIconTheme: unselectedIconTheme, ), label: _Label( - colorTween: colorTween!, + itemColorTween: itemColorTween!, animation: animation, item: item, selectedLabelStyle: selectedLabelStyle, @@ -602,7 +602,7 @@ class _Tile extends StatelessWidget { class _TileIcon extends StatelessWidget { const _TileIcon({ - required this.colorTween, + required this.itemColorTween, required this.animation, required this.iconSize, required this.selected, @@ -612,7 +612,7 @@ class _TileIcon extends StatelessWidget { }) : assert(selected != null), assert(item != null); - final ColorTween colorTween; + final ColorTween itemColorTween; final Animation animation; final double iconSize; final bool selected; @@ -622,7 +622,7 @@ class _TileIcon extends StatelessWidget { @override Widget build(BuildContext context) { - final Color? iconColor = colorTween.evaluate(animation); + final Color? iconColor = itemColorTween.evaluate(animation); final IconThemeData defaultIconTheme = IconThemeData( color: iconColor, size: iconSize, @@ -646,14 +646,14 @@ class _TileIcon extends StatelessWidget { class _Label extends StatelessWidget { const _Label({ - required this.colorTween, + required this.itemColorTween, required this.animation, required this.item, required this.selectedLabelStyle, required this.unselectedLabelStyle, required this.showSelectedLabels, required this.showUnselectedLabels, - }) : assert(colorTween != null), + }) : assert(itemColorTween != null), assert(animation != null), assert(item != null), assert(selectedLabelStyle != null), @@ -661,7 +661,7 @@ class _Label extends StatelessWidget { assert(showSelectedLabels != null), assert(showUnselectedLabels != null); - final ColorTween colorTween; + final ColorTween itemColorTween; final Animation animation; final BottomNavigationBarItem item; final TextStyle selectedLabelStyle; @@ -679,10 +679,16 @@ class _Label extends StatelessWidget { selectedLabelStyle, animation.value, )!; + final ColorTween labelColor = ColorTween( + begin: unselectedLabelStyle.color + ?? itemColorTween.begin, + end: selectedLabelStyle.color + ?? itemColorTween.end, + ); Widget text = DefaultTextStyle.merge( style: customStyle.copyWith( fontSize: selectedFontSize, - color: colorTween.evaluate(animation), + color: labelColor.evaluate(animation), ), // The font size should grow here when active, but because of the way // font rendering works, it doesn't grow smoothly if we just animate @@ -923,10 +929,10 @@ class _BottomNavigationBarState extends State with TickerPr break; } - final ColorTween colorTween; + final ColorTween itemColorTween; switch (_effectiveType) { case BottomNavigationBarType.fixed: - colorTween = ColorTween( + itemColorTween = ColorTween( begin: widget.unselectedItemColor ?? bottomTheme.unselectedItemColor ?? themeData.unselectedWidgetColor, @@ -937,7 +943,7 @@ class _BottomNavigationBarState extends State with TickerPr ); break; case BottomNavigationBarType.shifting: - colorTween = ColorTween( + itemColorTween = ColorTween( begin: widget.unselectedItemColor ?? bottomTheme.unselectedItemColor ?? themeData.colorScheme.surface, @@ -971,7 +977,7 @@ class _BottomNavigationBarState extends State with TickerPr onTap: () { widget.onTap?.call(i); }, - colorTween: colorTween, + itemColorTween: itemColorTween, flex: _evaluateFlex(_animations[i]), selected: i == widget.currentIndex, showSelectedLabels: widget.showSelectedLabels ?? bottomTheme.showSelectedLabels ?? true, diff --git a/packages/flutter/test/material/bottom_navigation_bar_test.dart b/packages/flutter/test/material/bottom_navigation_bar_test.dart index 831a281a080b3..b65f71d031fa9 100644 --- a/packages/flutter/test/material/bottom_navigation_bar_test.dart +++ b/packages/flutter/test/material/bottom_navigation_bar_test.dart @@ -140,8 +140,10 @@ void main() { }); testWidgets('Custom selected and unselected font styles', (WidgetTester tester) async { - const TextStyle selectedTextStyle = TextStyle(fontWeight: FontWeight.w200, fontSize: 18.0); - const TextStyle unselectedTextStyle = TextStyle(fontWeight: FontWeight.w600, fontSize: 12.0); + const Color selectedTextColor = Color(0xff00ff00); + const Color unselectedTextColor = Color(0xff0000ff); + const TextStyle selectedTextStyle = TextStyle(color: selectedTextColor, fontWeight: FontWeight.w200, fontSize: 18.0); + const TextStyle unselectedTextStyle = TextStyle(color: unselectedTextColor, fontWeight: FontWeight.w600, fontSize: 12.0); await tester.pumpWidget( MaterialApp( @@ -167,8 +169,10 @@ void main() { final TextStyle selectedFontStyle = tester.renderObject(find.text('AC')).text.style!; final TextStyle unselectedFontStyle = tester.renderObject(find.text('Alarm')).text.style!; + expect(selectedFontStyle.color, equals(selectedTextColor)); expect(selectedFontStyle.fontSize, equals(selectedTextStyle.fontSize)); expect(selectedFontStyle.fontWeight, equals(selectedTextStyle.fontWeight)); + expect(unselectedFontStyle.color, equals(unselectedTextColor)); expect( tester.firstWidget(find.ancestor(of: find.text('Alarm'), matching: find.byType(Transform))).transform, equals(Matrix4.diagonal3(Vector3.all(unselectedTextStyle.fontSize! / selectedTextStyle.fontSize!))), From b7d661c83373493cc2cd27df437ad0dacb709329 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 19:59:05 -0400 Subject: [PATCH 132/141] Roll Engine from 0ac2fc2a1d1c to 561f96247933 (3 revisions) (#102700) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 14a9dad054776..4d19b9ec6dbab 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -0ac2fc2a1d1c427759d4f3112d42cc08cd053ea8 +561f9624793313a6046d46a39710365d2bd0da74 From a622b6a53641fcbe42ed352e0603c418f1e914cc Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Wed, 27 Apr 2022 17:59:07 -0700 Subject: [PATCH 133/141] Remove Linux android views (#102699) --- .ci.yaml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.ci.yaml b/.ci.yaml index a86450a2e841a..148cc93b20efb 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -2273,19 +2273,6 @@ targets: task_name: web_size__compile_test scheduler: luci - - name: Linux android views - bringup: true # Flaky https://github.com/flutter/flutter/issues/99001 - recipe: flutter/android_views - properties: - dependencies: >- - [ - {"dependency": "android_sdk", "version": "version:31v8"}, - {"dependency": "android_virtual_device", "version": "31"} - ] - tags: > - ["framework","hostonly"] - timeout: 60 - - name: Linux_android opacity_peephole_one_rect_perf__e2e_summary recipe: devicelab/devicelab_drone presubmit: false From fc78b77b5a40b79c5629d4f77ca05fd0c44afd8b Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 21:04:06 -0400 Subject: [PATCH 134/141] Roll Engine from 561f96247933 to b75aaa34f16d (2 revisions) (#102701) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 4d19b9ec6dbab..be39b3c75fe2b 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -561f9624793313a6046d46a39710365d2bd0da74 +b75aaa34f16d9525c914c1fde21174a0a8df19a9 From faab7f81ea277e118c7d5e9d542310b5351a3453 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 22:06:28 -0400 Subject: [PATCH 135/141] Roll Engine from b75aaa34f16d to 80c04d70c0d6 (435 revisions) (#102704) * 28af36b9d Merge entity renderer impl into the entity renderer. * 08f00cd5e Move entity shaders to their own directory. * e95252f06 Shorten names of the render target attachment descriptors. * b5ed864d7 Fixup names of pipeline descriptors. * 531162ff5 Minor fixups to pipeline creation. * a09363684 Make pipelines store pipeline descriptors. * 612b54fd7 Start consolidating content rendering. * 27473322e Separate save layer calls into a canvas pass. * 97455db0f Start wiring up the entity playground. * 778fc113b Allow shader libraries to look at multiple shader dylibs. * 5405b9a6f Implement texture mapping. * 866045d5f WIP on stroke rendering. * d35f10ab1 Insert additional padding at the end of the struct if the size of the struct does not satisfy the alignment requirements of all its members. * 41ed619fc Fix struct padding calculations. * ac10b798e Rendering of continuous strokes. * ede764556 Cleanup entity API. * 9ce9a81d5 WIP Add test for clip rendering. * 05705810a Add support for typed commands. * 9c88b09aa Give the default render target a stencil buffer. * 60c3b2191 Implement stencil-only clips. * 65ffd0482 Rework canvas passes in prep for subpasses. * 38d4abac5 Renderer components no longer need a surface reference to function. * 17d301b96 WIP on creating utils for creating offscreen render targets. * 935931173 Fix bug in texture usage mask. * 3f417887c Setup aiks for canvas subpasses. * ab16b0bc8 Setup canvas pass hierarchies. * 3a8fb57fc Canvas subpasses rendering into their own command buffers. * 398b74fac Work towards making canvas subpasses configure postprocessing effects. * bb633cade Fix alpha writes while rendering to texture. * f9a6a2cb1 Fixup ortho calculations and add ostream printers for geometry utils. * 18f8e729b Setup a framework to collapse passes. * d00efdd5f Move entity pass management to the entity framework. * ead8058c9 Setup a paint pass delgate. * ed8b78a96 Allow entity passes to be elided based on their contents. * 026dcd191 Turn on full-screen 4xMSAA by default and additional render target validations. * 603b91575 Add render pass and pipeline sample count validation. * 30f28f161 All creation of pipeline variants from a pipeline. * 2b7848053 Allow for the on-demand creation and caching of pipeline variants from the prototype. * 723ca3b97 Add more validation logs instead of FML logs. * 6d871081a Implement Canvas::Skew. * 18399a5ff Implement Canvas::SaveLayer with bounds. * 4234b343d Minor: Add Canvas::Transform. * 8e90d388d Rect union and intersection. * 4417fa637 Don't let subpass coverage exceed entity coverage. * a63c04785 Remove unused and confusing API in TRect. * 20d22fd3e Add macOS availability checks. * 05e9f893a Add missing availability check for macOS 10.12. * cb547949c Fix broken test. * e3d435755 Support non-uniform rounding radii. * 10487e3c1 Stub out a display list dispatcher. * f83a0211a Support path fill types. * 66096b5ba Add support for path composition in path builder. * d3626cd1f Implement conversion SkPath to Impeller paths. * 98c18b3e1 Import the archivist framework. * 147e64fbd Update translation units for style guide. * 8d7d8e653 Cleanup archive structure. * 89589cc3d Separate archive_location into its own TU. * 547fc005e Clearer names for primary keys. * 4a6e2d07f Add uncommitted patches from a previous change. * 0c595a929 More use of optionals in archivist. * 52891357c Make primary keys optional. * 7b3ab4178 Minor: Rename primary key variable name. * 188890c35 Support user readable table names. * 94b9bfd7c Add error message for incorrect member lookup. * 95386ed3f Remove superfluous auto_key from ArchiveDef. * bf24ff925 Cleanup macros in archive statement. * 85b8a0093 Remove remaining C-Style casts. * 4ca5af44c Fix temporary database file deletion. * 84eee265a Fix iOS compilation issues. * a104fa53d Update GN rules for Flutter updates. * a404064ac Minor: Rename the Impeller dispatcher to be something sane and prep for sidecar wireup. * 57a0728c1 Rework the confusingly named renderer subsystem instances. * db3c4a11d Make the Metal drawable wrapping routine from the playground a utility. * 7566d670c Minor: Change the names of the intermediates for the wrapped render target. * 0016e4808 Allow resizing the playground. * 64e3b29ee Holy size savings Batman! * 3ac38d8b1 Forward targets specification to the code generator in impellerc. * 0b63e2cc2 Shader data can now be compiled into the binary. * 86c91dc62 Fix pipeline library issue related to not tracking pending futures. * 687f18991 Don't waste space on an unnecessary depth buffer. * 8748c7687 Setup default pixel formats. * f282f414b Remove support for the weird 5 byte pixel format. * 7e5364a4d Minor: Account for macro namespacing. * c66b7fb34 IOS macros have not been namespaced yet. * f70087318 Gate the minimum iOS deployment versions in the generated shaders. * 819b0336f Cross reference issues and add additional tracing. * 169abed1c Add a README. * c251e079a Fixup minor Markdown formatting issues in the README. * 6d520d234 Add an image overview of the shader compilation pipeline. * a449707c0 Link to the shader pipeline from the README. * 844d40063 Enable playgrounds in all tests and fix default sample counts. * 9c536958c Update tests to account for sample count defaults. * 14bf82761 Back out changes to the Impeller dispatcher stub that depend on WIP interface changes. (flutter/engine#3) * 2a6bb6eb3 create scorecards-analysis.yml (flutter/engine#4) * fec03558c Use -M0 instead of -frecord-sources (flutter/engine#5) * e982526e8 Compensate for change to saveLayer (flutter/engine#6) * 14ec50ada Adds a GN flag for playgrounds (flutter/engine#7) * 3d422b2f7 Wrap all MD files at 80 cols, minor cleanup of headers/indenting (flutter/engine#8) * ca3433db3 Fix Rect::Compare bugs (flutter/engine#10) * e768f4d0a adopt new DlColorFilter objects (flutter/engine#12) * 88f4c24ac Support 16bit index buffers (flutter/engine#11) * dde655fdd Add viewport and scissor support (flutter/engine#9) * 4220ef372 Add cull mode to command (flutter/engine#13) * 9b2cbc13c Support nested clips & clip state restoration (flutter/engine#14) * a2f755518 Fix bug introduced in a476b92 which broke a bunch of tests (flutter/engine#15) * e7f90736b changes for new DlMaskFilter objects (flutter/engine#17) * ba1ecb66c Add baseVertex (flutter/engine#16) * 542b8c4c3 Fix index size check to respect 16 bit buffers (flutter/engine#19) * 26090e475 Add mixed type specializations on algebraic ops in TPoint (flutter/engine#21) * cb9997ab9 Respect TextureContents/Canvas::DrawImageRect source rect (flutter/engine#22) * 9ecbb76c5 Add an ImGui backend targetting Impeller to the playground (flutter/engine#20) * 604a93f96 Fix prod build (flutter/engine#23) * 6cd7a4553 Bad cubic tests (flutter/engine#24) * e94acaae6 Match skia's path param ordering (flutter/engine#25) * b26c6ac38 Do not include the leading point for cubic polylines (flutter/engine#29) * bafa73b54 Add assignment operators to point (flutter/engine#26) * 2373da89f Add entity playground callback (flutter/engine#27) * 2dceced0e adopt new DlAttributeType enum naming (flutter/engine#30) * f41c0a93e Support subcontours in strokes, lay groundwork for fills (flutter/engine#31) * 4be3053ec Add immediate mode manipulator widget macros for the playground (flutter/engine#28) * f0a7b4e90 Fix MoveTo for fills (flutter/engine#32) * df2485c90 Add dot and cross product to Point (flutter/engine#33) * 3cff1a93b Remove duplicate points between connected components when generating polylines (flutter/engine#34) * 451f93e83 Handle all corner cases for stroke geometry, add bevel join & cap/join enums (flutter/engine#35) * 0dae5ada0 Add `//impeller/typographer`. (flutter/engine#36) * e1a9ae853 Remove schedule runs of scorecards. (flutter/engine#38) * 8d79ce674 Bump ossf/scorecard-action from 1.0.3 to 1.0.4 (flutter/engine#40) * 137fa4816 Fix license to make the license script happy (flutter/engine#37) * 91ec4c207 Bump github/codeql-action from 1.0.26 to 1.1.3 (flutter/engine#39) * 62135be77 Remove break corner cases, simplify strokes, and generate closed path joins (flutter/engine#41) * 9f9c557ec Account for glyph extents in the atlas. (flutter/engine#42) * 4e323c6fd Relay text color from Paint. (flutter/engine#43) * c11f4083d Account for updated macro name in //flutter/fml/build_config.h (flutter/engine#44) * a781e2f9a Setup join/cap proc (flutter/engine#45) * 555fabaa0 Avoid depending on STB in //flutter/impeller/image. (flutter/engine#47) * d84a831d8 Add square cap (flutter/engine#48) * 75e83ff3e Point: Add reflect and make scalar ops more flexible (flutter/engine#51) * d9e792783 Add miter join (flutter/engine#49) * 905895695 Add round caps and joins (flutter/engine#52) * c81fbbdac Move Contents classes into separate translation units (flutter/engine#53) * 9d6048ab0 Expose C API for tessellator, move to own subdir (flutter/engine#18) * 2a1b56096 Fix ScalarNearlyEqual test (flutter/engine#56) * 845c3bc07 Add color premultiply/unpremultiply (flutter/engine#57) * 6f9fa60b0 Add pipeline blend modes & demo (flutter/engine#55) * 0936dfaee Bump github/codeql-action from 1.1.3 to 1.1.4 (flutter/engine#58) * 6da61e7fd Remove FML dependency on geometry, tessellator (flutter/engine#59) * b14fb96b3 Make Path::Polyline::GetContourPointBounds safe for OOB (flutter/engine#60) * 24d7083c9 Add LICENSE file. (flutter/engine#61) * 841bb991b Move impeller::Comparable to //impeller/base. (flutter/engine#62) * 74dff11d5 Add a script that checks that all source files have a valid license block. (flutter/engine#63) * ec27727a2 Correct polyline bounds test (flutter/engine#64) * 0084668ec Bump actions/upload-artifact from 2.3.1 to 3 (flutter/engine#54) * b816f8f4f Bump actions/checkout from 2.4.0 to 3 (flutter/engine#50) * e5fc54887 [tessellator]Expose and document smoothing approximation via the C/Dart API. Minor refactor of tessellator to supply fill type to method rather than to object. (flutter/engine#65) * 24e249a4f Fix top-level build group to not include the compiler and fixup headers. (flutter/engine#66) * 9c3cbf855 Hack to prevent back-to-back playground tests from hanging (flutter/engine#68) * 1828c4c89 Correct default blend mode, fix solid stroke shader to respect premultiplied source colors (flutter/engine#69) * b3cbf05b8 Chainable texture filters (flutter/engine#67) * f3a6b3e1b Document GN rules and make targets that cannot be built on the platform be no-ops. (flutter/engine#70) * 597c10eb1 Fix diagnostic on iOS simulators. (flutter/engine#71) * e46345db6 Only depend on FML for tracing when building executables. (flutter/engine#72) * d0c59286c Fix loop-range-construct warnings added in newer versions of Clang. (flutter/engine#75) * b97e965b7 Add remaining additive blends (flutter/engine#76) * ec1dd96b0 Fix issues with constexpr correctness. (flutter/engine#77) * 47cb97c35 Add case necessary on 32-bit arm builds. (flutter/engine#79) * f5db75a15 Use new DlColorSource objects (flutter/engine#73) * 75a9853fe update the linear gradient code to the new accessor names (flutter/engine#80) * e381974b1 Impelement DisplayListDispatcher::transformReset. (flutter/engine#82) * 8784ff4be Don't use `Add[Thing]` operations when emulating Skia path components (flutter/engine#86) * 9e33c6fc1 Transform clips by the entity's transform (flutter/engine#87) * d916e2c7c Add blend filter support for advanced blends (flutter/engine#81) * 396ef7d0a Bump github/codeql-action from 1.1.4 to 1.1.5 (flutter/engine#83) * 503dff6b0 Add directional + 2D gaussian blur (flutter/engine#84) * 6e778862f Add ClearContents to apply specified contents to the entire render target. (flutter/engine#88) * 688321533 Add blend mode setting to Entity, Aiks paint, and the dispatcher (flutter/engine#89) * 1d6dc1e68 Forward blend mode from the dispatchers drawColor call. (flutter/engine#90) * 5b1b9dfbf Apply Aiks transforms in the canvas space, not world space (flutter/engine#91) * b32a65fe9 Use new DlBlendMode object (flutter/engine#78) * 47ff8dbed switch dispatcher methods to new DlImageFilter objects (flutter/engine#92) * 3235eac2a Separate filters into different TUs (flutter/engine#93) * f2d23512b Implement impeller::DisplayListDispatcher::drawTextBlob. (flutter/engine#94) * a6b0939fc Add support for instanced rendering and shader storage buffers. (flutter/engine#95) * 47e9b0853 Use 8bpp glyph atlases. (flutter/engine#96) * 86c5ea4f3 Draw all glyphs in a text run using a single draw call. (flutter/engine#97) * 32b5a8dd7 Batch all draw calls in the entire text frame. (flutter/engine#100) * 39f4ebd75 Make the filter DAG render all textures at the correct resolution (flutter/engine#99) * 0aaa84e5c Render glyphs at the correct resolution with respect to the current transform (flutter/engine#101) * eb7b7d187 Add difference clipping (flutter/engine#104) * 6f02b8943 Wire up stroke cap/join/miter limit display list ops (flutter/engine#105) * cbd14baf1 Premultiply gradient colors (flutter/engine#106) * 9886da891 Use display list images. (flutter/engine#102) * 82a340332 Make filter inputs lazy and sharable (flutter/engine#103) * 69334fd7b Implement drawArc (flutter/engine#109) * 6de2c9c56 support new DlVertices object in dispatcher (flutter/engine#108) * 31812de08 Bump github/codeql-action from 1.1.5 to 2.1.6 (flutter/engine#110) * 78eb5d67f Add blur styles to gaussian blur (flutter/engine#107) * c4f1a592d Fix solid stroke contour switching + round cap smoothing, and add transparent path overdraw example (flutter/engine#112) * f2bf47d25 Fix SaveLayer/entity subpass behavioral problems (flutter/engine#111) * 2dd379708 Wire up enhanced command buffer error reporting. (flutter/engine#113) * 6e8368c47 Remove extra point from DrawRect; skip over duplicate contour points when generating polylines (flutter/engine#114) * 93c59198b Explicitly wait for subpass buffers to be scheduled. (flutter/engine#115) * f2e297c1f Bump github/codeql-action from 2.1.6 to 2.1.7 (flutter/engine#116) * e09b0ed12 Add static thread safety analysis ready synchronization primitives. (flutter/engine#117) * 8075d383f Standardize around "coverage" terminology; make coverage optional everywhere (flutter/engine#118) * 685ae23ad Add explicit scaling methods for Point/Vector2 (flutter/engine#119) * af922f9d4 Ignore the stencil in the imgui pipeline (flutter/engine#120) * 4248b5d2a Use the stencil buffer to avoid overdraw when rendering non-opaque solid strokes. (flutter/engine#121) * 93035a4cd Remove base.h from base/BUILD (flutter/engine#122) * 20148b270 Standardize around blur sigma<->radius conversion factor (flutter/engine#123) * 533b86d3d No newline in depfile output, which seems to confuse ninja (flutter/engine#125) * 0ed6d4c4a Fix Path::GetBoundingBox crash for cubics with no local min/max (flutter/engine#126) * 1a055b08a Add solid stroke coverage override (flutter/engine#127) * 3bc1f3340 Allow building targets that do not create metal shaders on all platforms. (flutter/engine#133) * 43a750813 Move rendering TUs behind own flag (flutter/engine#134) * 3c9f0e147 Build fixes for roll (flutter/engine#135) * f6508c108 Remove extra premultiply from solid stroke/fill (flutter/engine#124) * 999978fa9 Fix enum typedef for older mac SDKs (flutter/engine#136) * 9c4018f10 Filters: Replace Snapshot position with a full transform (flutter/engine#130) * ca3cd7f77 Move static methods to anonymous namespace (flutter/engine#137) * f1c1b68c5 Adds --sksl target to impellerc (flutter/engine#131) * fa68eb6eb Bump github/codeql-action from 2.1.7 to 2.1.8 (flutter/engine#128) * a08cb8b4f Border mask blur (flutter/engine#132) * a4599bf6f Add impellerc options to compile OpenGL Desktop and ES variant shaders. (flutter/engine#139) * 8b881c634 Compute text coverage; use blend mode in savelayer; conservative pass collapse/elision behavior (flutter/engine#129) * 3b1dfc4a4 Add an OpenGL ES stub and parameterize all playgrounds on rendering backend. (flutter/engine#141) * 4d5031540 Fix subpass ordering (flutter/engine#143) * 80bb5f953 Windows (flutter/engine#144) * 79f2e86a4 Compile and package all shaders for the OpenGL ES backend. (flutter/engine#146) * f86c9b72a Implement mask blur in display list dispatcher (flutter/engine#142) * 01e81ef7e Fix Mac compilation issue. (flutter/engine#147) * 2b48a800e Fix up build/test issues when building on or off of mac (flutter/engine#148) * 68d88aeb4 Filters: Add local transforms (flutter/engine#140) * df261f9d9 Fix minor mask blur issues (flutter/engine#149) * c5474f6f0 Untie paths from entities (flutter/engine#145) * 69b676c49 Bump actions/checkout from 3.0.0 to 3.0.2 (flutter/engine#151) * 8679fe78e Remove dependency on Dart, add crash handler to impellerc (flutter/engine#150) * 56056357f Use New DlPathEffect Object (flutter/engine#98) * cd1a5a355 implement drawDisplayList in impeller dispatcher (flutter/engine#153) * 5ec32d7ed Revert "Use New DlPathEffect Object (#98)" (flutter/engine#154) * da9cfb3ca Separate FilterInput variants into their own TUs (flutter/engine#152) * 3ebfe9e05 Another coverage fix for border mask blur (flutter/engine#158) * 86fdc7912 Make it an error for a stage input to take more than one slot. (flutter/engine#161) * 120c0b631 Avoid instancing/SSBOs for text to support GLES (flutter/engine#160) * 4c75fe6e3 Set path for linear gradient contents; don't fail renders for failed tessellations (flutter/engine#162) * dd4d7050e Check if sub_command_buffer is null before setting label (flutter/engine#163) * d5f978195 format * e676fd7a8 Missing files * 89a30a729 temporarily increase clang_tidy test limits * 7f0e95b1e Delete DartIsolateTest::ValidLoadingUnitSucceeds (flutter/engine#32970) * 80c04d70c Delete AppLifecycleTests testDismissedFlutterViewControllerNotRespondingToApplicationLifecycle (flutter/engine#32971) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index be39b3c75fe2b..0761a96198f8d 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -b75aaa34f16d9525c914c1fde21174a0a8df19a9 +80c04d70c0d60401d0f1a5ebc88b2df61c2df507 From d873157287ec4bdff8195581dd8167e557acc0f5 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 27 Apr 2022 23:14:06 -0400 Subject: [PATCH 136/141] Roll Engine from 80c04d70c0d6 to 220613fc0b20 (3 revisions) (#102708) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 0761a96198f8d..296d70b693052 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -80c04d70c0d60401d0f1a5ebc88b2df61c2df507 +220613fc0b208290dbaecd0900803dac39f336a6 From e42b9dd51655e747115351ba69e3bd8fc6e2d36a Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 28 Apr 2022 01:39:05 -0400 Subject: [PATCH 137/141] Roll Engine from 220613fc0b20 to ba644fafb2c5 (1 revision) (#102715) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 296d70b693052..b374db7c81209 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -220613fc0b208290dbaecd0900803dac39f336a6 +ba644fafb2c5b85dcbd99062a2c11bab124aa5c6 From 8fc22a7df2f056b28f3001259c31f2c6f6a1ba1c Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 28 Apr 2022 02:44:04 -0400 Subject: [PATCH 138/141] Roll Engine from ba644fafb2c5 to 67940eb62023 (2 revisions) (#102717) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index b374db7c81209..31b6c52d18049 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -ba644fafb2c5b85dcbd99062a2c11bab124aa5c6 +67940eb620236e27efb6404548a6ad6693a0e3e4 From 4bf06a37ca2021337625b375abe43970199211ea Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 28 Apr 2022 03:49:07 -0400 Subject: [PATCH 139/141] Roll Engine from 67940eb62023 to b62ea5dce007 (1 revision) (#102721) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 31b6c52d18049..971d2a7c1f92f 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -67940eb620236e27efb6404548a6ad6693a0e3e4 +b62ea5dce0072a11faab47edf14a12b714a2668b From f9f4915e5efb5e917b6d3a45751ff927028a29e3 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 28 Apr 2022 04:54:04 -0400 Subject: [PATCH 140/141] Roll Engine from b62ea5dce007 to 7ffb3c560939 (1 revision) (#102729) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-linux.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 971d2a7c1f92f..3c2a70f0c7df0 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -b62ea5dce0072a11faab47edf14a12b714a2668b +7ffb3c560939e00a7e484661e96096e521cbc0ae diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index 13bc8b3aa4c2d..20ed930e4855a 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -0CR1gRII3byUPpf7QFiV-tYghQK6vlilP0lb6TsueeMC +YgQGNO0aGfK9ikWQ42sY-qnZlnBJs6BhL2mFe4LPPakC From 9211d7cc8a0d6442b784c78ecfb5d93d286f06d4 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 28 Apr 2022 12:44:10 -0400 Subject: [PATCH 141/141] Roll Engine from 7ffb3c560939 to 966757c6cc8e (1 revision) (#102740) --- bin/internal/engine.version | 2 +- bin/internal/fuchsia-mac.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 3c2a70f0c7df0..b905b4bb35681 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -7ffb3c560939e00a7e484661e96096e521cbc0ae +966757c6cc8ef75bbc7d0921510cbd12dd3cae35 diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index cfddd8956c9c9..344a4852c2cea 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -0Z5WTruvIAaYr82tXaTDGrqFRooLmlBRsLCxH4JPC7oC +1_HbRaMPfZ9-khgoycQCkPs6oqsqyo3_RVV-nm5pq74C