From 8a884f68d0c9f685daefe37c55236ad7740ac994 Mon Sep 17 00:00:00 2001 From: LyViolz Date: Wed, 26 Aug 2026 10:25:59 +0300 Subject: [PATCH 1/3] Warn before Flutter upgrade on Windows --- src/io/flutter/FlutterBundle.properties | 2 ++ .../flutter/actions/FlutterUpgradeAction.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/io/flutter/FlutterBundle.properties b/src/io/flutter/FlutterBundle.properties index a891f60870..6bfafb5ec8 100644 --- a/src/io/flutter/FlutterBundle.properties +++ b/src/io/flutter/FlutterBundle.properties @@ -187,4 +187,6 @@ widget.preview.retry=Reload and try again widget.preview.choose_pubroot=Choose module and try again widget.preview.choose_pubroot.title=Select Flutter Project widget.preview.choose_pubroot.description=Select the Flutter project to use for Flutter Widget Preview. +flutter.upgrade.windows.title=Flutter Upgrade on Windows +flutter.upgrade.windows.message=Flutter upgrades can fail on Windows while the IDE is running because the Dart SDK may be locked by IDE processes. Close the IDE and run ''flutter upgrade'' from a terminal instead. flutter.sdk.not.found=Flutter SDK not found. \ No newline at end of file diff --git a/src/io/flutter/actions/FlutterUpgradeAction.java b/src/io/flutter/actions/FlutterUpgradeAction.java index 3f7eedf0cb..87acc6b2fd 100644 --- a/src/io/flutter/actions/FlutterUpgradeAction.java +++ b/src/io/flutter/actions/FlutterUpgradeAction.java @@ -5,14 +5,32 @@ */ package io.flutter.actions; +import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.SystemInfo; +import io.flutter.FlutterBundle; +import io.flutter.FlutterMessages; import io.flutter.pub.PubRoot; import io.flutter.sdk.FlutterSdk; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class FlutterUpgradeAction extends FlutterSdkAction { + @Override + public void actionPerformed(@NotNull AnActionEvent event) { + final Project project = event.getProject(); + if (SystemInfo.isWindows && project != null && FlutterSdk.getFlutterSdk(project) != null) { + FlutterMessages.showDialog(project, + FlutterBundle.message("flutter.upgrade.windows.message"), + FlutterBundle.message("flutter.upgrade.windows.title"), + new String[]{"OK"}, 0); + return; + } + + super.actionPerformed(event); + } + @Override public void startCommand(@NotNull Project project, @NotNull FlutterSdk sdk, @Nullable PubRoot root, @NotNull DataContext context) { sdk.flutterUpgrade().startInConsole(project); From 9ebf41cacf2cc60d1471a56db52ce53dc48a0abf Mon Sep 17 00:00:00 2001 From: LyViolz Date: Wed, 26 Aug 2026 10:43:18 +0300 Subject: [PATCH 2/3] Address review feedback --- CHANGELOG.md | 1 + src/io/flutter/FlutterBundle.properties | 2 +- src/io/flutter/actions/FlutterUpgradeAction.java | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cf1d84035..3673a30f37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ ### Fixed - Opening the iOS Simulator with Xcode 27, which replaced `Simulator.app` with `DeviceHub.app`. (#9126) +- Prevent Flutter upgrades from running inside the IDE on Windows when Dart SDK files may be locked. (#9092) ## 96.0.0 diff --git a/src/io/flutter/FlutterBundle.properties b/src/io/flutter/FlutterBundle.properties index 6bfafb5ec8..36dad13b0d 100644 --- a/src/io/flutter/FlutterBundle.properties +++ b/src/io/flutter/FlutterBundle.properties @@ -188,5 +188,5 @@ widget.preview.choose_pubroot=Choose module and try again widget.preview.choose_pubroot.title=Select Flutter Project widget.preview.choose_pubroot.description=Select the Flutter project to use for Flutter Widget Preview. flutter.upgrade.windows.title=Flutter Upgrade on Windows -flutter.upgrade.windows.message=Flutter upgrades can fail on Windows while the IDE is running because the Dart SDK may be locked by IDE processes. Close the IDE and run ''flutter upgrade'' from a terminal instead. +flutter.upgrade.windows.message=Flutter upgrades can fail on Windows while the IDE is running because the Dart SDK may be locked by IDE processes. Close the IDE and run 'flutter upgrade' from a terminal instead. flutter.sdk.not.found=Flutter SDK not found. \ No newline at end of file diff --git a/src/io/flutter/actions/FlutterUpgradeAction.java b/src/io/flutter/actions/FlutterUpgradeAction.java index 87acc6b2fd..a1c1600943 100644 --- a/src/io/flutter/actions/FlutterUpgradeAction.java +++ b/src/io/flutter/actions/FlutterUpgradeAction.java @@ -9,6 +9,8 @@ import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.SystemInfo; +import com.jetbrains.lang.dart.analytics.Analytics; +import com.jetbrains.lang.dart.analytics.AnalyticsData; import io.flutter.FlutterBundle; import io.flutter.FlutterMessages; import io.flutter.pub.PubRoot; @@ -25,6 +27,7 @@ public void actionPerformed(@NotNull AnActionEvent event) { FlutterBundle.message("flutter.upgrade.windows.message"), FlutterBundle.message("flutter.upgrade.windows.title"), new String[]{"OK"}, 0); + Analytics.report(AnalyticsData.forAction(this, event)); return; } From f75e85137cfb9c57383b957aac913607e00bf2b3 Mon Sep 17 00:00:00 2001 From: LyViolz Date: Sat, 26 Sep 2026 13:55:39 +0300 Subject: [PATCH 3/3] Make Windows Flutter upgrade warning optional --- src/io/flutter/FlutterBundle.properties | 3 ++- src/io/flutter/actions/FlutterUpgradeAction.java | 15 ++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/io/flutter/FlutterBundle.properties b/src/io/flutter/FlutterBundle.properties index 36dad13b0d..0393b00ca3 100644 --- a/src/io/flutter/FlutterBundle.properties +++ b/src/io/flutter/FlutterBundle.properties @@ -188,5 +188,6 @@ widget.preview.choose_pubroot=Choose module and try again widget.preview.choose_pubroot.title=Select Flutter Project widget.preview.choose_pubroot.description=Select the Flutter project to use for Flutter Widget Preview. flutter.upgrade.windows.title=Flutter Upgrade on Windows -flutter.upgrade.windows.message=Flutter upgrades can fail on Windows while the IDE is running because the Dart SDK may be locked by IDE processes. Close the IDE and run 'flutter upgrade' from a terminal instead. +flutter.upgrade.windows.message=Flutter upgrades may fail on Windows while the IDE is running because Dart SDK files can be locked by IDE processes. For the most reliable upgrade, close the IDE and run 'flutter upgrade' from a terminal. Do you want to continue here anyway? +flutter.upgrade.windows.continue=Continue with upgrade flutter.sdk.not.found=Flutter SDK not found. \ No newline at end of file diff --git a/src/io/flutter/actions/FlutterUpgradeAction.java b/src/io/flutter/actions/FlutterUpgradeAction.java index a1c1600943..1d75d6d355 100644 --- a/src/io/flutter/actions/FlutterUpgradeAction.java +++ b/src/io/flutter/actions/FlutterUpgradeAction.java @@ -23,11 +23,16 @@ public class FlutterUpgradeAction extends FlutterSdkAction { public void actionPerformed(@NotNull AnActionEvent event) { final Project project = event.getProject(); if (SystemInfo.isWindows && project != null && FlutterSdk.getFlutterSdk(project) != null) { - FlutterMessages.showDialog(project, - FlutterBundle.message("flutter.upgrade.windows.message"), - FlutterBundle.message("flutter.upgrade.windows.title"), - new String[]{"OK"}, 0); - Analytics.report(AnalyticsData.forAction(this, event)); + final int response = FlutterMessages.showDialog(project, + FlutterBundle.message("flutter.upgrade.windows.message"), + FlutterBundle.message("flutter.upgrade.windows.title"), + new String[]{FlutterBundle.message("flutter.upgrade.windows.continue"), "Cancel"}, 1); + if (response == 0) { + super.actionPerformed(event); + } + else { + Analytics.report(AnalyticsData.forAction(this, event)); + } return; }