大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Flutter Lint avoid_unnecessary_containers, no_logic_in_create_state

著者:津路高広
公開日:2023/03/20
最終更新日:2023/03/20
カテゴリー:技術情報
タグ:

津路です。

avoid_unnecessary_containers
Flutter Lint rulesにご紹介した不要なcontainerサンプルを再掲します。

Widget buildRow() {
  return Container(
      child: Row(
        children: <Widget>[
          const MyLogo(),
          const Expanded(
            child: Text('...'),
          ),
        ],
      )
  );
}

containerは、パラメータを使って、widgetの領域を確保します。
通常は、child以外のパラメータ、widthなどを使います。が、この例では、childしかないので、return child: Rowから始めた方がスッキリします。

no_logic_in_create_state
createState関数とは、StatefulWidgetになくてはならないもので、Widgetの動きを制御するStateオブジェクトを生成すると、私はとらえています。
このlint警告は、createState()には、Stateオブジェクトを返すこと以外、仕事をさせるな、ということです。
Stateへのアクセスは、Widgetフィールドを通じて行いなさい、Stateオブジェクトへ独自のコンストラクタパラメータを使って、データを渡すこともならん、ということです。
良くない例として以下が掲載されています。

MyState global;

class MyStateful extends StatefulWidget {
  @override
  MyState createState() {
    global = MyState();
    return global;
  } 
}

関数内で仕事をさせているのでだめ。

class MyStateful extends StatefulWidget {
  @override
  MyState createState() => MyState()..field = 42;
}
class MyStateful extends StatefulWidget {
  @override
  MyState createState() => MyState(42);
}

上記コードでは、データを渡していますので、だめ。

良い例は以下

class MyStateful extends StatefulWidget {
  @override
  MyState createState() {
    return MyState();
  }
}
    上に戻る