From d64046f4a9efaa91a6c696a787de0239b008aa75 Mon Sep 17 00:00:00 2001 From: Kenzie Davisson <43759233+kenzieschmoll@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:27:27 -0700 Subject: [PATCH] Update to latest flutter and fix a couple logging errors. (#8350) --- flutter-candidate.txt | 2 +- .../src/screens/debugger/debugger_screen.dart | 4 +- .../inspector/inspector_data_models.dart | 8 +++- .../inspector_v2/inspector_data_models.dart | 8 +++- .../instance_viewer/instance_providers.dart | 4 +- .../generic_instance_reference.dart | 4 +- .../custom_pointer_scroll_view.dart | 4 +- .../lib/src/shared/table/_tree_table.dart | 4 +- .../test/shared/ui_utils_test.dart | 16 ++++++-- ...ation_animated_physical_model_selected.png | Bin 57247 -> 57715 bytes ...ntegration_inspector_scaffold_selected.png | Bin 57246 -> 57715 bytes .../devtools_app/web/flutter_bootstrap.js | 1 - .../service/service_extension_manager.dart | 4 +- packages/devtools_extensions/README.md | 37 ++++++------------ .../lib/src/server/handlers/_survey.dart | 2 +- 15 files changed, 55 insertions(+), 43 deletions(-) diff --git a/flutter-candidate.txt b/flutter-candidate.txt index dbeb7a0ae55..9c9b22f0851 100644 --- a/flutter-candidate.txt +++ b/flutter-candidate.txt @@ -1 +1 @@ -9108b6d0cff1eb95377153559c01d48f725760ba +8925e1ffdfe880b06a8bc5877f017083d6652f5b diff --git a/packages/devtools_app/lib/src/screens/debugger/debugger_screen.dart b/packages/devtools_app/lib/src/screens/debugger/debugger_screen.dart index 0e45428602f..75b6e8585d3 100644 --- a/packages/devtools_app/lib/src/screens/debugger/debugger_screen.dart +++ b/packages/devtools_app/lib/src/screens/debugger/debugger_screen.dart @@ -110,7 +110,9 @@ class _DebuggerScreenBodyWrapperState extends State<_DebuggerScreenBodyWrapper> _shownFirstScript = false; SchedulerBinding.instance.addPostFrameCallback((timeStamp) { if (!_shownFirstScript || - controller.codeViewController.navigationInProgress) return; + controller.codeViewController.navigationInProgress) { + return; + } final routerDelegate = DevToolsRouterDelegate.of(context); routerDelegate.updateStateIfChanged( CodeViewSourceLocationNavigationState( diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart index 89d4f52405e..9cc4d96c856 100644 --- a/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart +++ b/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart @@ -605,7 +605,9 @@ class FlexLayoutProperties extends LayoutProperties { if (crossAxisAlignment == CrossAxisAlignment.start || crossAxisAlignment == CrossAxisAlignment.stretch || - maxDimension == usedDimension) return 0.0; + maxDimension == usedDimension) { + return 0.0; + } final emptySpace = math.max(0.0, maxDimension - usedDimension); if (crossAxisAlignment == CrossAxisAlignment.end) return emptySpace; return emptySpace * 0.5; @@ -678,7 +680,9 @@ class FlexLayoutProperties extends LayoutProperties { if (dimension(crossAxisDirection) == displayChildren[i].dimension(crossAxisDirection) || childrenRenderProperties[i].crossAxisDimension == - maxSizeAvailable(crossAxisDirection)) continue; + maxSizeAvailable(crossAxisDirection)) { + continue; + } final renderProperties = childrenRenderProperties[i]; final space = renderProperties.clone()..isFreeSpace = true; diff --git a/packages/devtools_app/lib/src/screens/inspector_v2/inspector_data_models.dart b/packages/devtools_app/lib/src/screens/inspector_v2/inspector_data_models.dart index c3015eeeb8f..120f5663c66 100644 --- a/packages/devtools_app/lib/src/screens/inspector_v2/inspector_data_models.dart +++ b/packages/devtools_app/lib/src/screens/inspector_v2/inspector_data_models.dart @@ -701,7 +701,9 @@ class FlexLayoutProperties extends LayoutProperties { if (crossAxisAlignment == CrossAxisAlignment.start || crossAxisAlignment == CrossAxisAlignment.stretch || - maxDimension == usedDimension) return 0.0; + maxDimension == usedDimension) { + return 0.0; + } final emptySpace = math.max(0.0, maxDimension - usedDimension); if (crossAxisAlignment == CrossAxisAlignment.end) return emptySpace; return emptySpace * 0.5; @@ -774,7 +776,9 @@ class FlexLayoutProperties extends LayoutProperties { if (dimension(crossAxisDirection) == displayChildren[i].dimension(crossAxisDirection) || childrenRenderProperties[i].crossAxisDimension == - maxSizeAvailable(crossAxisDirection)) continue; + maxSizeAvailable(crossAxisDirection)) { + continue; + } final renderProperties = childrenRenderProperties[i]; final space = renderProperties.clone()..isFreeSpace = true; diff --git a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_providers.dart b/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_providers.dart index e0c3aa9ef9f..9a5a13068d8 100644 --- a/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_providers.dart +++ b/packages/devtools_app/lib/src/screens/provider/instance_viewer/instance_providers.dart @@ -187,7 +187,9 @@ Future _tryParseEnum( required Setter? setter, }) async { if (instance.kind != InstanceKind.kPlainInstance || - instance.fields?.length != 2) return null; + instance.fields?.length != 2) { + return null; + } InstanceRef? findPropertyWithName(String name) { return instance.fields diff --git a/packages/devtools_app/lib/src/shared/diagnostics/generic_instance_reference.dart b/packages/devtools_app/lib/src/shared/diagnostics/generic_instance_reference.dart index 15c87cf13ad..04df29b800a 100644 --- a/packages/devtools_app/lib/src/shared/diagnostics/generic_instance_reference.dart +++ b/packages/devtools_app/lib/src/shared/diagnostics/generic_instance_reference.dart @@ -18,7 +18,9 @@ bool isRootForReferences(GenericInstanceRef? ref) { } if (ref.instanceRef?.length == 0 || - isPrimitiveInstanceKind(ref.instanceRef?.kind)) return false; + isPrimitiveInstanceKind(ref.instanceRef?.kind)) { + return false; + } return ref.refNodeType.isRoot; } diff --git a/packages/devtools_app/lib/src/shared/primitives/custom_pointer_scroll_view.dart b/packages/devtools_app/lib/src/shared/primitives/custom_pointer_scroll_view.dart index 7d0954ba845..d730fbdc7c5 100644 --- a/packages/devtools_app/lib/src/shared/primitives/custom_pointer_scroll_view.dart +++ b/packages/devtools_app/lib/src/shared/primitives/custom_pointer_scroll_view.dart @@ -417,7 +417,9 @@ class CustomPointerScrollableState extends State @protected void setCanDrag(bool canDrag) { if (canDrag == _lastCanDrag && - (!canDrag || widget.axis == _lastAxisDirection)) return; + (!canDrag || widget.axis == _lastAxisDirection)) { + return; + } if (!canDrag) { _gestureRecognizers = const {}; } else { diff --git a/packages/devtools_app/lib/src/shared/table/_tree_table.dart b/packages/devtools_app/lib/src/shared/table/_tree_table.dart index 82a176ea76f..81bbc7c19c1 100644 --- a/packages/devtools_app/lib/src/shared/table/_tree_table.dart +++ b/packages/devtools_app/lib/src/shared/table/_tree_table.dart @@ -330,7 +330,9 @@ class TreeTableState> extends State> LogicalKeyboardKey.arrowUp, LogicalKeyboardKey.arrowLeft, LogicalKeyboardKey.arrowRight, - ].contains(event.logicalKey)) return KeyEventResult.ignored; + ].contains(event.logicalKey)) { + return KeyEventResult.ignored; + } // If there is no selected node, choose the first one. if (widget.selectionNotifier.value.node == null) { diff --git a/packages/devtools_app/test/shared/ui_utils_test.dart b/packages/devtools_app/test/shared/ui_utils_test.dart index bdfb31c2ad4..89ddecdfa82 100644 --- a/packages/devtools_app/test/shared/ui_utils_test.dart +++ b/packages/devtools_app/test/shared/ui_utils_test.dart @@ -115,19 +115,27 @@ void main() { equalsIgnoringHashCodes( 'TextSpan:\n' ' inherit: true\n' - ' color: MaterialColor(primary value: Color(0xfff44336))\n' + ' color: MaterialColor(primary value: Color(alpha: 1.0000, red:\n' + ' 0.9569, green: 0.2627, blue: 0.2118, colorSpace:\n' + ' ColorSpace.sRGB))\n' ' "parent"\n' ' TextSpan:\n' ' inherit: true\n' - ' color: MaterialColor(primary value: Color(0xff2196f3))\n' + ' color: MaterialColor(primary value: Color(alpha: 1.0000, red:\n' + ' 0.1294, green: 0.5882, blue: 0.9529, colorSpace:\n' + ' ColorSpace.sRGB))\n' ' "foo"\n' ' TextSpan:\n' ' inherit: true\n' - ' color: MaterialColor(primary value: Color(0xff4caf50))\n' + ' color: MaterialColor(primary value: Color(alpha: 1.0000, red:\n' + ' 0.2980, green: 0.6863, blue: 0.3137, colorSpace:\n' + ' ColorSpace.sRGB))\n' ' "bar"\n' ' TextSpan:\n' ' inherit: true\n' - ' color: MaterialColor(primary value: Color(0xffffeb3b))\n' + ' color: MaterialColor(primary value: Color(alpha: 1.0000, red:\n' + ' 1.0000, green: 0.9216, blue: 0.2314, colorSpace:\n' + ' ColorSpace.sRGB))\n' ' "b"\n', ), ); diff --git a/packages/devtools_app/test/test_infra/goldens/integration_animated_physical_model_selected.png b/packages/devtools_app/test/test_infra/goldens/integration_animated_physical_model_selected.png index 8cae682185d305b9fc82483cf6c7bea7b9a07cfb..fd9e7cb96b4cab1e93c3be4012eff34b61f71e99 100644 GIT binary patch delta 16019 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

-P2Z+%W4UL*3Q3tNEmzQOiTq9ao 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 Y|3~ZYeoAH-yqJ^6HC0l7GW+HK0gFys7XSbN diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_scaffold_selected.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_scaffold_selected.png index 07f1c284e3556b2d5ef9d2d06c609faa211f2846..05d8d5f7edb29a2aaad72c6c60b04d71808c457b 100644 GIT binary patch delta 15973 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 UzURMp1fI~5L#78a_B;Igzt42A0{{R3 delta 19257 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 vlQIkf?hMr0!02|JPoZ65XLw*4 diff --git a/packages/devtools_app/web/flutter_bootstrap.js b/packages/devtools_app/web/flutter_bootstrap.js index e63cd54c178..b9a06485ea3 100644 --- a/packages/devtools_app/web/flutter_bootstrap.js +++ b/packages/devtools_app/web/flutter_bootstrap.js @@ -81,7 +81,6 @@ async function bootstrapAppFor3P() { console.log('Attempting to load DevTools with ' + rendererForLog + ' renderer.'); const rendererConfig = useSkwasm ? {} : { renderer: 'canvaskit' }; - console.log(rendererConfig); _flutter.loader.load({ serviceWorkerSettings: { serviceWorkerVersion: {{flutter_service_worker_version}}, diff --git a/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart b/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart index 185e8fda80a..d4aae69edb6 100644 --- a/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart +++ b/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart @@ -202,7 +202,9 @@ final class ServiceExtensionManager with DisposerMixin { final lastMainIsolate = _isolateManager.mainIsolate.value; if (_checkForFirstFrameStarted || _firstFrameEventReceived || - lastMainIsolate == null) return; + lastMainIsolate == null) { + return; + } if (!isServiceExtensionAvailable(extensions.didSendFirstFrameEvent)) { return; } diff --git a/packages/devtools_extensions/README.md b/packages/devtools_extensions/README.md index 1f6f84d7fbc..8f286fe9469 100644 --- a/packages/devtools_extensions/README.md +++ b/packages/devtools_extensions/README.md @@ -38,31 +38,16 @@ Follow the instructions below to get started, and use the for reference. # Table of contents -1. [Setup your package hierarchy](#step-1-setup-your-package-hierarchy) -2. [Create a DevTools extension](#create-a-devtools-extension) - - [Step 1: Setup your package hierarchy](#setup-your-package-hierarchy) +1. [Create a DevTools extension](#create-a-devtools-extension) + - [Step 1: Setup your package hierarchy](#step-1-setup-your-package-hierarchy) - [Standalone extensions](#standalone-extensions) - [Companion extensions](#companion-extensions) - [Step 2: Configure your extension](#step-2-configure-your-extension) - [Step 3: Build your extension](#step-3-build-your-extension) - [Step 4: Debug your extension](#step-4-debug-your-extension) -3. [Publish your package with a DevTools extension](#publish-your-package-with-a-devTools-extension) -4. [Resources and support](#resources-and-support) -5. [Testimonies from extension authors](#testimonies-from-extension-authors) - -## Supported tools - -With the DevTools extensions framework you can build many types of tools, including: -- Companion tools for existing packages -- New tools that are shipped as their own package -- Tools that require a running application -- Tools that **do not** require a running application - -The DevTools Extensions framework comes with some out of the box features that make -distributing your extension to users seamless: -- Users can use your tool from DevTools in the browser -- Users can use your tool embedded directly in their IDE -- Users can discover and open your tool from Dart & Flutter supported IDEs +2. [Publish your package with a DevTools extension](#publish-your-package-with-a-devTools-extension) +3. [Resources and support](#resources-and-support) +4. [Testimonies from extension authors](#testimonies-from-extension-authors) ## Create a DevTools Extension @@ -129,7 +114,7 @@ some_pkg ... ``` -Under this directory, create the following structure: +Under the `extension` directory, create the following structure: ``` extension devtools/ @@ -302,23 +287,23 @@ real DevTools environment. Build your flutter web app and copy the built assets dart run devtools_extensions validate --package=../some_pkg ``` -2. Prepare and a test environment with a dependency on your pub package that is providing the +2. Prepare a test environment with a dependency on your pub package that is providing the extension. - In the Dart or Flutter project where you are adding a dependency on your package, add a [path](https://dart.dev/tools/pub/dependencies#path-packages) dependency that points to your local package source code (the package that contains the `extension/devtools/` directory with your extension's assets). Once you have done this, run `pub get` on the package. - - If your extension requires a running application, then you'll need to run the app that + - **If your extension requires a running application**, then you'll need to run the app that depends on your extension. - - If your extension does not requires a running application, then you will need to + - **If your extension does not require a running application**, then you will need to open the test Dart or Flutter project that depends on your package in a supported IDE (VS Code or IntelliJ / Android Studio). 3. Start DevTools in one of the following ways: - - **If your extension requires a running app**, you can open DevTools either from the URI + - **If your extension requires a running application**, you can open DevTools either from the URI that was printed to command line when you ran the test app, or from the IDE where you ran your test app. - - **If your extension does not require a running app**, you can open your Dart or Flutter + - **If your extension does not require a running application**, you can open your Dart or Flutter project that depends on your package in a supported IDE (VS Code or IntelliJ / Android Studio). Open DevTools from the IDE to see your extension in the browser. - Requires Dart SDK >= 3.5 and Flutter SDK >= 3.23 diff --git a/packages/devtools_shared/lib/src/server/handlers/_survey.dart b/packages/devtools_shared/lib/src/server/handlers/_survey.dart index fdb4fb201f3..fdec86ae7b0 100644 --- a/packages/devtools_shared/lib/src/server/handlers/_survey.dart +++ b/packages/devtools_shared/lib/src/server/handlers/_survey.dart @@ -16,7 +16,7 @@ abstract class _SurveyHandler { [apiParameterValueKey], queryParams: queryParams, api: api, - requestName: ReleaseNotesApi.setLastReleaseNotesVersion, + requestName: SurveyApi.setActiveSurvey, ); if (missingRequiredParams != null) return missingRequiredParams;