Flutter Lint avoid_unnecessary_containers, no_logic_in_create_state

津路です。
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(); } }