在下面的代码示例中,来自flutter docs:
class RandomWords extends StatefulWidget {
@override
createState() => RandomWordsState();
}
class RandomWordsState extends State<RandomWords> {
@override
Widget build(BuildContext context) {
final wordPair = WordPair.random();
return Text(wordPair.asPascalCase);
}
}
State<RandomWords>
语法到底是什么意思?
我了解您可以使用以下语法为集合中包含的对象(例如列表)指定类型-List <String>
但是我无法理解State<RandomWords>
背后的动机。
此外,如何在RandomWordsState
声明中引用RandomWords
,又如何在RandomWords
声明中引用RandomWordsState
?那不是应该引起循环引用错误吗?
我来自动态类型的语言(例如python),这对我来说有点奇怪,有人可以将我指向正确的位置吗?
答案 0 :(得分:2)
<RandomWords>
是传递给State
类的通用类型参数。
State
类看起来像
abstract class State<T extends StatefulWidget> extends Diagnosticable {
和RandomWords
将被传递到T
类型的参数,该参数具有一个约束,即T
必须是StatefulWidget
的子类。
State
还有一个使用type参数的字段和getter
T get widget => _widget;
T _widget;
这将导致小部件类型的属性
它在其子类RandomWordsState
假设你有
class RandomWords extends StatefulWidget {
RandomWords({this.fixed});
final WordPair fixed;
@override
createState() => RandomWordsState();
}
class RandomWordsState extends State<RandomWords> {
@override
Widget build(BuildContext context) {
// vvvv here we can access `fixed` in a strongly typed manner
final wordPair = widget.fixed ?? WordPair.random();
return Text(wordPair.asPascalCase);
}
}
另请参阅https://www.dartlang.org/guides/language/language-tour#generics