🔃

Flutterのバージョンを切り替えたときに環境が壊れるのをなんとかしたい

2023/02/16に公開

Flutterのバージョンを切り替えるとき、皆さんはどのような方法を取っていますか?
おそらく fvmasdf がよく使われるところだと思います。自分もこの2つをよく使っています。
しかし、これらを使っていて困ったことが、Flutterのアップデート等でバージョンを切り替えたときにVS Code上でうまく切り替わらない(デバッグ実行や静的解析に使うバイナリが更新されない)ことがよくありました。

というわけで、今回はこの問題に向き合っていこうと思います。

問題点

今まではfvmのドキュメントに書かれているやり方みたいな記述をしてました。
しかし、複数のバージョンを導入して切り替えたりしていると、これがよく動かなくなることがあります(少なくとも自分の環境では)。

原因は色々考えられます。自分が遭遇した大きな問題は2つで、以下の通りでした。

  • VS Codeが自動で検出するSDKが優先されてしまう
    • ワークスペースではなくユーザー設定のほうが適用されるケースも
  • Homebrewでfvmを導入した際に依存関係になっているDart SDKが優先されてしまう
    • Flutterのプロジェクトではないとき

なんとかした

というわけでなんとかしました。

結論から書くと、ワークスペース設定( <プロジェクトディレクトリ>/.vscode/settings.json )で以下のように指定すると一番安定します。

asdfの場合

{
    "dart.flutterSdkPath": "~/.asdf/installs/flutter/master",
}

fvmの場合

{
    "dart.flutterSdkPath": "~/fvm/versions/master",
}

なんとかなった?

少なくとも自分の環境では、この指定が一番安定しました。
fvmの方でなぜドキュメントに書いてある .fvm の指定が動かなくて直接指定が動くのかは謎です。どなたかピンときた方、特に問題なく動いてる方はこっそり教えて下さい。
またこのやり方も万全ではなくて、例えばgitで .vscode 含めてバージョン管理しているときに複数バージョンで検証したい!となったら一時的にコミットしたくない差分が生まれてしまうことになります。

もうちょっといいやり方無いかな…

Sun* Developers

Discussion