Flutter Lint avoid_unnecessary_containers, no_logic_in_create_state
津路です。
avoid_unnecessary_containers
Flutter Lint rulesにご紹介した不要なcontainerサンプルを再掲します。
1 2 3 4 5 6 7 8 9 10 11 12 | 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オブジェクトへ独自のコンストラクタパラメータを使って、データを渡すこともならん、ということです。
良くない例として以下が掲載されています。
1 2 3 4 5 6 7 8 9 | MyState global; class MyStateful extends StatefulWidget { @override MyState createState() { global = MyState(); return global; } } |
関数内で仕事をさせているのでだめ。
1 2 3 4 5 6 7 8 | class MyStateful extends StatefulWidget { @override MyState createState() => MyState()..field = 42; } class MyStateful extends StatefulWidget { @override MyState createState() => MyState(42); } |
上記コードでは、データを渡していますので、だめ。
良い例は以下
1 2 3 4 5 6 | class MyStateful extends StatefulWidget { @override MyState createState() { return MyState(); } } |