概要
Dart/Flutterのプロジェクトでコードの静的解析を行うには、 analysis_options.yaml
を設定します。
コードの静的解析についてはこちらが参考になります。
また、Dart/FlutterでのLintルールは、こちらに一覧が記載されています。
VSCodeやAndroid Studioで、静的解析によるエラーに遭遇しても、じゃあどうしたらいいのか、すぐにわからないことが度々あるので、こちらにそれを記載していきます。
ただ、本来は各IDEで適切なpackageを設定するか、こちらのLintルール一覧で検索するのが適切な解決策かなとは思います。
ルール
avoid_function_literals_in_foreach_calls
AVOID using forEach with a function literal.
関数リテラルでforEachを使うことは避ける
シーケンスの反復処理においては、for文をもちいる。
// この使い方は避けること
dogs.forEach((dog) {
.....
});
// for文にする
for (var dog in dogs) {
.....
}
// この様な書き方はOK
dogs.forEach(print);
avoid_init_to_null
ドキュメント
nullを使って初期化しない
Dartでは、明示的に初期化されていない変数やフィールドは、自動的にnullに初期化されます。
このため、nullを使って初期化することは冗長であり、不要です。
また、Dartには、初期化されていないメモリという概念はありません。
// nullで初期化してはいけない
int somethingNumber = null;
// こうする
int somethingNumber;
avoid_single_cascade_in_expression_statements
- ドキュメント
- 式文では単一のカスケードを避ける
// こういった用法を避ける、だってカスケードの使い方として間違っている
cake..bake();
// こうする
cake..bake();
// 本来カスケードはこう使う
cake
..bake()
..putStrawberryOnTheTop()
..eat();
implicit_dynamic_variable
変数の型を明示的にする
// 変数(_createdAt)の型が明示的になっていない
final _createdAt = data['createdAt'];
// こんな感じにする
final _createdAt = data['createdAt'] as DateTime;
↑のようにするか、解析オプションファイルから implicit-dynamic を削除する
unnecessary_lambdas
- ドキュメント
-
DON'T create a lambda when a tear-off will do.
tear-offが可能な場合は、ラムダを作成しないでください。
- つまり、
メソッドに渡された引数と同じ引数でメソッドを呼び出す関数がある場合、呼び出しをラムダでラップしないようにしましょう
、ということ - tear-offとは、メソッドと同じパラメータを取り、それを呼び出すクロージャのこと
// ダメ、よくあるやり方
listItems.forEach((eachList) {
print(eachList);
});
// こうする、便利
listItems.forEach(print);
curly_braces_in_flow_control_structures
- ドキュメント
-
DO use curly braces for all flow control structures.
すべてのフロー制御構造に中括弧を使用してください
// if文の際、 {} を省略せずにちゃんと書く
if (todayIsApril) {
print('Spring has come!');
} else {
print('Please wait for Spring.');
}
// こうしちゃダメ、JSなどに慣れているとやりがちかもしれません
if (todayIsSummer)
return print('Too hot!');
// 例外: これはOK、else文がないif文で、bodyが1行の短文の場合
if (isAutumn) return '🌰';
その他
- 今後随時追記していきます