Dart3.8への更新に伴い、Flutterのコードフォーマッタが従来と異なる挙動になりました。
経緯と現状
使用環境
— 私の環境 —
OS : Windows11
エディタ : VS Code July 2025 (version 1.103)
Flutter : 3.35.1
Dart : 3.9.0
従来の挙動
従来は末尾のカンマによって改行を制御することができていました。
・末尾にカンマを付けると改行
・末尾にカンマを付けないと1行

この仕様は便利であるものの、「毎回カンマを付けるか外すか判断する必要がある」「プロジェクト内で品質を統一できない」といったデメリットから今回の仕様変更に至ったみたいです。
詳細はGithubより → https://github.com/dart-lang/dart_style/issues/1253
Dart 3.8.0 の改行事情
Dart3.8からは1行の長さなどから自動でフォーマッタが判断してカンマと改行が制御されるようになりました。
一方で、フォーマッタが勝手に整形するため人間がカンマを外しても自動で追加して改行されたり、逆にカンマを付けても自動で削除されて1行にされたりしてしまいます。
改行をフォーマッタの仕様に従うことで品質を統一できますが、個人開発者などは自身のルールで改行を制御したいことも多いかと思います。
例えば下記のように曜日の見出しを作る場合、1行で曜日1つに対応させることで差分が確認しやすくなりますね!

対処法
対処法1
多くのサイトで下記の対処法が紹介されています。
プロジェクト直下のanalysis_options.yamlに trailing_commas: preserve を追記します。
# analysis_options.yaml
formatter:
trailing_commas: preserve
これである程度対処することはできますが、私の環境では完全に以前の挙動に戻すことができませんでした。
対処法2
DartのSDKのバージョン指定を変更します。
pubspec.yamlを開き、environmentから sdk: “>=3.2.6 <4.0.0” とします。
environment:
# sdk: ^3.9.0 ← 変更前
sdk: ">=3.2.6 <4.0.0"
変更前のsdk: ^3.9.0 ではDart SDKの3.9.0以上を指定しており、
変更後のsdk: “>=3.2.6 <4.0.0” ではDart SDKの 3.2.6以上 4.0.0 以下を指定します。
私の環境ではこの変更で従来と同じく、カンマで改行を制御できるようになりました。なぜはわかりません
複数のDart SDKがインストールされた環境では、旧バージョンが使用されることがあるかもしれません。
念の為確認しましたが、3.9.0が使用されていました。
PS C:\Users\fuyuki\test> flutter --version
Flutter 3.35.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 20f8274939 (11 days ago) • 2025-08-14 10:53:09 -0700
Engine • hash 6cd51c08a88e7bbe848a762c20ad3ecb8b063c0e (revision 1e9a811bf8) (11 days ago) • 2025-08-13 23:35:25.000Z
Tools • Dart 3.9.0 • DevTools 2.48.0
対処法2が効いた理由も不明で確実性も無く申し訳ありませんが、もしこれで改善できれば嬉しいです。
原因、対処法、更新情報などございましたらコメント頂けるとありがたいです。
コメント