Open13
Package of the Week メモ
Device_info
Android は await deviceInfoPlugin().androidInfo
で取得できる。
iOS も同様に await deviceInfoPlugin().iosInfo;
で取得できる。
どちらも BaseDeviceInfo
型のサブクラスになっている。
よって、
BaseDeviceInfo device = Platform.isAndroid
? await deviceInfoPlugin().androidInfo
: await deviceInfoPlugin().iosInfo;
という形でデータが取れる。
BaseDeviceInfo
クラスの実装はシンプル。
flutter_lints
の recommended
は dart-lang/lints
の recommended
を使っている。
推奨ルールを見てみる。
annotate_override
クラスのメンバを上書きするときは override
アノテーションをつける。
意図せずスーパークラスのメンバが上書きされてしまうのを防ぐ。
くわしく
公式ドキュメント
悪い例
bad.dart
class Person {
String get name => 'person';
}
class Koya extends Person {
final String name = 'koya';
}
良い例
good.dart
class Person {
String get name => 'person';
}
class Koya extends Person {
final String name = 'koya';
}
avoid_function_literals_in_foreach_calls
関数リテラルに対して forEach
を利用しない。
メリットがわからない。誰か教えてください。
くわしく
公式ドキュメント
悪い例
bad.dart
countries.forEach((country) {
...
});
良い例
good.dart
for (var country in countries) {
...
}
avoid_init_to_null
変数の初期値を null
と明示しない。
nullable
な変数に初期値を設定しない場合は、暗黙的に null
になる。
冗長で不要な表現なので初期値に null
を明示的に設定しない。
くわしく
公式ドキュメント
avoid_null_checks_in_equality_operators
カスタムの ==
作用素で null
チェックをしない。
Freezed などを使っているので意識したことない。
null
は特別な値であり、
クラスのインスタンスが null
と等しくなることはない。
( Null
は除くけど)
よって null
比較は冗長なのでいらない。
くわしく
公式ドキュメント
悪い例
bad.dart
class Person {
final String? name;
operator ==(Object? object) => other != null && other is Person && name == other.name;
}
良い例
good.dart
class Person {
final String? name;
operator ==(Object? object) => other != null && other is Person && name == other.name;
}
avoid_renaming_method_parameters
サブクラスで上書きした関数のパラメータ名を変更しない。
dart doc
で生成するドキュメンテーションでパラメータが適切に設定できなくなるため。
そもそも読みづらいしな...。やらん方が良さそう。
くわしく
公式ドキュメント
悪い例
bad.dart
class SuperClass {
void foo(String bar) {}
}
class SubClass extends SuperClass {
void foo(String baz) {}
}
良い例
good
class SuperClass {
void foo(String bar) {}
}
class SubClass extends SuperClass {
void foo(String bar) {}
}
あまりにも数が多いので Notion でまとめる。