在 Widget 或 State 上保留 final 字段?

Keeping final fields on the Widget or the State?

最终值应该放在哪里?

StatefulWidget(当然是我的子类)实例中并通过 widget.thatFinalField

State(子类)访问它

State 本身。我已经看过这两种方法了。它们各有优缺点吗?

您应该在 StatefulWidget 上存储 final 成员字段(通过构造函数参数传递)并使它们成为 public.

StatefulWidget 的关联 State 应该只使用默认构造函数(无参数),其成员字段应该是私有的(以 _ 开头)和可变的。如果需要昂贵或异步工作,则内联或在 initState 中初始化它们。

此模式允许 StatefulWidget 在其父级调用 setState 时使用新的构造函数参数 recreated/rebuilt,同时重新使用先前的 State 并让它保留存储在其可变成员字段中的值。