Flutter State<WidgetName> createState() => WidgetNameState()
Posted
技术标签:
【中文标题】Flutter State<WidgetName> createState() => WidgetNameState()【英文标题】: 【发布时间】:2021-12-05 02:53:22 【问题描述】:在 Flutter 中,当初始化一个新的 stateful widget 时,默认是这样初始化的:
class WidgetName extends StatefulWidget
const WidgetName( Key? key ) : super(key: key);
@override
WidgetNameState createState() => WidgetNameState();
我看到了另一种初始化 statefulwidget 的方法,@override 略有不同。
class WidgetName extends StatefulWidget
const WidgetName( Key? key ) : super(key: key);
@override
State<WidgetName> createState() => WidgetNameState();
注意@override 方法中,WidgetNameState
变成了State<WidgetName>
。 Flutter repo 中有一个解释:Link,但我无法理解它想说什么。
State<WidgetName>
究竟做了什么?它有什么好处吗?
我认为这是没有必要的,因为 WidgetNameState
在其类构造中已经从 State<WidgetName>
扩展而来。
class WidgetNameState extends State<WidgetName>
@override
Widget build(BuildContext context)
【问题讨论】:
【参考方案1】:使用泛型确实可以让您定义一个必须使用的抽象 Widget 接口,而不必与该抽象 Widget 接口一起定义任何状态。
让我们先看看使用具体类(WidgetNameState
)。这是一个抽象的定义,如果我们这样做,我们必须定义状态。
abstract class FooWidget extends StatefulWidget
const FooWidget(Key? key) : super(key: key);
@override
_FooWidgetState createState();
abstract class _FooWidgetState extends State<FooWidget>
@override
Widget build(BuildContext context)
return Container();
现在要能够扩展它,您必须同时扩展小部件和状态。
class ImplementedFooWidget extends FooWidget
const ImplementedFooWidget(Key? key) : super(key: key);
@override
_ImplementedFooWidgetState createState() => _ImplementedFooWidgetState();
class _ImplementedFooWidgetState extends _FooWidgetState
@override
Widget build(BuildContext context)
return Container();
现在让我们看看使用泛型 (State<WidgetName>
)。如果我们使用泛型,我们可以定义和扩展小部件并拥有我们自己的自定义状态。
abstract class BarWidget extends StatefulWidget
const BarWidget(Key? key, required this.someRequiredString)
: super(key: key);
final String someRequiredString;
@override
State<BarWidget> createState();
class ImplementedBarWidget extends BarWidget
const ImplementedBarWidget(Key? key, required String someRequiredString)
: super(
key: key,
someRequiredString: someRequiredString,
);
@override
_ImplementedBarWidgetState createState() => _ImplementedBarWidgetState();
class _ImplementedBarWidgetState extends State<ImplementedBarWidget>
@override
Widget build(BuildContext context)
return Container();
我希望一切都有意义。
【讨论】:
以上是关于Flutter State<WidgetName> createState() => WidgetNameState()的主要内容,如果未能解决你的问题,请参考以下文章