Skip to content

Commit 829335e

Browse files
authored
Update SDK sunsetting support warnings (#8235)
This adds a notification for when an SDK is no longer supported and after sunset (in addition to when an SDK is in a warning stage, i.e. about to sunset in a few months).
1 parent c34c326 commit 829335e

File tree

4 files changed

+69
-17
lines changed

4 files changed

+69
-17
lines changed

flutter-idea/src/io/flutter/FlutterInitializer.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import io.flutter.utils.OpenApiUtils;
5858
import io.flutter.view.InspectorViewFactory;
5959
import org.jetbrains.annotations.NotNull;
60+
import org.jetbrains.annotations.Nullable;
6061

6162
import java.util.ArrayList;
6263
import java.util.List;
@@ -316,7 +317,32 @@ private void checkSdkVersionNotification(@NotNull Project project) {
316317
// See FlutterSdkVersion.MIN_SDK_SUPPORTED.
317318
if (version.isValid() && !version.isSDKSupported()) {
318319
final FlutterSettings settings = FlutterSettings.getInstance();
319-
if (settings == null || settings.isSdkVersionOutdatedWarningAcknowledged(version.getVersionText())) return;
320+
if (settings == null || settings.isSdkVersionOutdatedWarningAcknowledged(version.getVersionText(), false)) return;
321+
OpenApiUtils.safeInvokeLater(() -> {
322+
final Notification notification = new Notification(FlutterMessages.FLUTTER_NOTIFICATION_GROUP_ID,
323+
"Flutter SDK requires update",
324+
"Support for v" +
325+
version.getVersionText() +
326+
" of the Flutter SDK has been removed and we are no longer fixing issues that" +
327+
" result from this version. Consider updating to a more recent Flutter SDK.",
328+
NotificationType.WARNING);
329+
330+
notification.addAction(new AnAction("Dismiss") {
331+
@Override
332+
public void actionPerformed(@NotNull AnActionEvent event) {
333+
settings.setSdkVersionOutdatedWarningAcknowledged(version.getVersionText(), false, true);
334+
notification.expire();
335+
}
336+
});
337+
Notifications.Bus.notify(notification, project);
338+
});
339+
return;
340+
}
341+
342+
// See FlutterSdkVersion.MIN_SDK_WITHOUT_SUNSET_WARNING.
343+
if (version.isValid() && version.isSDKAboutToSunset()) {
344+
final FlutterSettings settings = FlutterSettings.getInstance();
345+
if (settings == null || settings.isSdkVersionOutdatedWarningAcknowledged(version.getVersionText(), true)) return;
320346

321347
OpenApiUtils.safeInvokeLater(() -> {
322348
final Notification notification = new Notification(FlutterMessages.FLUTTER_NOTIFICATION_GROUP_ID,
@@ -341,7 +367,7 @@ private void checkSdkVersionNotification(@NotNull Project project) {
341367
notification.addAction(new AnAction("Dismiss") {
342368
@Override
343369
public void actionPerformed(@NotNull AnActionEvent event) {
344-
settings.setSdkVersionOutdatedWarningAcknowledged(version.getVersionText(), true);
370+
settings.setSdkVersionOutdatedWarningAcknowledged(version.getVersionText(), true, true);
345371
notification.expire();
346372
}
347373
});

flutter-idea/src/io/flutter/sdk/FlutterSdkVersion.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,30 @@
1717

1818
public final class FlutterSdkVersion implements Comparable<FlutterSdkVersion> {
1919
/**
20-
* The minimum version that will trigger a notification that the Flutter SDK needs to be updated, otherwise support may be lost in the
21-
* Flutter Plugin.
20+
* The minimum version of the Flutter SDK that is still supported. A version less than this should trigger a warning to users that
21+
* the Flutter plugin no longer supports the SDK version and we will not be fixing issues resulting from using this version.
2222
* <p>
2323
* Note, this is for the Flutter SDK version, not the Dart SDK version, this mapping can be found:
2424
* <a href="https://docs.flutter.dev/release/archive">Flutter SDK Release Archive list</a>.
2525
* <p>
26-
* The Flutter version `3.7.12` maps to the Dart SDK version in before NNBD (early 2023 stable).
26+
* This version was updated last on May 29, 2024.
27+
*/
28+
@VisibleForTesting
29+
@NotNull
30+
public static final FlutterSdkVersion MIN_SDK_SUPPORTED = new FlutterSdkVersion("3.10.3");
31+
32+
/**
33+
* The minimum version of the Flutter SDK that will be supported for 3 more months. A version less than this is either not supported or
34+
* should trigger a warning to users that support for the version will be gone in an upcoming plugin version.
2735
* <p>
28-
* This version was updated last on November 4th, 2024, and in coordination with the VS Code support.
36+
* Note, this is for the Flutter SDK version, not the Dart SDK version, this mapping can be found:
37+
* <a href="https://docs.flutter.dev/release/archive">Flutter SDK Release Archive list</a>.
38+
* <p>
39+
* This version was updated last on May 29, 2024.
2940
*/
3041
@VisibleForTesting
3142
@NotNull
32-
public static final FlutterSdkVersion MIN_SDK_SUPPORTED = new FlutterSdkVersion("3.10.0");
43+
public static final FlutterSdkVersion MIN_SDK_WITHOUT_SUNSET_WARNING = new FlutterSdkVersion("3.13.2");
3344

3445
@NotNull
3546
private static final FlutterSdkVersion MIN_SUPPORTS_DEVTOOLS_PATH_URLS = new FlutterSdkVersion("3.3.0");
@@ -150,6 +161,10 @@ public boolean isSDKSupported() {
150161
return supportsVersion(MIN_SDK_SUPPORTED);
151162
}
152163

164+
public boolean isSDKAboutToSunset() {
165+
return this.compareTo(MIN_SDK_SUPPORTED) >= 0 && this.compareTo(MIN_SDK_WITHOUT_SUNSET_WARNING) < 0;
166+
}
167+
153168
public boolean isValid() {
154169
return version != null;
155170
}

flutter-idea/src/io/flutter/settings/FlutterSettings.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,16 +235,16 @@ public void setShowBazelIosRunNotification(boolean value) {
235235
/**
236236
* See {FlutterSdkVersion#MIN_SDK_SUPPORTED}.
237237
*/
238-
public boolean isSdkVersionOutdatedWarningAcknowledged(String versionText) {
239-
return getPropertiesComponent().getBoolean(getSdkVersionKey(versionText));
238+
public boolean isSdkVersionOutdatedWarningAcknowledged(String versionText, boolean isBeforeSunset) {
239+
return getPropertiesComponent().getBoolean(getSdkVersionKey(versionText, isBeforeSunset));
240240
}
241241

242-
public void setSdkVersionOutdatedWarningAcknowledged(String versionText, boolean value) {
243-
getPropertiesComponent().setValue(getSdkVersionKey(versionText), value);
242+
public void setSdkVersionOutdatedWarningAcknowledged(String versionText, boolean isBeforeSunset, boolean value) {
243+
getPropertiesComponent().setValue(getSdkVersionKey(versionText, isBeforeSunset), value);
244244
}
245245

246-
private String getSdkVersionKey(String versionText) {
247-
return sdkVersionOutdatedWarningAcknowledgedKey + "_" + versionText;
246+
private String getSdkVersionKey(String versionText, boolean isBeforeSunset) {
247+
return sdkVersionOutdatedWarningAcknowledgedKey + "_" + versionText + "_" + (isBeforeSunset ? "beforeSunset" : "afterSunset");
248248
}
249249

250250
public boolean isAndroidStudioBotAcknowledged() {

flutter-idea/testSrc/unit/io/flutter/sdk/FlutterSdkVersionTest.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,25 @@ public void parsesGoodVersion() {
1717
}
1818

1919
@Test
20-
public void trackWidgetCreationRecommendedRange() {
20+
public void trackSdkVersionSupport() {
2121
assertFalse(new FlutterSdkVersion("3.9.0").isSDKSupported());
2222
assertFalse(new FlutterSdkVersion("3.9.0").isSDKSupported());
2323
assertFalse(new FlutterSdkVersion("3.9.0.pre").isSDKSupported());
24-
assertTrue(new FlutterSdkVersion( "3.10.0.pre").isSDKSupported());
25-
assertTrue(new FlutterSdkVersion( "3.10.1").isSDKSupported());
26-
assertTrue(new FlutterSdkVersion( "3.10.2").isSDKSupported());
24+
assertFalse(new FlutterSdkVersion( "3.10.0.pre").isSDKSupported());
25+
assertFalse(new FlutterSdkVersion( "3.10.1").isSDKSupported());
26+
assertFalse(new FlutterSdkVersion( "3.10.2").isSDKSupported());
27+
assertTrue(new FlutterSdkVersion( "3.10.3").isSDKSupported());
28+
assertTrue(new FlutterSdkVersion( "3.10.4").isSDKSupported());
2729
assertFalse(new FlutterSdkVersion( "unknown").isSDKSupported());
30+
31+
assertTrue(new FlutterSdkVersion("3.10.3").isSDKAboutToSunset());
32+
assertTrue(new FlutterSdkVersion("3.10.4").isSDKAboutToSunset());
33+
assertTrue(new FlutterSdkVersion("3.10.5").isSDKAboutToSunset());
34+
assertTrue(new FlutterSdkVersion("3.10.6").isSDKAboutToSunset());
35+
assertTrue(new FlutterSdkVersion("3.13.0").isSDKAboutToSunset());
36+
assertTrue(new FlutterSdkVersion("3.13.1").isSDKAboutToSunset());
37+
assertFalse(new FlutterSdkVersion("3.13.2").isSDKAboutToSunset());
38+
assertFalse(new FlutterSdkVersion("3.13.3").isSDKAboutToSunset());
2839
}
2940

3041
@Test

0 commit comments

Comments
 (0)