公式ドキュメントに各リリースで発生したブレーキングチェンジの一覧があります。
https://flutter.dev/docs/release/breaking-changes
今回は、Flutter 2.5のブレーキングチェンジの一つとして挙げられているpackage:flutter_lints
の導入について、まとめたいと思います。
パッケージの導入
下記のコマンドで、package:flutter_lints
をpubspec.yaml
に追加します。
flutter pub add --dev flutter_lints
analysis_options.yaml
ファイルをプロジェクト直下、つまりpubspec.yaml
と同じフォルダに作成します。作成したanalysis_options.yaml
ファイルには、以下の1行を記載します。
include: package:flutter_lints/flutter.yaml
すでに、analysis_options.yaml
というファイルがプロジェクトに存在している場合は、上記の1行をファイルの一番上に追加します。ただし、すでにinclude:
ディレクティブが存在している場合は、古いものをそのまま使い続けるか、上記の1行で上書きするか、判断する必要があるようです。
分析と修正
上記の設定が完了したら、以下のコマンドを実行して問題を洗い出します。
flutter analyze
コードの質によると思いますが、今回導入したプロジェクトでは276件の問題が検出されました。機能的な問題はありませんが、下記のコマンドで自動修正できる問題に修正が適用されます。
dart fix --apply
今回の例では、42件の問題が解決しました。自動で解決された問題の例をいくつか紹介します。
- ContainerウィジェットをSizedBoxウィジェットに置換する
- 変数などにconstを追加する
- 変数などにfinalを追加する
- 配列の空チェックが
length > 0
からisEmpty
に変更する -
someList.forEach((element) {});
という表記をfor (element in someList) {}
という表記に変更する -
'$someVariable'
という表記をsomeVariable
という表記に変更する
自動修正完了後で、237件の問題が残っていました。残った問題は基本的に以下の3種類でした。
- info • Avoid `print` calls in production code: 製品版ではprintは使うべきではにということですね。
- info • Use key in widget constructors: コンストラクターにkeyを追加すればよいようです。
- Prefer const with constant constructors: あまり気にしたことがなかったですが。今後気を付けます。
ビルドは問題なく生成できますが、全部対応してスッキリしたいと思います。
まず、製品版でprint
を呼ぶことを避けなさい、という提案ですが、これはprint
をdebugPrint
という関数に置き換えることで解決しました。ただし、print
はパラメータにObject
をとるのに対し、debugPrint
は1つ目のパラメータにString
をとるので、置き換える際はデータ型を調整する必要がある場合があります。
残りの2つはIDEからの提案を受け入れることで、概ね解決しますが、コンストラクターをすでに定義していて、keyを追加する場合は、以下のように更新しました。
class SomeWidget extends StatelessWidget {
const SomeWidget({this.someParam});
・・・
}
↓
class SomeWidget extends StatelessWidget {
const SomeWidget({Key? key, this.someParam}): super(key: key);
・・・
}
keyを追加することで、該当のウィジェットを呼ぶ側でもconst
キーワードを追加する必要がでてくるので、同様に対処していきます。
というような感じで一通り対応したら作業は完了です。