- Putting a
Widget
build(BuildContext context
) method on State
rather than putting a Widget
build(BuildContext context
, State state
) method on StatefulWidget
gives developers more flexibility when subclassing StatefulWidget
.
- For example,
AnimatedWidget
is a subclass of StatefulWidget
that introduces an abstract Widget
build(BuildContext context
) method for its subclasses to implement. If StatefulWidget
already had a build method that took a State
argument, AnimatedWidget
would be forced to provide its State
object to subclasses even though its State
object is an internal implementation detail of AnimatedWidget
.
- Conceptually,
StatelessWidget
could also be implemented as a subclass of StatefulWidget
in a similar manner. If the build method were on StatefulWidget
rather than State
, that would not be possible anymore.
- Putting the build function on
State
rather than StatefulWidget
also helps avoid a category of bugs related to closures implicitly capturing this. If you defined a closure in a build function on a StatefulWidget
, that closure would implicitly capture this, which is the current widget instance, and would have the (immutable) fields of that instance in scope.