[ Widget Preview ] Use analysis server for widget preview detection#184473
Conversation
This change ports the `flutter widget-preview start` command to utilize the Dart Analysis Server to detect widget previews in projects. When launched from an IDE, the widget previewer will use the existing DAS and DTD instances, greatly reducing the amount of memory consumed by the widget previewer. A `--legacy-preview-detection` flag has also been added to fall back to the previous in-process preview detection logic. This flag will be removed in a future release once the DAS implementation is proven to be stable. Fixes flutter#179584
|
|
||
| /// The set of widget previews defined in a script of an analyzed Flutter | ||
| /// project. | ||
| class FlutterWidgetPreviews { |
There was a problem hiding this comment.
This file is basically a slightly modified version of the changes made in https://dart-review.googlesource.com/c/sdk/+/478100/11/third_party/pkg/language_server_protocol/lib/protocol_custom_generated.dart
There was a problem hiding this comment.
Code Review
This pull request introduces LSP-based preview detection for the widget previewer, allowing it to leverage the analysis server for more robust preview discovery. Key changes include the addition of LspPreviewDetector and FlutterWidgetPreviews data structures, updates to WidgetPreviewStartCommand to support both legacy and LSP-based detection modes, and the addition of necessary DTD service methods. Several improvements were suggested to ensure data consistency, null safety, and adherence to Dart best practices for class definitions.
| ); | ||
| } | ||
| _imports.addAll({ | ||
| for (final MapEntry(:key, :value) in imports.entries) key: int.parse(value.substring(2)), |
There was a problem hiding this comment.
nit: it might safer to use tryParse or a check to avoid throwing an exception if value doesn't follow the expected format for some reason.
There was a problem hiding this comment.
Normally I'd agree, but in this situation I think it's better to throw an exception so we can get a signal that the analyzer is returning a poorly formatted response since this should always be an integer.
flutter/flutter@0f401ee...7245c3f 2026-04-03 [email protected] Roll Skia from c07c67045b6d to 5d847ba5c4aa (1 revision) (flutter/flutter#184570) 2026-04-03 [email protected] Roll Dart SDK from 3c7a79045b8b to 46f49142acd9 (1 revision) (flutter/flutter#184567) 2026-04-03 [email protected] Roll ICU from ee5f27adc28b to ff7995a708a1 (5 revisions) (flutter/flutter#184566) 2026-04-03 [email protected] Roll Skia from 9ae8231be181 to c07c67045b6d (4 revisions) (flutter/flutter#184562) 2026-04-03 [email protected] Roll Fuchsia Linux SDK from BFLjk6Uwd0gs_Hkdk... to PpL3Bn2YMb2h9LbdK... (flutter/flutter#184556) 2026-04-03 [email protected] Roll Skia from 0566b2f5f0d1 to 9ae8231be181 (1 revision) (flutter/flutter#184547) 2026-04-03 [email protected] Roll Dart SDK from 6008eaddd589 to 3c7a79045b8b (3 revisions) (flutter/flutter#184551) 2026-04-03 [email protected] Fix wide gamut macos integration test (flutter/flutter#184427) 2026-04-02 [email protected] forward an application name to DDS (flutter/flutter#184459) 2026-04-02 [email protected] Roll Skia from 973117cfa875 to 0566b2f5f0d1 (8 revisions) (flutter/flutter#184534) 2026-04-02 [email protected] Support different joins for stroked rects in uber_sdf, fix incorrect aa (flutter/flutter#184395) 2026-04-02 [email protected] [ Widget Preview ] Handle collections and records in custom preview annotations (flutter/flutter#184518) 2026-04-02 [email protected] Moves android_semantics_integration_test out of staging (flutter/flutter#184079) 2026-04-02 [email protected] Roll Packages from b3fcf14 to 66bf7ec (4 revisions) (flutter/flutter#184514) 2026-04-02 [email protected] Fix line breaks being lost when copying after selection gesture in SelectableRegion (flutter/flutter#184421) 2026-04-02 [email protected] Add plugin version to SwiftPM package symlink directory (flutter/flutter#183668) 2026-04-02 [email protected] Add our own wrapper for `CommonExtension` due to change in signature from 8.x->9.0 (flutter/flutter#184433) 2026-04-02 [email protected] [Android] Use EdgeToEdge.enable/WindowCompat for edge-to-edge mode instead of deprecated View flags (flutter/flutter#183072) 2026-04-02 [email protected] [data_assets] Cleanup tests (flutter/flutter#184209) 2026-04-02 [email protected] Enable SPM by default on Stable (flutter/flutter#184495) 2026-04-02 [email protected] Roll Dart SDK from d84bdfeb45eb to 6008eaddd589 (2 revisions) (flutter/flutter#184513) 2026-04-02 [email protected] Reland "Even more awaits" (flutter/flutter#184467) 2026-04-02 [email protected] Roll Skia from bb9fd8653739 to 973117cfa875 (2 revisions) (flutter/flutter#184498) 2026-04-02 [email protected] [ Widget Preview ] Use analysis server for widget preview detection (flutter/flutter#184473) 2026-04-02 [email protected] [web_ui] Fix avoid_type_to_string lint violation (flutter/flutter#184342) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…lutter#184473) This change ports the `flutter widget-preview start` command to utilize the Dart Analysis Server to detect widget previews in projects. When launched from an IDE, the widget previewer will use the existing DAS and DTD instances, greatly reducing the amount of memory consumed by the widget previewer. A `--legacy-preview-detection` flag has also been added to fall back to the previous in-process preview detection logic. This flag will be removed in a future release once the DAS implementation is proven to be stable. Fixes flutter#179584
This change ports the
flutter widget-preview startcommand to utilize the Dart Analysis Server to detect widget previews in projects. When launched from an IDE, the widget previewer will use the existing DAS and DTD instances, greatly reducing the amount of memory consumed by the widget previewer.A
--legacy-preview-detectionflag has also been added to fall back to the previous in-process preview detection logic. This flag will be removed in a future release once the DAS implementation is proven to be stable.Fixes #179584