PR

[Flutter][Dart]「Avoid defining a one-member abstract class when a simple function will do. 」の対応方法

Flutter

はじめに

先日、Flutterで開発をしていてabstractを使った際に「Avoid defining a one-member abstract class when a simple function will do.」というWarningが出たのでメモ。

環境

  • Flutter : 2.2.3
  • Dart : 2.13.4

ワーニングの意味は?

one_member_abstracts

要するに、1つしか関数がないような抽象クラスの場合は、抽象クラスではなくファーストクラスの関数やクロージャを使えってことです。

対応方法

対応前

例をあげます。

以下のような抽象クラスがあったとして

abstract class Compare<E> {
  bool compare(E a, E b);
}

派生クラスを作る場合は以下のようになります

class TestData extends Compare<int> {
  @override
  bool compare(int a, int b) {
    return a == b;
  }
}

そして使い方はこんな感じ

  void test() {
    final t = TestData();
    print('${t.compare(1, 2)}');
  }

この際に抽象クラスで「Avoid defining a one-member abstract class when a simple function will do.」のWarningがでます。

対応後

対応後は抽象クラスのabstractをやめて、typedefで宣言します。

typedef Compare<E> = bool Function(E a, E b);

そしてそれを利用するクラスを作成します。

class TestData<E> {
  TestData(this.compare);

  Compare<E> compare;
}

使い方はこんな感じ。

  void test() {
    final t = TestData<int>((int a, int b) {
      return a == b;
    });
    print('${t.compare(1, 2)}');
  }

さいごに

いずれメソッド等増やす予定ならば一旦は無視しても良いかも。

おすすめ参考書

コメント

タイトルとURLをコピーしました