flutter-intellij icon indicating copy to clipboard operation
flutter-intellij copied to clipboard

Migrate PlatformsForm.kt to Kotlin UI DSL Version 2

Open jwren opened this issue 1 year ago • 2 comments

com.intellij.ui.layout.Cell deprecation, see https://plugins.jetbrains.com/docs/intellij/kotlin-ui-dsl-version-2.html

File in the Flutter IJ plugin: io/flutter/module/settings/PlatformsForm.kt.

jwren avatar Apr 02 '24 18:04 jwren

Dear Google team, as I maintained a fork for WebStorm(the Flutter Storm plugin), please try the following in DSL 2(please make sure to check may be something different or potential bugs):

import com.intellij.openapi.ui.DialogPanel
import com.intellij.ui.dsl.builder.*
import com.intellij.ui.layout.ComponentPredicate
import io.flutter.FlutterBundle
import io.flutter.sdk.FlutterCreateAdditionalSettings

class PlatformsForm {

  var channel: FlutterSdkChannel? = null
  private var configAndroid: Boolean = true
  private var configIos: Boolean = true
  private var configLinux: Boolean = true
  private var configMacos: Boolean = true
  private var configWeb: Boolean = true
  private var configWindows: Boolean = true
  var component: DialogPanel? = null

  fun panel(settings: FlutterCreateAdditionalSettings) =
    panel {
      row {
          makeCheckBox( FlutterBundle.message("npw_platform_android"), settings.platformAndroidProperty, configAndroid)
          makeCheckBox( FlutterBundle.message("npw_platform_ios"), settings.platformIosProperty, configIos)
          makeCheckBox( FlutterBundle.message("npw_platform_linux"), settings.platformLinuxProperty, configLinux)
          makeCheckBox( FlutterBundle.message("npw_platform_macos"), settings.platformMacosProperty, configMacos)
          makeCheckBox( FlutterBundle.message("npw_platform_web"), settings.platformWebProperty, configWeb)
          makeCheckBox( FlutterBundle.message("npw_platform_windows"), settings.platformWindowsProperty, configWindows)
      }

      row {
        label(FlutterBundle.message("npw_platform_selection_help"))
      }
    }.apply { component = this }


  private fun Row.makeCheckBox(name: String, property: InitializeOnceBoolValueProperty,
                           config: Boolean?) {

    val wasSelected = config == true
    property.initialize(wasSelected)

    val names: List<String> = listOfNotNull(
        FlutterBundle.message("npw_platform_android"),
        FlutterBundle.message("npw_platform_ios"),
        FlutterBundle.message("npw_platform_web"),
        FlutterBundle.message("npw_platform_windows"),
        FlutterBundle.message("npw_platform_linux"),
        FlutterBundle.message("npw_platform_macos"),
    )
    checkBox(name)
        .actionListener { _, button -> property.set(button.isSelected) }.selected(property.get())
        .enabledIf( ComponentPredicate.fromValue( names.contains(name) || wasSelected ) )
  }
}

beansoft avatar Apr 17 '24 03:04 beansoft

@beansoft thank you for the prompt here. Consider creating a PR :)

  • @jwren

jwren avatar Apr 27 '24 14:04 jwren