Keeping final fields on the Widget or the State?

2019-06-24 10:45发布

问题:

Where should one keep final values?

In the StatefulWidget (my subclass of course) instance and access it from the State (subclass) via widget.thatFinalField, or

In the State itself. I've seen both approaches already.. Any pros and cons for each of them?

回答1:

You should store final member fields (which are passed via constructor arguments) on the StatefulWidget and make them public.

The StatefulWidget's associated State should use only the default constructor (no arguments), and its member fields should be private (starting with a _) and mutable. Initialize them inline or in initState if expensive or async work is necessary.

This pattern allows the StatefulWidget to be recreated/rebuilt with new constructor arguments when its parents call setState, while re-using the previous State and letting it keep the values stored in its mutable member fields.



标签: dart flutter