person t-kobayashi

package:flutter_lintsの導入

calendar_today 2021年10月20日 update 2021年10月20日
Facebook Twitter LINE はてなブックマーク Pocket

公式ドキュメントに各リリースで発生したブレーキングチェンジの一覧があります。

https://flutter.dev/docs/release/breaking-changes

今回は、Flutter 2.5のブレーキングチェンジの一つとして挙げられているpackage:flutter_lintsの導入について、まとめたいと思います。

パッケージの導入

下記のコマンドで、package:flutter_lintspubspec.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を呼ぶことを避けなさい、という提案ですが、これはprintdebugPrintという関数に置き換えることで解決しました。ただし、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キーワードを追加する必要がでてくるので、同様に対処していきます。

というような感じで一通り対応したら作業は完了です。

関連記事

Flutterの記事一覧を見る

Flutterの質問

soichiro1210 が11ヶ月前に投稿

質問日時 2023年07月31日

a-sato が3年前に投稿

質問日時 2021年07月01日

a-sato が3年前に投稿

質問日時 2021年06月30日

takumi が3年前に投稿

質問日時 2021年05月20日

a-sato が3年前に投稿

質問日時 2021年05月14日

Flutterの質問一覧を見る
search