diff --git a/.ci.yaml b/.ci.yaml index dcf183eff6baa..df7ec312c7466 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: @@ -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": "version:11"} + ] + os: Mac-12 + cpu: arm64 + device_os: N mac_ios: properties: caches: >- @@ -125,12 +144,35 @@ platform_properties: [ {"dependency": "xcode"}, {"dependency": "gems"}, - {"dependency": "ios_signing"} + {"dependency": "apple_signing"} ] os: Mac-12 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: >- @@ -182,32 +224,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 @@ -1425,7 +1441,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 @@ -1457,6 +1472,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 @@ -2302,7 +2328,6 @@ targets: ] tags: > ["framework","hostonly"] - scheduler: luci timeout: 60 - name: Linux_android opacity_peephole_one_rect_perf__e2e_summary @@ -2376,7 +2401,6 @@ targets: scheduler: luci - name: Linux_android gradient_dynamic_perf__e2e_summary - bringup: true recipe: devicelab/devicelab_drone presubmit: false timeout: 60 @@ -2384,7 +2408,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 @@ -2395,7 +2418,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 @@ -2406,7 +2428,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 @@ -2427,57 +2448,46 @@ targets: tags: > ["devicelab","android","linux"] task_name: android_lifecycles_test - scheduler: luci - - name: Mac build_aar_module_test + - name: Mac build_ios_framework_module_test recipe: devicelab/devicelab_drone timeout: 60 properties: - add_recipes_cq: "true" caches: >- [ - {"name":"gradle", "path":"gradle"}, - {"name": "openjdk_11", "path": "java"} + {"name":"gradle","path":"gradle"} ] dependencies: >- [ {"dependency": "android_sdk", "version": "version:31v8"}, - {"dependency": "open_jdk", "version": "11"} + {"dependency": "open_jdk", "version": "11"}, + {"dependency": "xcode"}, + {"dependency": "gems"} ] tags: > ["devicelab","hostonly"] - task_name: build_aar_module_test + task_name: build_ios_framework_module_test + scheduler: luci runIf: - dev/** - packages/flutter_tools/** - bin/** - .ci.yaml - scheduler: luci - - name: Mac build_ios_framework_module_test + - name: Mac_arm64_ios build_ios_framework_module_test recipe: devicelab/devicelab_drone + presubmit: false timeout: 60 properties: - caches: >- - [ - {"name":"gradle","path":"gradle"} - ] - dependencies: >- - [ - {"dependency": "android_sdk", "version": "version:31v8"}, - {"dependency": "open_jdk", "version": "11"}, - {"dependency": "xcode"}, - {"dependency": "gems"} - ] tags: > - ["devicelab","hostonly"] + ["devicelab","ios","mac","arm64"] task_name: build_ios_framework_module_test - scheduler: luci runIf: - dev/** - packages/flutter_tools/** - bin/** - .ci.yaml + scheduler: luci - name: Mac build_tests_1_4 recipe: flutter/flutter_drone @@ -2896,7 +2906,6 @@ targets: - name: Mac tool_host_cross_arch_tests recipe: flutter/flutter_drone - bringup: true timeout: 60 properties: add_recipes_cq: "true" @@ -2909,7 +2918,6 @@ targets: tags: > ["framework","hostonly","shard"] test_timeout_secs: "2700" - scheduler: luci runIf: - dev/** - packages/flutter_tools/** @@ -3104,7 +3112,6 @@ targets: tags: > ["devicelab","android","mac"] task_name: entrypoint_dart_registrant - scheduler: luci runIf: - dev/** - packages/flutter_tools/** @@ -3121,6 +3128,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 @@ -3141,6 +3159,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 @@ -3172,6 +3201,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 @@ -3277,6 +3319,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 @@ -3326,6 +3369,16 @@ targets: task_name: flutter_gallery_ios__compile scheduler: luci + - name: Mac_arm64_ios flutter_gallery_ios__compile + recipe: devicelab/devicelab_drone + presubmit: false + 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 @@ -3344,7 +3397,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 @@ -3356,6 +3408,16 @@ targets: task_name: hello_world_ios__compile scheduler: luci + - name: Mac_arm64_ios hello_world_ios__compile + recipe: devicelab/devicelab_drone + presubmit: false + 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 @@ -3363,6 +3425,19 @@ targets: tags: > ["devicelab","ios","mac"] task_name: hot_mode_dev_cycle_macos_target__benchmark + runIf: + - dev/** + - .ci.yaml + scheduler: luci + + - name: Mac_arm64_ios hot_mode_dev_cycle_macos_target__benchmark + recipe: devicelab/devicelab_drone + presubmit: false + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: hot_mode_dev_cycle_macos_target__benchmark runIf: - dev/** scheduler: luci @@ -3437,6 +3512,16 @@ 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 + 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 @@ -3447,6 +3532,16 @@ targets: task_name: ios_content_validation_test scheduler: luci + - name: Mac_arm64_ios ios_content_validation_test + recipe: devicelab/devicelab_drone + presubmit: false + 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 @@ -3476,7 +3571,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 @@ -3488,6 +3582,16 @@ targets: task_name: macos_chrome_dev_mode scheduler: luci + - name: Mac_arm64_ios macos_chrome_dev_mode + recipe: devicelab/devicelab_drone + presubmit: false + 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 @@ -3507,7 +3611,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 @@ -3518,7 +3621,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 @@ -3619,7 +3721,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 @@ -3639,6 +3740,15 @@ targets: tags: > ["devicelab","ios","mac"] task_name: native_ui_tests_ios + + - name: Mac_arm64_ios native_ui_tests_ios + recipe: devicelab/devicelab_drone + presubmit: false + timeout: 60 + properties: + tags: > + ["devicelab","ios","mac","arm64"] + task_name: native_ui_tests_ios scheduler: luci - name: Mac native_ui_tests_macos @@ -3679,32 +3789,20 @@ targets: - .ci.yaml scheduler: luci - - name: Windows build_aar_module_test - bringup: true # Flaky https://github.com/flutter/flutter/issues/102226 + - name: Mac_arm64_ios run_release_test_macos recipe: devicelab/devicelab_drone + presubmit: false 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 + ["devicelab","ios","mac","arm64"] + task_name: run_release_test_macos runIf: - dev/** - packages/flutter_tools/** - bin/** - .ci.yaml + scheduler: luci - name: Windows build_tests_1_3 recipe: flutter/flutter_drone 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 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/bin/internal/engine.version b/bin/internal/engine.version index f8a6975cadca4..9830e4895d677 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -586c90c1336f9bba303a4ce6147c212ffffdd5d8 +9e6911e4da21a42b352f67f6271cb28f6592b88f diff --git a/bin/internal/flutter_plugins.version b/bin/internal/flutter_plugins.version index 03bde7b570745..26ab7f807b46c 100644 --- a/bin/internal/flutter_plugins.version +++ b/bin/internal/flutter_plugins.version @@ -1 +1 @@ -6e18c7195678f5f2ff12e79a5fe738280a66fe26 +3e43f590d4d0143972e702eb14f14658cdc2decb diff --git a/bin/internal/fuchsia-linux.version b/bin/internal/fuchsia-linux.version index 75b80067c63bd..83894ac690d5e 100644 --- a/bin/internal/fuchsia-linux.version +++ b/bin/internal/fuchsia-linux.version @@ -1 +1 @@ -9g8p_giFbkP4781dwqfOd3BTojVaMQTirYYfd07wLLEC +iisykXnbM-9g3DFfH6SEX7v1HeT9dckHjjgxXMogGR0C diff --git a/bin/internal/fuchsia-mac.version b/bin/internal/fuchsia-mac.version index 00c4bf56d3a74..3f5efc7d997d6 100644 --- a/bin/internal/fuchsia-mac.version +++ b/bin/internal/fuchsia-mac.version @@ -1 +1 @@ -p0aZoDAqDDEeIK9bKWRhrH1nXxArDPLqvfGHm4vMVFkC +0BdXJKVKfjhQxQo_1NG2ZN3gJx69Lo1HUYztIonf5zwC 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/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..90c3bcd104cd3 --- /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/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/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), + ); +} 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/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/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/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 && \ 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', 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/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/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/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) { 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/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/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/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); 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/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/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/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 0000000000000..3c4935a7ca84f Binary files /dev/null and b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ 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 0000000000000..ed4cc16421680 Binary files /dev/null and b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000..483be61389733 Binary files /dev/null and b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ 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 0000000000000..bcbf36df2f2aa Binary files /dev/null and b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 0000000000000..9c0a652864769 Binary files /dev/null and b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ 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 0000000000000..e71a726136a47 Binary files /dev/null and b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000..8a31fe2dd3f91 Binary files /dev/null and b/examples/image_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/examples/image_list/macos/Runner/Base.lproj/MainMenu.xib b/examples/image_list/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 0000000000000..537341abf994b --- /dev/null +++ b/examples/image_list/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 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/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/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+. 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/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/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. 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..85cfd19b96236 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 @@ -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, @@ -1269,7 +1333,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 +1419,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. @@ -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/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 cbc7bcf0fade3..2ff89d206686f 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) { @@ -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..fc4c55eea7998 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 = 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/material_button.dart b/packages/flutter/lib/src/material/material_button.dart index 0203032a5c147..67dbc1da71016 100644 --- a/packages/flutter/lib/src/material/material_button.dart +++ b/packages/flutter/lib/src/material/material_button.dart @@ -40,7 +40,7 @@ import 'theme_data.dart'; /// /// * [IconButton], to create buttons that contain icons rather than text. class MaterialButton extends StatelessWidget { - /// Creates a material button. + /// Creates a Material Design button. /// /// To create a custom Material button consider using [TextButton], /// [ElevatedButton], or [OutlinedButton]. diff --git a/packages/flutter/lib/src/material/navigation_rail.dart b/packages/flutter/lib/src/material/navigation_rail.dart index 6743915ca185a..732de8bfa9ed1 100644 --- a/packages/flutter/lib/src/material/navigation_rail.dart +++ b/packages/flutter/lib/src/material/navigation_rail.dart @@ -63,7 +63,7 @@ import 'theme.dart'; /// out horizontally. /// * https://material.io/components/navigation-rail/ class NavigationRail extends StatefulWidget { - /// Creates a material design navigation rail. + /// Creates a Material Design navigation rail. /// /// The value of [destinations] must be a list of one or more /// [NavigationRailDestination] values. diff --git a/packages/flutter/lib/src/material/outlined_button.dart b/packages/flutter/lib/src/material/outlined_button.dart index 7e8dc81fdddc5..82eacdca65dc6 100644 --- a/packages/flutter/lib/src/material/outlined_button.dart +++ b/packages/flutter/lib/src/material/outlined_button.dart @@ -59,8 +59,8 @@ import 'theme_data.dart'; /// /// See also: /// -/// * [ElevatedButton], a filled material design button with a shadow. -/// * [TextButton], a material design button without a shadow. +/// * [ElevatedButton], a filled Material Design button with a shadow. +/// * [TextButton], a Material Design button without a shadow. /// * 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/range_slider.dart b/packages/flutter/lib/src/material/range_slider.dart index eff3119b3e87b..fdd10e1e79e5b 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. /// @@ -612,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, @@ -622,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, @@ -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/scaffold.dart b/packages/flutter/lib/src/material/scaffold.dart index 3eef5e3e71285..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, @@ -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,13 +2244,13 @@ class ScaffoldState extends State with TickerProviderStateMixin, Resto completer, entry != null ? entry.remove - : _removeCurrentBottomSheet, + : removeCurrentBottomSheet, (VoidCallback fn) { bottomSheetKey.currentState?.setState(fn); }, !isPersistent, ); } - /// 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.dart b/packages/flutter/lib/src/material/slider.dart index 3110d05c3f5b6..449bc4a2508ce 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. @@ -714,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) { @@ -756,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, @@ -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/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 6ba18ba581f54..600c224f12ebe 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. @@ -1203,6 +1203,7 @@ class ThemeData with Diagnosticable { /// Components that have been migrated to Material 3 are: /// /// * [AlertDialog] + /// * [AppBar] /// * [Card] /// * [Dialog] /// * [ElevatedButton] @@ -1867,7 +1868,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(); @@ -1907,7 +1908,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>, }); } @@ -2624,7 +2625,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.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/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/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/lib/src/material/tooltip.dart b/packages/flutter/lib/src/material/tooltip.dart index 7b49f81eb15e9..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 @@ -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/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/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/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 50ad60b44da61..73648a23de8c4 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(); @@ -434,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(); @@ -469,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) { @@ -505,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) { @@ -978,19 +1047,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 +1311,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 +2146,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 +2175,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 +2289,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 +2331,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 +2374,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 +2418,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 +2452,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 +2499,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 +2654,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 7d204b807671b..28b5990eff91b 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,15 +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?); + if (_alpha == 0) { + return; } + super.paint(context, offset); } @override @@ -925,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. /// @@ -986,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(); } @@ -998,15 +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?); + if (_alpha == 0) { + return; } + super.paint(context, offset); } @override @@ -1115,6 +1119,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 +1189,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; } @@ -1815,9 +1827,6 @@ abstract class _RenderPhysicalModelBase extends _RenderCustomClip { markNeedsPaint(); } - @override - bool get alwaysNeedsCompositing => true; - @override void describeSemanticsConfiguration(SemanticsConfiguration config) { super.describeSemanticsConfiguration(config); @@ -1833,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. /// @@ -1861,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 @@ -1921,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 @@ -1994,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); @@ -2013,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 @@ -2426,6 +2505,10 @@ class RenderTransform extends RenderProxyBox { layer = ImageFilterLayer(imageFilter: filter); } context.pushLayer(layer!, super.paint, offset); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } } } @@ -3859,6 +3942,7 @@ class RenderSemanticsAnnotations extends RenderProxyBox { AttributedString? attributedIncreasedValue, AttributedString? attributedDecreasedValue, AttributedString? attributedHint, + String? tooltip, SemanticsHintOverrides? hintOverrides, TextDirection? textDirection, SemanticsSortKey? sortKey, @@ -3917,6 +4001,7 @@ class RenderSemanticsAnnotations extends RenderProxyBox { _attributedIncreasedValue = attributedIncreasedValue, _attributedDecreasedValue = attributedDecreasedValue, _attributedHint = attributedHint, + _tooltip = tooltip, _hintOverrides = hintOverrides, _textDirection = textDirection, _sortKey = sortKey, @@ -4311,6 +4396,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 +4940,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) @@ -5196,7 +5295,10 @@ class RenderLeaderLayer extends RenderProxyBox { ..offset = offset; } context.pushLayer(layer!, super.paint, Offset.zero); - assert(layer != null); + assert(() { + layer!.debugCreator = debugCreator; + return true; + }()); } @override @@ -5408,6 +5510,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/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/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/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/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/basic.dart b/packages/flutter/lib/src/widgets/basic.dart index 417f09f2a18ea..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. /// @@ -6695,6 +6752,7 @@ class Semantics extends SingleChildRenderObjectWidget { AttributedString? attributedDecreasedValue, String? hint, AttributedString? attributedHint, + String? tooltip, String? onTapHint, String? onLongPressHint, TextDirection? textDirection, @@ -6759,6 +6817,7 @@ class Semantics extends SingleChildRenderObjectWidget { attributedDecreasedValue: attributedDecreasedValue, hint: hint, attributedHint: attributedHint, + tooltip: tooltip, textDirection: textDirection, sortKey: sortKey, tagForChildren: tagForChildren, @@ -6901,6 +6960,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 +6996,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 +7038,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/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/draggable_scrollable_sheet.dart b/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart index 0ccae36798f3d..c73296b386fdf 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 @@ -879,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!); @@ -896,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 8e477b4032cb7..c09ded58f6b96 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; } @@ -4092,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( @@ -4104,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), ); } @@ -4116,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/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/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/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_filter.dart b/packages/flutter/lib/src/widgets/image_filter.dart index 8546ea969f015..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 { @@ -73,6 +111,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/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/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: 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/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/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/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/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_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 171dbe5594136..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); @@ -90,7 +109,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 +125,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); @@ -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, 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/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/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/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/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/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/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/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..c508efb60ba4b 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, @@ -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/debug_test.dart b/packages/flutter/test/material/debug_test.dart index 37628bb8c17a7..59474c5acc714 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,8 +28,8 @@ void main() { error.toStringDeep(), 'FlutterError\n' ' No Material widget found.\n' - ' ListTile widgets require a Material widget ancestor.\n' - ' In material design, most widgets are conceptually "printed" on a\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' ' that renders ink splashes, for instance. Because of this, many\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', ); 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/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/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/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/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/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 91b8e617ac268..86138aedfaa2b 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(), ], ), ), @@ -2760,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( @@ -2784,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 621c3da740c7c..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); @@ -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. @@ -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/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 1a876dafe894f..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( @@ -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/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/slider_test.dart b/packages/flutter/test/material/slider_test.dart index 354ddde960265..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 @@ -1816,6 +1817,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; @@ -2355,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')); @@ -2372,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..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)', ]); }); @@ -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/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/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/toggle_buttons_test.dart b/packages/flutter/test/material/toggle_buttons_test.dart index 7937117d917a9..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), ), ); @@ -1015,6 +1016,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: theme.colorScheme.onSurface.withOpacity(0.12), @@ -1042,6 +1045,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: theme.colorScheme.onSurface.withOpacity(0.12), @@ -1068,6 +1073,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: theme.colorScheme.onSurface.withOpacity(0.12), @@ -1108,6 +1115,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: borderColor, @@ -1137,6 +1146,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: selectedBorderColor, @@ -1165,6 +1176,8 @@ void main() { expect( toggleButtonRenderObject, paints + // physical model + ..path() ..path( style: PaintingStyle.stroke, color: disabledBorderColor, @@ -1432,6 +1445,8 @@ void main() { expect( toggleButtonRenderObject[0], paints + // physical model + ..path() // leading side, top and bottom - enabled ..path( style: PaintingStyle.stroke, @@ -1445,6 +1460,8 @@ void main() { expect( toggleButtonRenderObject[1], paints + // physical model + ..path() // leading side - selected ..path( style: PaintingStyle.stroke, @@ -1464,6 +1481,8 @@ void main() { expect( toggleButtonRenderObject[2], paints + // physical model + ..path() // leading side - selected, since previous button is selected ..path( style: PaintingStyle.stroke, @@ -1515,6 +1534,8 @@ void main() { expect( toggleButtonRenderObject[0], paints + // physical model + ..path() // left side, top and right - enabled. ..path( style: PaintingStyle.stroke, @@ -1528,6 +1549,8 @@ void main() { expect( toggleButtonRenderObject[1], paints + // physical model + ..path() // top side - selected. ..path( style: PaintingStyle.stroke, @@ -1547,6 +1570,8 @@ void main() { expect( toggleButtonRenderObject[2], paints + // physical model + ..path() // top side - selected, since previous button is selected. ..path( style: PaintingStyle.stroke, @@ -1712,6 +1737,8 @@ void main() { expect( toggleButtonRenderObject[0], paints + // physical model paints + ..path() // left side, top and right - enabled. ..path( style: PaintingStyle.stroke, @@ -1910,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 cd8246ec5ddf7..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 { @@ -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/material/tooltip_test.dart b/packages/flutter/test/material/tooltip_test.dart index 842cf8b0c112c..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'), - ) + ), ], ), ), @@ -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/material/will_pop_test.dart b/packages/flutter/test/material/will_pop_test.dart index 6a8d0903585c2..b99e473d65b97 100644 --- a/packages/flutter/test/material/will_pop_test.dart +++ b/packages/flutter/test/material/will_pop_test.dart @@ -410,10 +410,10 @@ void main() { child: const Text('anchor'), ); }, - ) + ), ]; - 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/_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/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/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); + }); +} diff --git a/packages/flutter/test/rendering/debug_test.dart b/packages/flutter/test/rendering/debug_test.dart index 87c69d7f5e4f7..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); @@ -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/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 28b1a0fb640fb..1d6eaec5663cb 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,52 +378,48 @@ 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 )); }); - void _testFittedBoxWithClipRectLayer() { + void testFittedBoxWithClipRectLayer() { _testLayerReuse(RenderFittedBox( 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 )); } - void _testFittedBoxWithTransformLayer() { + void testFittedBoxWithTransformLayer() { _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 )); } 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', () { @@ -561,6 +514,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 { @@ -596,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); @@ -631,3 +756,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/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/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/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/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/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_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/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/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); + }); } diff --git a/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart b/packages/flutter/test/widgets/draggable_scrollable_sheet_test.dart index bfd65190b9dc9..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,14 +1009,14 @@ void main() { textDirection: TextDirection.ltr, child: Stack( children: [ - _boilerplate( + boilerplateWidget( null, controller: controller, ), - _boilerplate( + boilerplateWidget( null, controller: controller, - ) + ), ], ), ), null, EnginePhase.build); @@ -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, @@ -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(boilerplateWidget(() {}, 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); + }); } diff --git a/packages/flutter/test/widgets/editable_text_test.dart b/packages/flutter/test/widgets/editable_text_test.dart index c13aecb79da75..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(); @@ -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 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 { 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_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())); + }); } 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/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/mouse_region_test.dart b/packages/flutter/test/widgets/mouse_region_test.dart index 7da940729dfaa..5e0c937ed642f 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()), ), ); @@ -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 212e86428e3af..7d366fd60f909 100644 --- a/packages/flutter/test/widgets/nested_scroll_view_test.dart +++ b/packages/flutter/test/widgets/nested_scroll_view_test.dart @@ -591,29 +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) { - final PhysicalModelLayer? candidate = _dfsFindPhysicalLayer(child); - if (candidate != null) { - return candidate; - } + 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!; - void _checkPhysicalLayer({required double elevation}) { - final PhysicalModelLayer? layer = _dfsFindPhysicalLayer(nestedScrollViewLayer); - expect(layer, isNotNull); - expect(layer!.elevation, equals(elevation)); + final RenderObject nestedScrollViewLayer = find.byType(NestedScrollView).evaluate().first.renderObject!; + void checkPhysicalLayer({required double elevation}) { + final dynamic physicalModel = dfsFindPhysicalLayer(nestedScrollViewLayer); + expect(physicalModel, isNotNull); + // ignore: avoid_dynamic_calls + expect(physicalModel.elevation, equals(elevation)); } int expectedBuildCount = 0; @@ -621,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')), @@ -637,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')), @@ -648,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)), @@ -674,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 @@ -686,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 @@ -701,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 @@ -712,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)), @@ -725,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)), @@ -740,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; }); @@ -2116,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( @@ -2147,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); @@ -2174,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/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); + } +} 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/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/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/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/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/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/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/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/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 621a4ee77f3ce..47a771756de84 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()), ), ); @@ -364,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( @@ -381,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)); } }, @@ -412,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 { @@ -430,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 { @@ -448,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 { @@ -470,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..4cb939ff74b5d 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), @@ -346,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), @@ -368,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), @@ -427,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); }); }); 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_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, 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/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 bad708fe4f7b8..c6ae9df17c744 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. /// @@ -494,6 +514,7 @@ Matcher matchesSemantics({ String? increasedValue, AttributedString? attributedIncreasedValue, String? decreasedValue, + String? tooltip, AttributedString? attributedDecreasedValue, TextDirection? textDirection, Rect? rect, @@ -583,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 = [ @@ -625,6 +646,7 @@ Matcher matchesSemantics({ value: value, attributedValue: attributedValue, increasedValue: increasedValue, + tooltip: tooltip, attributedIncreasedValue: attributedIncreasedValue, decreasedValue: decreasedValue, attributedDecreasedValue: attributedDecreasedValue, @@ -1783,6 +1805,7 @@ class _MatchesSemanticsData extends Matcher { this.attributedIncreasedValue, this.decreasedValue, this.attributedDecreasedValue, + this.tooltip, this.flags, this.actions, this.textDirection, @@ -1808,6 +1831,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 +1869,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 +1968,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/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/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/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 48a9d781035b6..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', () { @@ -566,6 +574,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, @@ -673,6 +682,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 { 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])); + }); } 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/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..411d53e962e53 100644 --- a/packages/flutter_tools/bin/tool_backend.dart +++ b/packages/flutter_tools/bin/tool_backend.dart @@ -59,11 +59,10 @@ or if (Platform.isWindows) 'flutter.bat' else - 'flutter' + '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/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 3a750cafdb4a6..e820b584f379d 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'); } @@ -381,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) { @@ -448,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 :( @@ -495,7 +494,8 @@ class AndroidDevice extends Device { 'uninstall', if (userIdentifier != null) ...['--user', userIdentifier], - app.id]), + app.id, + ]), throwOnError: true, ); uninstallOut = uninstallResult.stdout; @@ -565,7 +565,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(); @@ -807,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 19948c57b6384..fddbe1d4e0f72 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'); @@ -589,11 +589,11 @@ 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'); - command.add('--debug'); + command.add('--info'); command.add('-Pverbose=true'); } else { command.add('-q'); @@ -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/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart index 2aac9686e822d..bf7635aeecb77 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 @@ -98,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 @@ -120,7 +120,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 +136,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 +188,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,13 +205,17 @@ 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'; } } -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 ''; @@ -259,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'; } } @@ -349,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)); } } @@ -431,7 +440,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 +491,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 +524,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 +569,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 +625,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 +637,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 +672,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); @@ -791,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)); } } @@ -914,19 +905,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/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 79d5b6090462c..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', @@ -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/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_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/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 c0e78b7398579..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 @@ -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/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/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..33499acac5a09 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 @@ -183,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.'); @@ -390,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.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_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/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..8ae8fb5df3799 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'), @@ -666,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/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/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 39de6503826e0..739efc8a1a53d 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, @@ -89,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 @@ -98,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/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/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/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_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/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/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 8b6f22b78703d..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); @@ -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,11 +1004,22 @@ 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); } 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/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/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/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/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/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/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/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 3a9e9744c0ebd..9a773b53768e6 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. @@ -183,7 +180,7 @@ class AndroidPlugin extends PluginPlatform implements NativeOrDartPlugin { 'kotlin', package.replaceAll('.', _fileSystem.path.separator), '$pluginClass.kt', - ) + ), ]; File? mainPluginClass; @@ -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_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/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index 419c1953a0c79..b5bbac33c7e16 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) { @@ -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/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 3d1c55316fa9a..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', ], }; @@ -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..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, @@ -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?; @@ -309,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/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..ed41e392a921f 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, @@ -298,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/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/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/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/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 eec556b9c359f..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 @@ -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,26 +95,21 @@ 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' + '--verbose', ], environment: { if (verbose) - 'VERBOSE_SCRIPT_LOGGING': 'true' + 'VERBOSE_SCRIPT_LOGGING': 'true', }, onRun: onRun, stdout: stdout, @@ -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/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 705bb44cd8b38..fe69d009f3da3 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), @@ -1064,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))); @@ -1347,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) { @@ -1794,7 +1764,7 @@ void main() { '--org', 'com.bar.foo', '-i', 'objc', '-a', 'java', - '--platforms', 'ios,android' + '--platforms', 'ios,android', ], [], ); @@ -1948,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() {}')), - ) + ), ]); }; }, @@ -1971,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')), - ) + ), ]); }; }, @@ -1998,7 +1968,7 @@ void main() { FakeRequest( Uri.parse('https://master-api.flutter.dev/snippets/index.json'), response: FakeResponse(body: utf8.encode(samplesIndexJson)), - ) + ), ]); }; }, @@ -2026,7 +1996,7 @@ void main() { return FakeHttpClient.list([ FakeRequest( Uri.parse('https://master-api.flutter.dev/snippets/index.json'), - ) + ), ]); }; }, @@ -2051,7 +2021,7 @@ void main() { FakeRequest( Uri.parse('https://master-api.flutter.dev/snippets/index.json'), response: const FakeResponse(statusCode: HttpStatus.notFound), - ) + ), ]); }; }, @@ -2085,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: { @@ -2171,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'); @@ -2192,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', @@ -2218,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)); @@ -2354,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 b0d0636bed699..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', @@ -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', @@ -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') @@ -782,13 +782,13 @@ void main() { '-Pis-plugin=false', '-PbuildNumber=1.0', '--full-stacktrace', - '--debug', + '--info', '-Pverbose=true', '-Pdart-obfuscation=false', '-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/artifacts_test.dart b/packages/flutter_tools/test/general.shard/artifacts_test.dart index d906511a159e4..aed3eb9285104 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') @@ -327,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', () { @@ -358,20 +354,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/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/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/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/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 978901882a096..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 @@ -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; @@ -257,8 +156,8 @@ void main() { 'platform': 'ios', 'data': { 'A': 'B', - } - } + }, + }, )); await const DebugBundleWindowsAssets().build(environment); @@ -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..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', ), @@ -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); @@ -812,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', }, ), ); @@ -834,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', ]); }); @@ -1020,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 { @@ -1036,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 5cbea5fc0b927..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'); @@ -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/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/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/flutter_manifest_test.dart b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart index b2817aec32aba..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: @@ -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/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', () { 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/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'], 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/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..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', }); }); @@ -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/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/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/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 909258801c6ae..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 @@ -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,10 +41,11 @@ void main() { PackageConfig packages; Platform windows; FakeHttpServer httpServer; + BufferLogger logger; setUpAll(() async { packages = PackageConfig([ - Package('flutter_tools', Uri.file('/flutter_tools/lib/').normalizePath()) + Package('flutter_tools', Uri.file('/flutter_tools/lib/').normalizePath()), ]); }); @@ -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() {}'); @@ -80,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); @@ -104,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 @@ -117,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: { @@ -133,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'); @@ -165,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()); })); @@ -189,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()); })); @@ -327,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() {}')); })); @@ -341,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); @@ -420,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 @@ -441,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'))); @@ -454,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: { @@ -472,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()); })); @@ -487,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()); })); @@ -503,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/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..78497d60b2282 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(); @@ -49,7 +48,8 @@ void main() { name: 'test', pluginClass: 'Foo', variants: {PluginPlatformVariant.win32}, - )}, + ), + }, dependencies: [], isDirectDependency: true, ), @@ -63,94 +63,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/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 8ace19f6ade14..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 @@ -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; } 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/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 } 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')