Why is the build() method on State and not Stateful Widget?

Technology CommunityCategory: FlutterWhy is the build() method on State and not Stateful Widget?
VietMX Staff asked 3 years ago
  • Putting a Widget build(BuildContext context) method on State rather than putting a Widget build(BuildContext contextState 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.